[7b2836]: README Maximize Restore History

Download this file

README    236 lines (168 with data), 6.2 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
iesh - Python shell and package for exploring Infinity Engine-based data files
==============================================================================


Installation:
-------------
If you are installing from the source package, type

# python ./setup.py install

Package contents:
  iesh - simple Python interactive shell with history, tab completion, pager 
  infinity/ - python module package
  infinity/formats/*.py - modules for reading and writing specific IE file formats

  infinity/stream.py
  infinity/format.py
  infinity/core.py
  infinity/builtins.py
  
  data/ - directory for storing exported data, provided for convenience
  examples/ - some example code snippets



Running:
--------
iesh is a simple shell for execution of Python statements.
In fact, it's not that much different from ipython or even python's
built-in shell itself, it's just slightly tweaked to ease 
working with infinity package and you could easily use
the python package without it.

Key differences include:
 * readline to complete names in Python namespace
 * infinity.streams.*, infinity.formats.*, core and builtins.*
   modules or objects are imported
 * output is filtered through pager
 * commands prefixed with '!' are passed to shell
 * files prefixed with '@' are executed by iesh.
 * statements prefixed with '~' are run through python debugger
 * ?


To start iesh, just run ./iesh or python ./iesh and you
get to Cmd: prompt where you can type python statements.

Up and down arrows are used to browse command history, Ctrl-R
searches history for a command and TAB completes names of 
Python objects. See documentation for python readline module
for more information.

For some functionality it's needed to load game's RESREFs and STRREFs
- i.e. list of resources and strings in CHITIN.KEY and DIALOG.TLK
files. To load them, run load_game () function like this:

    Cmd: load_game ("/home/user/dos/bg2")

dots marking progress as the program loads CHITIN.KEY and DIALOG.TLK.

!!! This might take *extremely* long time on a slow computer and
a significant portion of memory. If it's too slow or too big, then
this proggie just is not for you :( !!! 

Once the files are loaded, you get Cmd: prompt, 
Now you can load files, inspect their contents, search them and export
objects out of them.

To considerably speed up the loading in the future, save a parsed representation
of the data objects:

    save("bg2")

And next time instead of load_game() just use:

    restore("bg2")


Common tasks:
-------------
To load and parse a file or object, use the load_object() function:

    o = load_object("data/STONEBIG.BAM")

or even:

    o = load_object("STONEBIG")
 
If the named file is not found at the given path, it's searched for in game's data, 
but that requires that game data were already loaded.
 
To print the content of the object you just loaded:

     o.printme()

Image file types can be viewed:

    o.view()

To write object back to disk:

    f = FileStream().open("data/tmp.tmp", "wb")
    o.write(f)
    f.close()

(But not all objects support that already)

To directly export an object to a file:

    export_object("STONEBIG", "data/tmp.tmp")  


Encoding support:
-----------------
To print strings from a foreign-language version of DIALOG.TLK, you have to set
encoding used by the game data and by your terminal.

For example, to print a string from the Korean version:

    core.set_option("format.tlk.encoding", "cp949")
    core.set_option("encoding", "utf8")
    o = load_object("data/dialog.tlk")
    print o.strref_list[1]['string']


Getting help:
-------------
?, help
help (object)
help (infinity)
help (infinity.builtins)
?object
...

Debugging
---------
~
format.debug_read
format.debug_write
stream.debug_coverage


Configuration:
--------------

  $HOME/.iesh_profile

game_dir 
    - directory where the game you are interested in is installed

chitin_file
dialog_file 
    - names of RESREF and STRREF index files, located in game_dir.
      Edit the names if the case does not match



The following resource formats are recognized in this version:
  2DA
  AREA V1.0
  BAM V1
  BAMC V1
  BIFF V1
  BIF V1.0
  CHUI V1
  CRE V1.2
  DLG V1.0
  IDS
  ITM V1.1
  KEY V1
  MOS V1
  MOSC V1
  PRO V1.0
  SPL V1
  STOR V1.1
  TIS V1
  TLK V1
  VVC V1.0
  WED V1.3
  WFX  V1.0
  WMAP V1.0

Type list_formats() to print list of recognized file formats.
  
Type `?' or `help' to get some online help and `q', `quit' or ^D
to exit the program.


Struc format:
-------------
Many of the *_Format classes used for processing IE files use
description of their respective file format specified as one or 
several *_desc lists. Each item in a list defines one data field, 
presumably a member of a struct originally used by IE to create
the file.

Each field is a dictionary whose items specify field's key,
offset, size, type and label, possibly more.

key - field name, used as a key in the resulting object
type - data type used to read, write and display the field
off - field offset, relative to struc's offset 0x0000
label - label printed for this field
enum - map of field values to their descriptions or IDS filename
mask - map of bit masks[FIXME: or bit nums?] to their descriptions
size - num of bytes for BYTES data type
count - count of fields of the same type and description


Other files:
  $HOME/.iesh_profile
  $HOME/.iesh_history
  $HOME/.iesh_save
  $HOME/.iesh_save-*


License, disclaimer and similar stuff:
--------------------------------------

Copyright (C) 2004 by Jaroslav Benkovsky, <edheldil@users.sf.net>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.