View difference between Paste ID: s69jSZJv and 1H5ADsj3
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()