Advertisement
Guest User

ren2txt

a guest
Jan 8th, 2014
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.05 KB | None | 0 0
  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.     # print("rpp = " + renpypath)
  24.     sys.path.append(renpypath)
  25.     import renpy
  26.     import renpy.object
  27.     import renpy.game
  28.     import renpy.preferences
  29.  
  30.  
  31. def ren2txt(ren, txt):
  32.     import cPickle as pickle
  33.     with open(ren, "rb") as pfl:
  34.         s = pfl.read().decode("zlib")
  35.         data = pickle.loads(s)
  36.     print("Загрузили RenPy")
  37.     with open(txt, "w+") as tfl:
  38.         pickle.dump(data, tfl, protocol=0) # 0 is readable
  39.         tfl.flush()
  40.     print("Сохранили TXT")
  41.  
  42. def txt2ren(txt, ren):
  43.     import cPickle as pickle
  44.     with open(txt, "r") as tfl:
  45.         data = pickle.load(tfl)
  46.     print("Загрузили TXT")
  47.     with open(ren, "w+") as pfl:
  48.         pdata = pickle.dumps(data)
  49.         pfl.write(pdata.encode("zlib"))
  50.         pfl.flush()
  51.     print("Сохранили RenPy")
  52.  
  53. def getargs():
  54.     import argparse
  55.     parser = argparse.ArgumentParser(description="Перегоняет zlib(pickle) от RenPy в текст и назад")
  56.     parser.add_argument('-op', '--operation', choices = ['ren2txt', 'txt2ren'],
  57.                         required = True, help = "Куда преобразовывать")
  58.     parser.add_argument('-ren', '--renpy-file', required = True, help = "Файл persistent от RenPy")
  59.     parser.add_argument('-txt', '--editable-text', required = True, help = "Текст для ковыряния руками %%D")
  60.     parser.add_argument('-gdr', '--game-dir', required = True, help = "Каталог игры с подкаталогом RenPy")
  61.  
  62.     return parser.parse_args()
  63.  
  64. def main():
  65.     args = getargs()
  66.     gdr = args.game_dir
  67.     op  = args.operation
  68.     txt = args.editable_text
  69.     ren = args.renpy_file
  70.  
  71.     import_renpy(gdr)
  72.  
  73.     if op == 'ren2txt':
  74.         ren2txt(ren, txt)
  75.     else: # 'txt2ren'
  76.         txt2ren(txt, ren)
  77.  
  78. if __name__ == '__main__':
  79.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement