SHOW:
|
|
- or go back to the newest paste.
| 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)
|
| 23 | + | |
| 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() |