-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefaultSchemas.yml
1562 lines (1473 loc) · 43.8 KB
/
defaultSchemas.yml
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# This file contains all of YAML2DA's default schemas.
# These schemas can be overridden by redefining them
# in your project folder.
#
# Note that 2DA imports do not search the project folder for
# schema files: You will need to specify a path to them yourself!
#
# Schemas not provided by your custom schema file(s) will instead
# use the defaults provided by this file.
# This field is technically not needed for `defaultSchemas`,
# but never mind! It specifies that the file is a schema or schema list.
yamlType: schema
# List of schema definition. These will be loaded in sequential order.
# No validation exists to prevent a schema from being overridden
# from within the same file! You have been warned.
#
# In addition to this list, if you provide a `typeName` property,
# YAML2DA will try to interpret the whole file as another
# schema object.
schemas:
# This is the `yamlType` value corresponding to this schema.
# All files with a `yamlType` equal to this `typeName` will
# be loaded using this schema, and written to `${typeName}.2da`.
# Reserved keywords:
# - schema (ignored)
# - unknown (ignored)
# - load (ignored, with a warning)
- typeName: accessories
# If the 2DA columns with these label are all blank (****) for a row,
# that row is interpreted as padding and will not generate a YAML file on import.
# If this field is absent, YAML2DA will be unable to recognize padding,
# and will indiscriminately import all rows in the 2DA unless they're completely blank.
criticalColumns:
- label
- SEFResRef
# As `criticalColumns`, but only covers one column.
# There's not really any good reason (besides API docs!)
# to include both `criticalColumns` and `criticalColumn`
# in a single schema.
criticalColumn: SEFResRef
# Optional field specifying a field to be included
# in the filename of any YMLs imported from this 2DA.
# If present, filenames will take the format `${row[labelField]}_${row.id}.yml`.
# If absent, imported files will instead be called `${row.id}.yml`.
# Note that some characters that might be legal in a 2DA
# are not legal in a Windows filename, and will be omitted!
labelField: label
# Maps 2DA column labels to YAML2DA field names ("aliases").
columns:
# Can be either a simple `2DALabel: YAMLAlias` mapping...
label: label
SEFResRef: SEFResRef
Duration: duration
Category: category
# Or it can be an object with some additional metadata:
UseStrRef:
# If this field exists and is truthy,
# a 2DA missing this column will still be accepted
# as matching this schema's specifications.
optional: true
# The alias to use for this column in YAML2DA files.
alias: useStrRef
# Schema disabled for now.
# - typeName: accessories_cat
# criticalColumn: type
# labelField: type
# columns:
# type: type
# Schema disabled for now.
# - typeName: actions
# criticalColumn: STRING_REF
# labelField: label
# columns:
# LABEL: label
# STRING_REF: strRef
# ICONRESREF: iconResRef
# TIMER: timer
- typeName: ambientMusic
criticalColumns:
- Description # Row 0, "(No Music Track)", is *not* padding, so we need a second column!
- Resource
labelField: label
columns:
Description: description
Resource: resource
Stinger1: stinger1
Stinger2: stinger2
Stinger3: stinger3
Label: label
- typeName: ambientSound
criticalColumns:
- Description
- Resource
labelField: displayName
columns:
Description: description
Resource: resource
PresetInstance0: presetInstance0
PresetInstance1: presetInstance1
PresetInstance2: presetInstance2
PresetInstance3: presetInstance3
PresetInstance4: presetInstance4
PresetInstance5: presetInstance5
PresetInstance6: presetInstance6
PresetInstance7: presetInstance7
DisplayName: displayName
- typeName: ammunitionTypes
criticalColumns:
- Model
- ProjSEF
labelField: label
columns:
label: label
Model: model
ShotSound: shotSound
ImpactSound: impactSound
ProjSEF: projSEF
RotationSpd: rotationSpd
- typeName: appearance
criticalColumns:
- NWN2_Model_Body
- NWN2_Model_Helm
- NWN2_Model_Head
- NWN2_Model_Hair
- NWN2_Head_Skeleton
- NWN2_Skeleton_File
labelField: label
columns:
LABEL: label
STRING_REF: strRef
BodyType: bodyType
Segments: segments
NWN2_Scale_X: scaleX
NWN2_Scale_Y: scaleY
NWN2_Scale_Z: scaleZ
NWN2_Model_Body: modelBody
NWN2_Model_Helm: modelHelm
NWN2_Model_Head: modelHead
NWN2_Model_Hair: modelHair
NWN2_Head_Skeleton: headSkeleton
NWN2_Skeleton_File: skeletonFile
NWN2_AccessorySize: accessorySize
NWN2_AccessoryType: accessoryType
ToolsetUseStubModel: toolsetUseStubModel
Mount: mount
NAME: name
RACE: race
ENVMAP: envMap
NWN2_BLOODTYPE: bloodType
MODELTYPE: modelType
WEAPONVISUALSCALE: weaponVisualScale
WEAPONATTACKDISTANCESCALE: weaponAttackDistanceScale
WING_TAIL_SCALE: wingTailScale
HELMET_SCALE_M: helmetScaleM
HELMET_SCALE_F: helmetScaleF
MOVERATE: moveRate
WALKDIST: walkDist
RUNDIST: runDist
PERSPACE: perSpace
CREPERSPACE: creperSpace
HEIGHT: height
HITDIST: hitDist
PREFATCKDIST: prefAtckDist
TARGETHEIGHT: targetHeight
ABORTONPARRY: abortOnParry
RACIALTYPE: racialType
HASLEGS: hasLegs
HASARMS: hasArms
PORTRAIT: portrait
SIZECATEGORY: sizeCategory
PERCEPTIONDIST: perceptionDist
FOOTSTEPTYPE: footstepType
SOUNDAPPTYPE: soundAppType
HEADTRACK: headTrack
HEAD_ARC_H: headArcH
HEAD_ARC_V: headArcV
HEAD_NAME: headName
BODY_BAG: bodyBag
TARGETABLE: targetable
SELECTION_CAPSULE: selectionCapsule
SELECTION_SIZE: selectionSize
SEF: SEF
BASENATAC:
optional: true
alias: baseNatAC
BASENATDAM:
optional: true
alias: baseNatDam
- typeName: appearancesndset
criticalColumn: Label
labelField: label
columns:
Label: label
ArmorType: armorType
WeapTypeL: weapTypeL
WeapTypeR: weapTypeR
WeapTypeS: weapTypeS
WeapTypeClsLw: weapTypeClsLw
WeapTypeClsH: weapTypeClsH
WeapTypeRch: weapTypeRch
MissIndex: missIndex
Looping: looping
FallFwd: fallFwd
FallBck: fallBck
- typeName: areaeffects
criticalColumn: SHAPE
labelField: label
columns:
LABEL: label
ID: tableId # Why does this field even exist? I mean, really.
SHAPE: shape
RADIUS: radius
WIDTH: width
LENGTH: length
ONENTER: onEnter
HEARTBEAT: heartbeat
ONEXIT: onExit
- typeName: armor
criticalColumn: BASEITEMSTATREF
labelField: label
columns:
ACBONUS: acBonus
DEXBONUS: dexBonus
ACCHECK: armorCheckPenalty
ARCANEFAILURE%: arcaneSpellFailure
WEIGHT: weight
COST: cost
DESCRIPTIONS: descriptions
BASEITEMSTATREF: baseItemStatRef
Label: label
Name: name
ToolsetName: toolsetName
Prefix: prefix
Parent: parent
- typeName: armorrulestats
criticalColumn: BASEITEMSTATREF
labelField: label
columns:
Label: label
ACBONUS: acBonus
MAXDEXBONUS: maxDexBonus
ACHECK: armorCheckPenalty
ARCANEFAILURE%: arcaneSpellFailure
WEIGHT: weight
COST: cost
DESCRIPTIONS: descriptions
Name: name
BASEITEMSTATREF: baseItemStatRef
# Schema disabled for now.
# - typeName: armorvisualdata
# criticalColumn: Prefix
# columns:
# Label: label
# ToolsetName: toolsetName
# Prefix: prefix
# Parent: parent
- typeName: backgrounds
labelField: label
columns:
Label: label
Name: name
Description: description
Icon: icon
MINATTACKBONUS: minAttackBonus
MINSTR: minStr
MINDEX: minDex
MININT: minInt
MINWIS: minWis
MINCON: minCon
MINCHA: minCha
MAXSTR: maxStr
MAXDEX: maxDex
MAXINT: maxInt
MAXWIS: maxWis
MAXCON: maxCon
MAXCHA: maxCha
Gender: gender
OrReqClass0: orReqClass0
OrReqClass1: orReqClass1
OrReqClass2: orReqClass2
FeatGainedName: featGainedName
FeatGained: featGained
MasterFeatGainedName: masterFeatGainedName
MasterFeatGained: masterFeatGained
DisplayFeat: displayFeat
REMOVED: removed
- typeName: baseitems
criticalColumn: Name
labelField: label
columns:
Name: name
label: label
InvSlotWidth: invSlotWidth
InvSlotHeight: invSlotHeight
EquipableSlots: equipableSlots
CanRotateIcon: canRotateIcon
ModelType: modelType
NWN2_Anim: animation
ItemClass: itemClass
GenderSpecific: genderSpecific
Part1EnvMap: part1EnvMap
Part2EnvMap: part2EnvMap
Part3EnvMap: part3EnvMap
DefaultModel: defaultModel
NWN2_DefaultIcon: nwn2DefaultIcon
DefaultIcon: defaultIcon
Container: container
WeaponWield: weaponWield
WeaponType: weaponType
WeaponSize: weaponSize
RangedWeapon: rangedWeapon
PrefAttackDist: prefAttackDist
MinRange: minRange
MaxRange: maxRange
NumDice: numDice
DieToRoll: dieToRoll
CritThreat: critThreat
CritHitMult: critHitMult
Category: category
BaseCost: baseCost
Stacking: stacking
ItemMultiplier: itemMultiplier
Description: description
InvSoundType: invSoundType
MaxProps: maxProps
MinProps: minProps
PropColumn: propColumn
StorePanel: storePanel
ReqFeat0: reqFeat0
ReqFeat1: reqFeat1
ReqFeat2: reqFeat2
ReqFeat3: reqFeat3
ReqFeat4: reqFeat4
ReqFeat5: reqFeat5
AC_Enchant: acEnchant
BaseAC: baseAC
ArmorCheckPen: armorCheckPenalty
BaseItemStatRef: baseItemStatRef
ChargesStarting: chargesStarting
RotateOnGround: rotateOnGround
TenthLBS: tenthLbs
WeaponMatType: weaponMatType
AmmunitionType: ammunitionType
QBBehaviour: qbBehavior
ArcaneSpellFailure: arcaneSpellFailure
"%AnimSlashL": animSlash%L
"%AnimSlashR": animSlash%R
"%AnimSlashS": animSlash%S
StorePanelSort: storePanelSort
ILRStackSize: ilrStackSize
FEATImprCrit: featImprCrit
FEATWpnFocus: featWpnFocus
FEATWpnSpec: featWpnSpec
FEATEpicDevCrit: featEpicDevCrit
FEATEpicWpnFocus: featEpicWpnFocus
FEATEpicWpnSpec: featEpicWpnSpec
FEATOverWhCrit: featOverWhCrit
FEATWpnOfChoice: featWpnOfChoice
FEATGrtrWpnFocus: featGrtrWpnFocus
FEATGrtrWpnSpec: featGrtrWpnSpec
FEATPowerCrit: featPowerCrit
GMaterialType: gMaterialType
BaseItemSortOrder: baseItemSortOrder
# Schema disabled for now.
# - typeName: bodybag
# criticalColumn: Name
# labelField: label
# columns:
# LABEL: label
# Name: name
# Appearance: appearance
# Schema disabled for now.
# - typeName: capart
# labelField: name
# columns:
# NAME: name
# MDLNAME: mdlName
# NODENAME: nodeName
# NOTE: This 2DA appears to be 1-indexed for some reason. Approach with caution.
# Schema disabled for now.
# - typeName: categories
# labelField: category
# columns:
# Category: category
# Schema disabled for now.
# - typeName: catype
# labelField: name
# columns:
# NAME: name
# TYPE: type
# Schema disabled for now.
# - typeName: chargenClothes
# columns:
# ItemResRef: itemResRef
- typeName: classes
criticalColumn: Name
labelField: label
columns:
Label: label
Name: name
Plural: plural
Lower: lower
Description: description
Icon: icon
BorderedIcon: borderedIcon
HitDie: hitDie
AttackBonusTable: attackBonusTable
FeatsTable: featsTable
SavingThrowTable: savingThrowTable
SkillsTable: skillsTable
BonusFeatsTable: bonusFeatsTable
SkillPointBase: skillPointBase
SpellGainTable: spellGainTable
SpellKnownTable: spellKnownTable
PlayerClass: playerClass
SpellCaster: spellCaster
MetaMagicAllowed: metaMagicAllowed
MemorizesSpells: memorizesSpells
HasArcane: hasArcane
HasDivine: hasDivine
HasSpontaneousSpells: hasSpontaneousSpells
SpontaneousConversionTable: spontaneousConversionTable
SpellSwapMinLvl: spellSwapMinLvl
SpellSwapLvlInterval: spellSwapLvlInterval
SpellSwapLvlDiff: spellSwapLvlDiff
AllSpellsKnown: allSpellsKnown
HasInfiniteSpells: hasInfiniteSpells
HasDomains: hasDomains
HasSchool: hasSchool
HasFamiliar: hasFamiliar
HasAnimalCompanion: hasAnimalCompanion
Str: strength
Dex: dexterity
Con: constitution
Wis: wisdom
Int: intelligence
Cha: charisma
PrimaryAbil: primaryAbil
SpellAbil: spellAbil
AlignRestrict: alignRestrict
AlignRstrctType: alignRestrictType
InvertRestrict: invertRestrict
Constant: constant
EffCRLvl01: effCRLvl01
EffCRLvl02: effCRLvl02
EffCRLvl03: effCRLvl03
EffCRLvl04: effCRLvl04
EffCRLvl05: effCRLvl05
EffCRLvl06: effCRLvl06
EffCRLvl07: effCRLvl07
EffCRLvl08: effCRLvl08
EffCRLvl09: effCRLvl09
EffCRLvl10: effCRLvl10
EffCRLvl11: effCRLvl11
EffCRLvl12: effCRLvl12
EffCRLvl13: effCRLvl13
EffCRLvl14: effCRLvl14
EffCRLvl15: effCRLvl15
EffCRLvl16: effCRLvl16
EffCRLvl17: effCRLvl17
EffCRLvl18: effCRLvl18
EffCRLvl19: effCRLvl19
EffCRLvl20: effCRLvl20
PreReqTable: preReqTable
MaxLevel: maxLevel
XPPenalty: xpPenalty
BonusSpellcasterLevelTable: bonusSpellcasterLevelTable
BonusCasterFeatByClassMap: bonusCasterFeatByClassMap
ArcSpellLvlMod: arcSpellLvlMod
DivSpellLvlMod: divSpellLvlMod
EpicLevel: epicLevel
Package: package
FEATPracticedSpellcaster: featPracticedSpellcaster
FEATExtraSlot: featExtraSlot
FEATArmoredCaster: featArmoredCaster
FavoredWeaponProficiency: favoredWeaponProficiency
FavoredWeaponFocus: favoredWeaponFocus
FavoredWeaponSpecialization: favoredWeaponSpecialization
CharGen_Chest: charGenChest
CharGen_Feet: charGenFeet
CharGen_Hands: charGenHands
CharGen_Cloak: charGenCloak
CharGen_Head: charGenHead
# Some 2DA types are structured such that each 2DA is an object
# unto itself (e.g. cls_feat_*, race_feat_*). The definitions for
# these schemas are different in several subtle and not-so-subtle ways.
# Most of these are documented as they become relevant below, but a few key differences:
# - The labelField property is ignored.
# - The yamlMap property is mandatory. If it does not exist, the schema is interpreted
# as a single-file schema.
- typeName: cls_feat
criticalColumn: FeatIndex
columns:
FeatLabel: FeatLabel
FeatIndex:
# Specifies a path to which this value will be saved. Note that columns without a path
# will not be explicitly mapped to YAML (e.g. OnMenu is omitted from the file,
# while GrantedOnLevel, List, and FeatLabel exist only as implicit ancestors to FeatIndex).
#
# Paths are defined using JavaScript dot notation. JavaScript bracket notation
# is used only to access 2DA columns.
#
# WARNING: While there is probably no reason you should want to use the "alias" field
# in a multi-file schema in the first place, be aware that YAML2DA will use
# those aliases while interpreting the "path" field! For instance,
# if GrantedOnLevel had an alias of "levelGranted", we would need to use the path
# "levels.[levelGranted].[List].[FeatLabel]" here, instead!
path: levels.[GrantedOnLevel].[List].[FeatLabel]
List:
mapping:
# These feats can be taken as a feat choice once unlocked.
0: unlocks
# These feats can be taken as a feat or bonus feat choice once unlocked.
1: unlocksBonus
# These feats can be taken ONLY as a bonus feat choice once unlocked.
# (Unless they were fully unlocked by another class, or can be taken by all classes anyway.)
2: bonusPicks
# These feats are automatically granted on levelup.
3: grants
GrantedOnLevel:
# Specifies a minimum for numerical values. Leave blank if not applicable,
# YAML2DA will default it to Number.MIN_VALUE.
minimum: 1
# Specifies a maximum for numerical values. Leave blank if not applicable,
# YAML2DA will default to Number.MAX_VALUE.
maximum: 30
# Remaps certain values to other values (after min/max clamping, if any).
# For instance, anything granted on level 1 (or lower, because of our minimum)
# will be rendered to YAML as being granted by the "always" level.
# CAUTION: Make sure to define an inverse mapping in yamlMap,
# or your schema may export faulty 2DAs!
mapping:
# Feats unlocked from level 1 or less are always unlocked.
1: always
# Feats unlocked from level 21 are epic unlocks.
21: epic
OnMenu:
optional: true
yamlMap:
# Specifies values for columns with constant values. These values are used
# by all rows in the 2DA, for whatever silly reason.
# TODO: Add support for some kind of conditional logic here, e.g.
# specifying that if List == 2, then OnMenu = 1 or something;
# or that if epicFrom == 11, then OnMenu = 2. Silly, unrealistic
# examples, but they get the point across...
consts:
OnMenu: 0
tree:
# NOTE: Must start with a constant root node, and end with a leaf node (or array of leaf nodes).
# In this case, the "levels" node always exists in a valid cls_feat file,
# and the leaves of its YAML tree, all mapping to FeatIndex, are four layers down.
# YAML2DA uses these two data points to deduce that it needs to go down the tree
# three times in order to build a list of paths to all values of FeatIndex.
#
# The resulting paths will look something like "levels.always.grants.WeapProfSimple".
# You may notice this maps neatly back to the "path" property we defined for FeatIndex.
# This is no coincidence: The purpose of that property was to map the 2DA row
# onto a YAML path in the first place, and by deconstructing that path,
# we can now infer the values of FeatLabel, List, and GrantedOnLevel.
# (We already know that the data stored *at* that path is supposed
# to be one or more FeatIndex values associated with those inferred values!)
- levels
# We need an object here, because we have to apply some transformations
# to the values we're getting from this layer. But at the same time,
# we also need to know the name of the column those values belong to!
- column: GrantedOnLevel
# Remap YAML values to 2DA values. Should basically be the reverse
# of the "mapping" property we defined earlier.
mapping:
always: 1
epic:
# Unlike "always", "epic" derives its value from a scalar
# property in the YAML (referenced using JavaScript dot notation).
# This is because epic levels may not always start at 21 for a given class.
#
# For example, BGTSCC had intended to add epic
# progression to PRCs starting at 11: their PRC
# feat tables would thus have needed to be written
# with the assumption that epic levels start at 11.
src: epicFrom
# Default value in case "src" refers to a property that
# does not exist in the YAML or is not a scalar.
# If blank, will use null (i.e. "****") instead.
default: 21
- column: List
mapping:
unlocks: 0
unlocksBonus: 1
bonusPicks: 2
grants: 3
# Notice how having no "mapping" property means we can store a string
# instead of an object here...
- FeatLabel
- FeatIndex
# Omitting schemas for:
# - cls_atk
# - cls_bfeat
# - cls_bsplvl
# - cls_featmap
# - cls_pres
# - cls_savthr
# - cls_skill
# - cls_spgn
# - cls_spkn
# - cls_spon
# - color
# These cannot be meaningfully described in the current YAML schema format.
# (TODO: Review for possible tree use cases.)
# Schema disabled for now.
# - typeName: combatmodes
# labelField: combatMode
# columns:
# CombatMode: combatMode
# ActivatedName: activatedName
# DeactivatedName: deactivatedName
# NeedsTarget: needsTarget
# Schema disabled for now.
# - typeName: container_preference
# labelField: label
# columns:
# Label: label
# Name: name
# Omitting schemas for:
# - crafting
# - crafting_index
# These cannot be meaningfully described in the current format, and may in fact
# need to be unified into a single YAML to cover both 2DAs.
# (TODO: Review for possible tree use cases.)
# Schema disabled for now.
# - typeName: creaturesize
# labelField: label
# columns:
# LABEL: label
# ACATTACKMOD: acAttackMod
# STRREF: strRef
# Schema disabled for now.
# - typeName: creaturespeed
# labelField: label
# columns:
# Label: label
# Name: name
# 2DAName: 2daName
# WALKRATE: walkRate
# RUNRATE: runRate
# Omitting schemas for:
# - crft_alch_* (no idea what the hell they even are)
# - crtemplates (why bother)
# - DMFI languages (needs custom handling)
# (TODO: Review for possible tree use cases.)
# Schema disabled for now.
# - typeName: cursors
# labelField: label
# columns:
# Label: label
# ResRef: resRef
# CursorID: cursorId
# Schema disabled for now.
# - typeName: damagehitvisual
# labelField: label
# columns:
# Label: label
# VisualEffectID: visualEffectId
# RangedEffectID: rangedEffectId
# NOTE: The game does not read this table from HAKs, only overrides.
# Schema disabled for now.
# - typeName: damagelevels
# labelField: label
# columns:
# LABEL: label
# STRING_REF: strRef
# COLOR: color
# BOLD: bold
# DMG_LEVEL: dmgLevel
# Schema disabled for now.
# - typeName: damagereductins
# labelField: label
# columns:
# LABEL: label
# NAME: name
# Schema disabled for now.
# - typeName: defaultacsounds
# labelField: label
# columns:
# Label: label
# ArmorType: armorType
# Omitting schemas for:
# - des_* (no idea what the hell that is, but I don't think it's vanilla!)
# - diffsettings (needs custom handling)
# (TODO: Review for possible tree use cases.)
- typeName: disease
criticalColumn: Name
labelField: label
columns:
Label: label
Name: name
First_Save: firstSave
Subs_Save: subsSave
Incu_Hours: incuHours
Dice_1: dice1
Dam_1: dam1
Type_1: type1
Dice_2: dice2
Dam_2: dam2
Type_2: type2
Dice_3: dice3
Dam_3: dam3
Type_3: type3
Type: type
End_Incu_Script: endIncuScript
24_Hour_Script: 24HourScript
- typeName: domains
criticalColumn: Name
labelField: label
columns:
Label: label
Name: name
Description: description
Icon: icon
Level_1: level1
Level_2: level2
Level_3: level3
Level_4: level4
Level_5: level5
Level_6: level6
Level_7: level7
Level_8: level8
Level_9: level9
GrantedFeat: grantedFeat
CastableFeat: castableFeat
- typeName: doortypes
criticalColumn: Label
labelField: label
columns:
Label: label
PlaceableModelType: placeableModelType
NWN2_ModelName: modelName
AttachedModelName: attachedModelName
NWN2_PartsCount: partsCount
NWN2_Skeleton: skeleton
Model: model
TileSet: tileSet
TemplateResRef: templateResRef
StringRefGame: stringRefGame
BlockSight: blockSight
VisibleModel: visibleModel
SoundAppType: soundAppType
SELECTION_SIZE: selectionSize
OpenTime: openTime
# Omitting schemas for:
# - effectanim (no idea what it does)
# (TODO: Review for possible tree use cases.)
- typeName: effecticons
criticalColumns:
- Icon
- StrRef
labelField: label
columns:
Label: label
Icon: icon
StrRef: strRef
# Omitting schemas for:
# - encdifficulty
# - encumbrance (requires custom handler)
# - environment (meh)
# - epicattacks (requires custom handler)
# - epicsaves (requires custom handler)
# - eventtoolredirect (not sure what it's for)
# - excitedduration (ditto)
# - exptable (requires custom handler)
# (TODO: Review for possible tree use cases.)
- typeName: feat
criticalColumn: FEAT
labelField: label
columns:
LABEL: label
FEAT: name
DESCRIPTION: description
ICON: icon
MINATTACKBONUS: minAttackBonus
MINSTR: minStr
MINDEX: minDex
MININT: minInt
MINWIS: minWis
MINCON: minCon
MINCHA: minCha
MAXSTR: maxStr
MAXDEX: maxDex
MAXINT: maxInt
MAXWIS: maxWis
MAXCON: maxCon
MAXCHA: maxCha
MINSPELLLVL: minSpellLvl
MINCASTERLVL: minCasterLvl
PREREQFEAT1: prereqFeat1
PREREQFEAT2: prereqFeat2
GAINMULTIPLE: gainMultiple
EFFECTSSTACK: effectsStack
ALLCLASSESCANUSE: allClassesCanUse
CATEGORY: category
MAXCR: maxCR
SPELLID: spellId
SUCCESSOR: successor
CRValue: crValue
USESPERDAY: usesPerDay
USESMAPFEAT: usesMapFeat
MASTERFEAT: masterFeat
TARGETSELF: targetSelf
OrReqFeat0: orReqFeat0
OrReqFeat1: orReqFeat1
OrReqFeat2: orReqFeat2
OrReqFeat3: orReqFeat3
OrReqFeat4: orReqFeat4
OrReqFeat5: orReqFeat5
REQSKILL: reqSkill
ReqSkillMaxRanks: reqSkillMaxRanks
ReqSkillMinRanks: reqSkillMinRanks
REQSKILL2: reqSkill2
ReqSkillMaxRanks2: reqSkillMaxRanks2
ReqSkillMinRanks2: reqSkillMinRanks2
Constant: constant
TOOLSCATEGORIES: toolsCategory
HostileFeat: hostileFeat
MinLevel: minLevel
MinLevelClass: minLevelClass
MaxLevel: maxLevel
MinFortSave: minFortSave
PreReqEpic: requireEpic
FeatCategory: featCategory
IsActive: isActive
IsPersistent: isPersistent
ToggleMode: toggleMode
Cooldown: cooldown
DMFeat: dmFeat
REMOVED: removed
AlignRestrict: alignRestrict
ImmunityType: immunityType
Instant: instant
# Omitting schemas for:
# - footstepsounds (meh)
# - fractionalcr (wtf)
# - ftext_styles (meh)
# - fw_cdaulepp_* (needs custom handling)
# - Game_Params (wtf)
# - gamespyrooms (meh)
# - gender (meh)
# (TODO: Review for possible tree use cases.)
- typeName: genericdoors
labelField: label
columns:
Label: label
StrRef: strRef
ModelName: modelName
BlockSight: blockSight
VisibleModel: visibleModel
SoundAppType: soundAppType
Name: name
# Omitting schemas for:
# - grass (meh)
# (TODO: Review for possible tree use cases.)
- typeName: hen_companion
labelField: name
columns:
NAME: name
BASERESREF_PREFIX: baseResRefPrefix
STRREF: strRef
DESCRIPTION: description
Range1: range1
Range2: range2
Range3: range3
Range4: range4
Range5: range5
Range6: range6
Range7: range7
Range8: range8
Range9: range9
Range10: range10
Range11: range11
Range12: range12
AvailableToPlayer: availableToPlayer
FeatID: featId
- typeName: hen_familiar
labelField: name
columns:
NAME: name
BASERESREF_PREFIX: baseResRefPrefix
STRREF: strRef
DESCRIPTION: description
FeatGained: featGained
Range1: range1
Range2: range2
Range3: range3
Range4: range4
Range5: range5
Range6: range6
Range7: range7
Range8: range8
Range9: range9
Range10: range10
AvailableToPlayer: availableToPlayer
# Omitting schemas for:
# - henchspells (wtf)
# - inventorysnds (meh)
# - iprp_* (mostly meh, and/or needs custom handling)
# (TODO: Review for possible tree use cases.)
- typeName: itempropdef
criticalColumn: Label
labelField: label
columns:
Name: name
Label: label
SubTypeResRef: subTypeResRef
Cost: cost
CostTableResRef: costTableResRef
Param1ResRef: param1ResRef
GameStrRef: gameStrRef
Description: description
Slots: slots
# Omitting schemas for:
# - itemprops (wtf)
# - itemtypes (wtf)
# - itemvalue (wtf)
# - itm_rand* (wtf)
# - itmwiz* (wtf)
# - keymap (meh)
# - lightcolor (meh)
# - loadhints (meh)
# - loadscreens (meh)
# - masterfeats (meh)
# - metamagic (meh)
# - metatiles (meh)
# - namefilter (meh)
# - nwconfig (meh)
# - nwconfig2 (meh)
# - NWN2_AlignIcons (meh)
# - nwn2_animcom (meh)
# - nwn2_animstan (meh)
# - NWN2_BehaviorParams (meh)
# - NWN2_BloodTypes (meh)
# - NWN2_Colors (meh)
# (TODO: Review for possible tree use cases.)
- typeName: nwn2_deities
criticalColumn: FirstName
labelField: firstName