nwn-lib 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/BINARIES +40 -45
- data/CHANGELOG +4 -0
- data/CHEATSHEET +7 -73
- data/COPYING +1 -1
- data/DATA_STRUCTURES +50 -0
- data/README +27 -37
- data/Rakefile +7 -5
- data/SCRIPTING +44 -0
- data/SETTINGS +80 -0
- data/TYPE_VALUE_INFERRING +93 -0
- data/bin/nwn-dsl +28 -0
- data/bin/nwn-gff +192 -0
- data/bin/nwn-irb +51 -0
- data/data/gff-common-nwn1.yaml +982 -0
- data/lib/nwn/all.rb +7 -0
- data/lib/nwn/gff.rb +47 -861
- data/lib/nwn/gff/api.rb +88 -0
- data/lib/nwn/gff/cexolocstr.rb +28 -0
- data/lib/nwn/gff/field.rb +105 -0
- data/lib/nwn/gff/list.rb +2 -0
- data/lib/nwn/gff/reader.rb +220 -0
- data/lib/nwn/gff/struct.rb +34 -0
- data/lib/nwn/gff/writer.rb +201 -0
- data/lib/nwn/helpers.rb +1 -30
- data/lib/nwn/infer.rb +125 -0
- data/lib/nwn/kivinen.rb +55 -0
- data/lib/nwn/scripting.rb +129 -0
- data/lib/nwn/settings.rb +7 -0
- data/lib/nwn/twoda.rb +105 -7
- data/lib/nwn/yaml.rb +276 -5
- data/scripts/clean_locstrs.rb +46 -0
- data/scripts/extract_all_items.rb +19 -0
- data/scripts/fix_facings.rb +22 -0
- data/scripts/truncate_floats.rb +18 -0
- data/tools/migrate_03x_to_04x.sh +17 -0
- data/tools/verify.sh +35 -0
- metadata +36 -8
- data/bin/nwn-gff-import +0 -69
- data/bin/nwn-gff-irb +0 -62
- data/bin/nwn-gff-print +0 -133
data/BINARIES
CHANGED
@@ -1,45 +1,40 @@
|
|
1
|
-
== nwn-gff
|
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
|
-
== nwn-gff-irb
|
42
|
-
|
43
|
-
Usage: nwn-gff-irb file
|
44
|
-
|
45
|
-
nwn-gff-irb allows interactive editing of gff files. There are some examples on the CHEATSHEET.
|
1
|
+
== nwn-gff
|
2
|
+
|
3
|
+
A generic converter that can be used for converting gff files to and fro from various
|
4
|
+
file formats and presentations, and transform them with custom script filters.
|
5
|
+
|
6
|
+
Type
|
7
|
+
nwn-gff -h
|
8
|
+
for help, it should be self-explanatory.
|
9
|
+
|
10
|
+
There are some usage examples on the CHEATSHEET.
|
11
|
+
|
12
|
+
== nwn-irb
|
13
|
+
|
14
|
+
nwn-irb is a interactive shell preloading all relevant libs, and optionally
|
15
|
+
loading a gff file.
|
16
|
+
|
17
|
+
There are some usage examples on the CHEATSHEET.
|
18
|
+
|
19
|
+
== nwn-dsl
|
20
|
+
|
21
|
+
A standalone script interpreter. See the example scripts in the gem distribution
|
22
|
+
under scripts/.
|
23
|
+
|
24
|
+
== Things under tools/
|
25
|
+
|
26
|
+
These are not added to PATH, you'll have to specify their path explicitly; you can
|
27
|
+
find them in your gem repository (/usr/lib/ruby/1.8/gems/ or similar).
|
28
|
+
|
29
|
+
=== migrate_03x_to_04x.sh
|
30
|
+
|
31
|
+
This can be used to migrate old YAML dumps made with version 0.3.x to the new,
|
32
|
+
compacter format of 0.4.x.
|
33
|
+
|
34
|
+
Usage is simple: just pass all old .yml files to the script, it will convert them
|
35
|
+
in-place (read: make a backup!).
|
36
|
+
|
37
|
+
This uses nwn-gff-convert and nwn-gff, so all environment variables are taken into
|
38
|
+
consideration. You will want to point NWN_LIB_INFER_DATA_FILE to something useful.
|
39
|
+
|
40
|
+
Backup and testing is ADVISED!
|
data/CHANGELOG
CHANGED
@@ -105,3 +105,7 @@ Bernhard Stoeckner <elven@swordcoast.net> (5):
|
|
105
105
|
|
106
106
|
Stuart Coyle <stuart.coyle@gmail.com> (1):
|
107
107
|
TwoDA: use four spaces for field separation instead of tabs, indent columns
|
108
|
+
|
109
|
+
==== 0.4.0
|
110
|
+
Bernhard Stoeckner <elven@swordcoast.net>:
|
111
|
+
too many to sanely list, see README for migration information
|
data/CHEATSHEET
CHANGED
@@ -1,75 +1,9 @@
|
|
1
|
-
====
|
1
|
+
==== Convert all item files in the current directory to yaml and back
|
2
2
|
|
3
|
-
|
3
|
+
for x in *.uti; do
|
4
|
+
nwn-gff-convert -i"$x" -o"$x.yml" -lg -ky
|
5
|
+
done
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
==== Convert all yaml item files back to their gff counterpart
|
10
|
-
|
11
|
-
nwn-gff-import -y --postfix .yml *.uti.yml
|
12
|
-
|
13
|
-
==== Makefile rules for building resources from yml files
|
14
|
-
|
15
|
-
postfix := uti
|
16
|
-
|
17
|
-
objects := $(basename $(wildcard *.$(postfix).yml))
|
18
|
-
|
19
|
-
all: $(objects)
|
20
|
-
|
21
|
-
$(objects) : %.$(postfix) : %.$(postfix).yml
|
22
|
-
nwn-gff-import -y -o $@ $<
|
23
|
-
|
24
|
-
clean:
|
25
|
-
-@rm $(objects)
|
26
|
-
|
27
|
-
This ruleset will automatically rebuild changed ymls to their respective .uti counterparts.
|
28
|
-
This only serves as an example on how to do it; it does not constitute a complete build environment.
|
29
|
-
|
30
|
-
==== Quick-edit a item
|
31
|
-
|
32
|
-
your/prompt$ nwn-gff-irb my_item.uti
|
33
|
-
Your GFF file is in `GFF' (type: "UTI ").
|
34
|
-
Type `save' to save to the filename it came from (make a backup!), `exit' (or Ctrl+D) to exit (without saving).
|
35
|
-
To save to a different location, type `save "path/to/new/location.ext"'.
|
36
|
-
|
37
|
-
irb(main):001:0> GFF.root_struct.keys
|
38
|
-
=> ["ModelPart2", "Cursed", "ModelPart3", "Cost", "StackSize", "Charges", "Comment", "PaletteID", "BaseItem", "Tag", "DescIdentified", "Identified", "Plot", "TemplateResRef", "PropertiesList", "AddCost", "Stolen", "Description", "LocalizedName", "ModelPart1"]
|
39
|
-
|
40
|
-
irb(main):002:0> GFF['LocalizedName/4']
|
41
|
-
=> "Mundane Feuerpfeile (aus Eibe)"
|
42
|
-
|
43
|
-
irb(main):003:0> GFF['LocalizedName/4'] = 'New Name'
|
44
|
-
=> "New Name"
|
45
|
-
|
46
|
-
irb(main):004:0> GFF['LocalizedName']
|
47
|
-
=> #<NWN::Gff::Element:0xb790641c @type=:cexolocstr, @value=[#<struct NWN::Gff::CExoLocString language=4, text="New Name">, #<struct NWN::Gff::CExoLocString language=0, text="Pfeil">], @_str_ref=1517, @label="LocalizedName">
|
48
|
-
|
49
|
-
irb(main):005:0> save
|
50
|
-
Saving to `/home/elven/code/nwn/nwn-lib.git/my_item.uti' ..
|
51
|
-
saved.
|
52
|
-
=> nil
|
53
|
-
|
54
|
-
irb(main):006:0> exit
|
55
|
-
|
56
|
-
==== Add a item property, the semi-human way
|
57
|
-
|
58
|
-
irb(main):001:0> Helpers.item_property('Cast_Spell')
|
59
|
-
ArgumentError: Property Cast_Spell needs subtype of type IPRP_SPELLS, but none given.
|
60
|
-
from /var/lib/gems/1.8/gems/nwn-lib-0.2.3/lib/nwn/helpers.rb:108:in `item_property'
|
61
|
-
from (irb):1
|
62
|
-
|
63
|
-
irb(main):002:0> Helpers.item_property('Cast_Spell', 'Invisib')
|
64
|
-
ArgumentError: Cannot resolve invisib. Partial matches: ["Improved_Invisibility", "Invisibility", "Invisibility_Purge", "Invisibility_Sphere", "See_Invisibility"].
|
65
|
-
from /var/lib/gems/1.8/gems/nwn-lib-0.2.3/lib/nwn/helpers.rb:79:in `resolve_or_match_partial'
|
66
|
-
from /var/lib/gems/1.8/gems/nwn-lib-0.2.3/lib/nwn/helpers.rb:116:in `item_property'
|
67
|
-
from (irb):2
|
68
|
-
|
69
|
-
irb(main):003:0> Helpers.item_property('Cast_Spell', 'Invisibility')
|
70
|
-
ArgumentError: Property Cast_Spell requires a cost value of type IPRP_CHARGECOST, but none given
|
71
|
-
from /var/lib/gems/1.8/gems/nwn-lib-0.2.3/lib/nwn/helpers.rb:122:in `item_property'
|
72
|
-
from (irb):3
|
73
|
-
|
74
|
-
irb(main):004:0> Helpers.item_property('Cast_Spell', 'Invisibility', 'Unlimi')
|
75
|
-
=> {"PropertyName"=>#<NWN::Gff::Element:0xb75f4e68 ..
|
7
|
+
for x in *.uti.yml; do
|
8
|
+
nwn-gff-convert -i"$x" -o"$(basename $x .yml)" -ly -kg
|
9
|
+
done
|
data/COPYING
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (C) 2008 Bernhard Stoeckner <elven@swordcoast.net>
|
1
|
+
Copyright (C) 2008 Bernhard Stoeckner <elven@swordcoast.net> and contributors
|
2
2
|
|
3
3
|
This program is free software; you can redistribute it and/or modify
|
4
4
|
it under the terms of the GNU General Public License as published by
|
data/DATA_STRUCTURES
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
== Internal data representation
|
2
|
+
|
3
|
+
All data is representend internally as simple hashes or arrays. On load,
|
4
|
+
each structure will be extended by a representing module containing
|
5
|
+
the API and some application logic.
|
6
|
+
|
7
|
+
* Structs are normal hashes extended by NWN::Gff::Struct
|
8
|
+
* Lists are arrays extended by NWN::Gff::List
|
9
|
+
* Fields are normal hashes extended by NWN::Gff::Field
|
10
|
+
* CExoLocStrings are normal hashes extended by NWN::Gff::CExoLocString
|
11
|
+
|
12
|
+
|
13
|
+
=== Struct
|
14
|
+
|
15
|
+
Example:
|
16
|
+
"/AddCost" => {"value" => 5, "label" => "AddCost", "type" => :dword}
|
17
|
+
|
18
|
+
Also, a NWN::Gff::Struct also has these accessors:
|
19
|
+
|
20
|
+
* data_type: A string describing the data type of this struct. (see Data Type)
|
21
|
+
* data_version: A string describing the version (usually "V3.2")
|
22
|
+
* struct_id: the struct Id of this struct.
|
23
|
+
* element: The NWN::Gff::Field which this struct contains. This is nil
|
24
|
+
for root structs.
|
25
|
+
|
26
|
+
|
27
|
+
=== Field
|
28
|
+
|
29
|
+
Each field is a hash containing two keys:
|
30
|
+
"value": The data contained in this field, depending on
|
31
|
+
"type": The data type. For known data types, see NWN::Gff::Gff.
|
32
|
+
|
33
|
+
Additionally, "label" is a key set by the Readers saying its' label name.
|
34
|
+
This key, however, will not be written out to YAML (since it would be
|
35
|
+
redundant).
|
36
|
+
|
37
|
+
Also, each field has a .parent, which is a simple accessor set by
|
38
|
+
the various readers pointing to the struct it is member of.
|
39
|
+
|
40
|
+
|
41
|
+
=== Data Type
|
42
|
+
|
43
|
+
Each Struct has a data_type, which describes the type of data the struct contains.
|
44
|
+
For top-level structs, this equals the data type written to the GFF file ("UTI",
|
45
|
+
for example); for sub structures, this is usually the top-level data type + the
|
46
|
+
field label ("UTI/PropertiesList", for example). This is used by various loaders/writers
|
47
|
+
to infer field types and default values.
|
48
|
+
|
49
|
+
This also means that inventory items in /ItemList/ structs have a type of "UTI" and
|
50
|
+
thus could be exported to item files, or re-attached somewhere else with minimum scripting.
|
data/README
CHANGED
@@ -4,55 +4,45 @@ This package provides a library for reading, changing, and writing common file f
|
|
4
4
|
|
5
5
|
They should work with NWN2 just as well, since the file format specifications did not change.
|
6
6
|
|
7
|
-
|
8
|
-
* some binaries under bin/ (see BINARIES)
|
9
|
-
* the actual library under lib/nwn
|
7
|
+
=== Upgrade from 0.3.6 to 0.4.x
|
10
8
|
|
11
|
-
|
9
|
+
With the release of 0.4.0, the API changed significantly. Previous yaml dumps made with 0.3.x are INCOMPATIBLE, and so are all scripts.
|
10
|
+
I can't help you with your API bindings, but for your YAML dumps, a converter script has been provided (see BINARIES).
|
12
11
|
|
13
|
-
|
14
|
-
This will be worked around in a future release until the release of ruby 1.9, which will provide native charset support.
|
15
|
-
|
16
|
-
== Quickstart
|
12
|
+
=== A word on version numbers
|
17
13
|
|
18
|
-
|
14
|
+
Please consider all version releases below 1.0.0 to be unstable, even though the code is fully functional - further API changes may not be avoidable between major revisions - such as is the case with 0.3 -> 0.4.
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
require 'rubygems'
|
23
|
-
require 'nwn/gff'
|
16
|
+
=== Features of nwn-lib
|
24
17
|
|
25
|
-
|
26
|
-
|
18
|
+
* a feature-complete parser and generator of valid GFF V3.2 data
|
19
|
+
* shell scripts and tools to simplify your life (see BINARIES)
|
20
|
+
* kivinen-style ("gffprint.pl") presentation of data
|
21
|
+
* yaml presentation of data
|
22
|
+
* ruby-native marshalling of gff data
|
23
|
+
* extensive developer API
|
24
|
+
* a powerful get-out-of-my-way scripting system for data transformation (see SCRIPTING)
|
25
|
+
* guessing of field-types and -values for shorter plaintext data dumps (see TYPE_AND_VALUE_INFERRING)
|
27
26
|
|
28
|
-
|
29
|
-
o['/Tag'] = 'testtag'
|
27
|
+
Also in the box:
|
30
28
|
|
31
|
-
|
32
|
-
|
29
|
+
* a CHEATSHEET showing off some cool tricks
|
30
|
+
* some gadgetry for working with 2da files
|
33
31
|
|
34
|
-
|
32
|
+
=== Attention Unicode/UTF-users
|
35
33
|
|
36
|
-
|
37
|
-
|
38
|
-
== GFF data structures: Quick Intro
|
34
|
+
ruby 1.8 does not support character sets natively, and as such nwn-gff-irb will <b>FAIL</b> to encode non-standard characters properly on non-latin1 shells.
|
35
|
+
This will be worked around in a future release until the release of ruby 1.9, which will provide native charset support.
|
39
36
|
|
40
|
-
|
37
|
+
=== Quickstart
|
41
38
|
|
42
|
-
|
39
|
+
To use it, simply install the gem (available on rubyforge):
|
43
40
|
|
44
|
-
|
45
|
-
A Label is a string of up to 16 bytes, and occurs as keys in Structs.
|
41
|
+
gem1.8 install nwn-lib
|
46
42
|
|
47
|
-
|
48
|
-
A struct is a hash. It is a unordered collection of key => value pairs.
|
49
|
-
Keys are Labels, values are either:
|
50
|
-
* Structs
|
51
|
-
* Lists
|
52
|
-
* Elements
|
43
|
+
And do the following in a script of your own devising:
|
53
44
|
|
54
|
-
|
55
|
-
|
45
|
+
require 'rubygems'
|
46
|
+
require 'nwn/all'
|
56
47
|
|
57
|
-
|
58
|
-
A Element is a distinct value of a given type. For all possible types, see the +Types+ hash in the NWN::Gff module.
|
48
|
+
For nwn-lib scripts, see SCRIPTING.
|
data/Rakefile
CHANGED
@@ -9,16 +9,18 @@ include FileUtils
|
|
9
9
|
# Configuration
|
10
10
|
##############################################################################
|
11
11
|
NAME = "nwn-lib"
|
12
|
-
VERS = "0.
|
12
|
+
VERS = "0.4.0"
|
13
13
|
CLEAN.include ["**/.*.sw?", "pkg", ".config", "rdoc", "coverage"]
|
14
14
|
RDOC_OPTS = ["--quiet", "--line-numbers", "--inline-source", '--title', \
|
15
15
|
'nwn-lib: a ruby library for accessing NWN resource files', \
|
16
16
|
'--main', 'README']
|
17
17
|
|
18
|
+
DOCS = ["README", "BINARIES", "DATA_STRUCTURES", "SCRIPTING", "SETTINGS", "TYPE_VALUE_INFERRING", "CHEATSHEET", "CHANGELOG", "COPYING"]
|
19
|
+
|
18
20
|
Rake::RDocTask.new do |rdoc|
|
19
21
|
rdoc.rdoc_dir = "rdoc"
|
20
22
|
rdoc.options += RDOC_OPTS
|
21
|
-
rdoc.rdoc_files.add
|
23
|
+
rdoc.rdoc_files.add DOCS + ["doc/*.rdoc", "lib/**/*.rb"]
|
22
24
|
end
|
23
25
|
|
24
26
|
desc "Packages up nwn-lib"
|
@@ -30,16 +32,16 @@ spec = Gem::Specification.new do |s|
|
|
30
32
|
s.version = VERS
|
31
33
|
s.platform = Gem::Platform::RUBY
|
32
34
|
s.has_rdoc = true
|
33
|
-
s.extra_rdoc_files =
|
35
|
+
s.extra_rdoc_files = DOCS + Dir["doc/*.rdoc"]
|
34
36
|
s.rdoc_options += RDOC_OPTS + ["--exclude", "^(examples|extras)\/"]
|
35
37
|
s.summary = "a ruby library for accessing Neverwinter Nights resource files"
|
36
38
|
s.description = s.summary
|
37
39
|
s.author = "Bernhard Stoeckner"
|
38
40
|
s.email = "elven@swordcoast.net"
|
39
41
|
s.homepage = "http://nwn-lib.elv.es"
|
40
|
-
s.executables = ["nwn-gff
|
42
|
+
s.executables = ["nwn-gff", "nwn-dsl", "nwn-irb"]
|
41
43
|
s.required_ruby_version = ">= 1.8.4"
|
42
|
-
s.files = %w(COPYING CHANGELOG README Rakefile) + Dir.glob("{bin,doc,spec,lib}/**/*")
|
44
|
+
s.files = %w(COPYING CHANGELOG README Rakefile) + Dir.glob("{bin,doc,spec,lib,tools,scripts,data}/**/*")
|
43
45
|
s.require_path = "lib"
|
44
46
|
s.bindir = "bin"
|
45
47
|
end
|
data/SCRIPTING
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
To help you manage your NWN data more efficiently, nwn-lib supports
|
2
|
+
user-written, small (or large) scripts that follow the unix principle
|
3
|
+
of piping.
|
4
|
+
|
5
|
+
=== Filter Scripts
|
6
|
+
|
7
|
+
Filter Scripts act as an argument to nwn-gff, and will be invoked
|
8
|
+
as a pass-through for data filtering and transformation.
|
9
|
+
Filters always depend on self being a Gff element.
|
10
|
+
|
11
|
+
An example of a filter script would be a snippet, that truncates
|
12
|
+
all floating points to a fixed size before outputting them to yaml.
|
13
|
+
|
14
|
+
Filter scripts are usually not executable by themself.
|
15
|
+
|
16
|
+
=== Standalone Scripts
|
17
|
+
|
18
|
+
Standalone scripts are shell scripts invokable from command line,
|
19
|
+
and do not operate on specific files; instead, they get invoked
|
20
|
+
with their own (optional) parameters and act independently of
|
21
|
+
data sources.
|
22
|
+
|
23
|
+
An example for a standalone script would be a script, that asks
|
24
|
+
the user for a name and then generates a random item from that.
|
25
|
+
|
26
|
+
You can create standalone scripts by prefixing them with the proper
|
27
|
+
shebang:
|
28
|
+
|
29
|
+
#!/usr/bin/env nwn-dsl
|
30
|
+
|
31
|
+
If you are on systems which do not support executable scripts this
|
32
|
+
way, simply call them with nwn-dsl.
|
33
|
+
|
34
|
+
DSL stands for domain-specific-language by the way, and this is quite
|
35
|
+
a stretch, considering your scripts will be written in plain old ruby.
|
36
|
+
|
37
|
+
=== API
|
38
|
+
|
39
|
+
There are various helpers available to scripts. See NWN::Gff::Scripting
|
40
|
+
for a list of helper methods; additionally you can use all other API
|
41
|
+
functions, of course.
|
42
|
+
|
43
|
+
There are some examples packaged together with nwn-lib, check the scripts/
|
44
|
+
directory with the distribution.
|
data/SETTINGS
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
There are various environment variables you can configure to adjust various parts of nwn-lib.
|
2
|
+
|
3
|
+
<b>All of them are optional!</b>
|
4
|
+
|
5
|
+
Under linux, just add them to your shell environment (usually .bashrc), like so:
|
6
|
+
|
7
|
+
export NWN_LIB_INFER_DATA_FILE=/usr/lib/ruby/gems/1.8/gems/nwn-lib-0.4.0/data/gff-common-nwn1.yaml
|
8
|
+
|
9
|
+
|
10
|
+
== NWN_LIB_INFER_DATA_FILE
|
11
|
+
|
12
|
+
The path to the type/value inferring data file. See TYPE_VALUE_INFERRING for a definition.
|
13
|
+
|
14
|
+
Please be advised that inferring support for YAML is <b>EXPERIMENTAL</b> and may result in
|
15
|
+
<b>module and gff file corruption</b>.
|
16
|
+
|
17
|
+
== NWN_LIB_DONT_COMPACT_FIELDS
|
18
|
+
|
19
|
+
Set to non-nil ("1" will do) to prevent nwn-lib from compacting scalar fields into a more-readable
|
20
|
+
(but still fully parseable) format, if type inferring data is available.
|
21
|
+
|
22
|
+
=== Without compacting
|
23
|
+
ItemList:
|
24
|
+
value:
|
25
|
+
- !nwn-lib.elv.es,2008-12/struct
|
26
|
+
__data_type: UTC/ItemList
|
27
|
+
__struct_id: 0
|
28
|
+
InventoryRes: {value: herb053}
|
29
|
+
PaletteID: {value: 6}
|
30
|
+
SkillList: [{value: 0}, {value: 0}, {value: 0}, {value: 0}, ...
|
31
|
+
|
32
|
+
=== With compacting
|
33
|
+
ItemList:
|
34
|
+
- !nwn-lib.elv.es,2008-12/struct
|
35
|
+
__data_type: UTC/ItemList
|
36
|
+
InventoryRes: herb053
|
37
|
+
PaletteID: 6
|
38
|
+
SkillList: [0, 0, 0, 0, 0, 0, 2, 0, 0, 0 ...
|
39
|
+
|
40
|
+
|
41
|
+
== NWN_LIB_DONT_COMPACT_LIST_STRUCTS
|
42
|
+
|
43
|
+
Setting this to non-nil ("1" will do) will prevent nwn-lib from compacting lists that contain
|
44
|
+
structs, if type inferring data is available.
|
45
|
+
|
46
|
+
=== Without compacting
|
47
|
+
SkillList:
|
48
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
49
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
50
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
51
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
52
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
53
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
54
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 2}
|
55
|
+
- !nwn-lib.elv.es,2008-12/struct {__data_type: UTC/SkillList, Rank: 0}
|
56
|
+
...
|
57
|
+
|
58
|
+
=== With compacting
|
59
|
+
SkillList: [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, ...
|
60
|
+
|
61
|
+
|
62
|
+
== NWN_LIB_CLEAR_KNOWN_VALUES
|
63
|
+
|
64
|
+
Set to non-nil ("1" will do) to make nwn-lib omit fields that resolve to default values
|
65
|
+
as configured in $NWN_LIB_INFER_DATA_FILE.
|
66
|
+
|
67
|
+
The default is to not omit known-value data fields.
|
68
|
+
|
69
|
+
== NWN_LIB_FILTER_EMPTY_EXOLOCSTR
|
70
|
+
|
71
|
+
Set to non-nil ("1" will do) to make nwn-lib filter out empty exolocstr fields from
|
72
|
+
input files on reading.
|
73
|
+
|
74
|
+
The default is to keep them as-is.
|
75
|
+
|
76
|
+
== NWN_LIB_2DA_LOCATION
|
77
|
+
|
78
|
+
Set to a path containing all 2da files to initialize the 2da cache. This is needed for
|
79
|
+
most interactive helpers and a few type infer gizmos.
|
80
|
+
|