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() |