Advertisement
Guest User

ren2txt

a guest
Jan 8th, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3.  
  4. # python2 — renpy же
  5.  
  6. # Created by Anonymous
  7. # WTFPL http://wtfpl.org/
  8.  
  9. # Для любителей оперативно избавиться от тухлых помидоров:
  10. # gnosis.xml и jsonpickle хотя и подавали надежды, но
  11. # с задачей не справились и не смогли десериализовать то,
  12. # что сами до этого сериализовали.
  13. # В pickle формата 0 руками ковыряться тоже не так тяжело.
  14. # А хоть чуть-чуть програмистам поможет посмотреть
  15. # что-нибудь вроде /usr/lib/python2.7/pickle.py
  16. # Впрочем заранее спасибо за кучу идей относительно того,
  17. # каким образом можно (де)сериализовать произвольные
  18. # объекты Питона в более человеческом текстовом формате.
  19.  
  20. def import_renpy(renpypath):
  21.     """Не важно, где, главное дать этой заразе загрузиться разок"""
  22.     import sys
  23.     sys.path.append(renpypath)
  24.     import renpy
  25.     import renpy.object
  26.     import renpy.game
  27.     import renpy.preferences
  28.  
  29.  
  30. def ren2txt(ren, txt):
  31.     import cPickle as pickle
  32.     with open(ren, "rb") as pfl:
  33.         s = pfl.read().decode("zlib")
  34.         data = pickle.loads(s)
  35.     print("Загрузили RenPy")
  36.     with open(txt, "w+") as tfl:
  37.         pickle.dump(data, tfl, protocol=0) # 0 is readable
  38.         tfl.flush()
  39.     print("Сохранили TXT")
  40.  
  41. def txt2ren(txt, ren):
  42.     import cPickle as pickle
  43.     with open(txt, "r") as tfl:
  44.         data = pickle.load(tfl)
  45.     print("Загрузили TXT")
  46.     with open(ren, "w+") as pfl:
  47.         pdata = pickle.dumps(data)
  48.         pfl.write(pdata.encode("zlib"))
  49.         pfl.flush()
  50.     print("Сохранили RenPy")
  51.  
  52. def getargs():
  53.     import argparse
  54.     parser = argparse.ArgumentParser(description="Перегоняет zlib(pickle) от RenPy в текст и назад")
  55.     parser.add_argument('-op', '--operation', choices = ['ren2txt', 'txt2ren'],
  56.                         required = True, help = "Куда преобразовывать")
  57.     parser.add_argument('-ren', '--renpy-file', required = True, help = "Файл persistent от RenPy")
  58.     parser.add_argument('-txt', '--editable-text', required = True, help = "Текст для ковыряния руками %%D")
  59.     parser.add_argument('-gdr', '--game-dir', required = True, help = "Каталог игры с подкаталогом RenPy")
  60.  
  61.     return parser.parse_args()
  62.  
  63. def main():
  64.     args = getargs()
  65.     gdr = args.game_dir
  66.     op  = args.operation
  67.     txt = args.editable_text
  68.     ren = args.renpy_file
  69.  
  70.     import_renpy(gdr)
  71.  
  72.     if op == 'ren2txt':
  73.         ren2txt(ren, txt)
  74.     else: # 'txt2ren'
  75.         txt2ren(txt, ren)
  76.  
  77. if __name__ == '__main__':
  78.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement