diff --git a/_module/itp/creaturepalcus.itp.json b/_module/itp/creaturepalcus.itp.json
index 633460bd..1845fb3e 100644
--- a/_module/itp/creaturepalcus.itp.json
+++ b/_module/itp/creaturepalcus.itp.json
@@ -10,10 +10,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 48
- },
"LIST": {
"type": "list",
"value": [
@@ -202,10 +198,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
@@ -332,10 +324,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"LIST": {
"type": "list",
"value": [
@@ -443,10 +431,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"LIST": {
"type": "list",
"value": [
@@ -497,10 +481,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"LIST": {
"type": "list",
"value": [
@@ -570,10 +550,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 9
- },
"LIST": {
"type": "list",
"value": [
@@ -859,10 +835,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 20
- },
"LIST": {
"type": "list",
"value": [
@@ -1350,10 +1322,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 21
- },
"LIST": {
"type": "list",
"value": [
@@ -1632,10 +1600,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 22
- },
"LIST": {
"type": "list",
"value": [
@@ -2907,10 +2871,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 34
- },
"LIST": {
"type": "list",
"value": [
@@ -2961,10 +2921,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 35
- },
"LIST": {
"type": "list",
"value": [
@@ -3034,10 +2990,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 36
- },
"LIST": {
"type": "list",
"value": [
@@ -3069,10 +3021,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 37
- },
"LIST": {
"type": "list",
"value": [
@@ -3192,10 +3140,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 14
- },
"LIST": {
"type": "list",
"value": [
@@ -3227,10 +3171,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 15
- },
"LIST": {
"type": "list",
"value": [
@@ -3319,10 +3259,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 16
- },
"LIST": {
"type": "list",
"value": [
@@ -3468,10 +3404,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 17
- },
"LIST": {
"type": "list",
"value": [
@@ -3579,10 +3511,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 18
- },
"LIST": {
"type": "list",
"value": [
@@ -3633,10 +3561,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 19
- },
"LIST": {
"type": "list",
"value": [
@@ -3668,10 +3592,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 50
- },
"LIST": {
"type": "list",
"value": [
@@ -3772,10 +3692,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 10
- },
"LIST": {
"type": "list",
"value": [
@@ -3826,10 +3742,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 11
- },
"LIST": {
"type": "list",
"value": [
@@ -3887,10 +3799,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 49
- },
"LIST": {
"type": "list",
"value": [
@@ -3922,10 +3830,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 13
- },
"LIST": {
"type": "list",
"value": [
@@ -4342,10 +4246,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 23
- },
"LIST": {
"type": "list",
"value": [
@@ -4548,10 +4448,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 24
- },
"LIST": {
"type": "list",
"value": [
@@ -5552,10 +5448,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 25
- },
"STRREF": {
"type": "dword",
"value": 6718
@@ -5563,10 +5455,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 47
- },
"LIST": {
"type": "list",
"value": [
@@ -5636,10 +5524,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 26
- },
"LIST": {
"type": "list",
"value": [
@@ -5678,10 +5562,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 12
- },
"STRREF": {
"type": "dword",
"value": 6703
@@ -5694,10 +5574,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 27
- },
"LIST": {
"type": "list",
"value": [
@@ -5843,10 +5719,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 28
- },
"LIST": {
"type": "list",
"value": [
@@ -5973,10 +5845,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 29
- },
"LIST": {
"type": "list",
"value": [
@@ -6844,10 +6712,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 30
- },
"LIST": {
"type": "list",
"value": [
@@ -7012,10 +6876,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 31
- },
"LIST": {
"type": "list",
"value": [
@@ -7351,10 +7211,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 32
- },
"LIST": {
"type": "list",
"value": [
@@ -7975,10 +7831,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 33
- },
"LIST": {
"type": "list",
"value": [
@@ -8504,10 +8356,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 38
- },
"LIST": {
"type": "list",
"value": [
@@ -8596,10 +8444,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 39
- },
"LIST": {
"type": "list",
"value": [
@@ -9144,10 +8988,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 40
- },
"STRREF": {
"type": "dword",
"value": 27
@@ -9155,10 +8995,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 42
- },
"STRREF": {
"type": "dword",
"value": 31
@@ -9166,10 +9002,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 41
- },
"LIST": {
"type": "list",
"value": [
@@ -9239,10 +9071,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 43
- },
"LIST": {
"type": "list",
"value": [
@@ -9369,10 +9197,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 44
- },
"LIST": {
"type": "list",
"value": [
@@ -10221,10 +10045,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 45
- },
"LIST": {
"type": "list",
"value": [
@@ -10591,10 +10411,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -12821,6 +12637,25 @@
"value": "prc_pm_mage2"
}
},
+ {
+ "__struct_id": 0,
+ "CR": {
+ "type": "float",
+ "value": 3.0
+ },
+ "FACTION": {
+ "type": "cexostring",
+ "value": "Defender"
+ },
+ "NAME": {
+ "type": "cexostring",
+ "value": "Spiritual Weapon"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_spirit_weapn"
+ }
+ },
{
"__struct_id": 0,
"CR": {
@@ -13552,10 +13387,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -14461,10 +14292,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"LIST": {
"type": "list",
"value": [
@@ -15142,10 +14969,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"LIST": {
"type": "list",
"value": [
@@ -17514,10 +17337,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"LIST": {
"type": "list",
"value": [
@@ -35511,10 +35330,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 46
- },
"LIST": {
"type": "list",
"value": [
diff --git a/_module/itp/doorpalcus.itp.json b/_module/itp/doorpalcus.itp.json
index 6ff3ed66..82c108fa 100644
--- a/_module/itp/doorpalcus.itp.json
+++ b/_module/itp/doorpalcus.itp.json
@@ -10,10 +10,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -103,10 +99,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -163,10 +155,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"LIST": {
"type": "list",
"value": [
@@ -190,10 +178,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -201,10 +185,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"STRREF": {
"type": "dword",
"value": 6692
@@ -219,10 +199,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
@@ -251,10 +227,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"STRREF": {
"type": "dword",
"value": 6736
@@ -262,10 +234,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 9
- },
"STRREF": {
"type": "dword",
"value": 201
@@ -273,10 +241,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"STRREF": {
"type": "dword",
"value": 6737
@@ -284,10 +248,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"LIST": {
"type": "list",
"value": [
diff --git a/_module/itp/encounterpalcus.itp.json b/_module/itp/encounterpalcus.itp.json
index f3ea1441..1ccb1513 100644
--- a/_module/itp/encounterpalcus.itp.json
+++ b/_module/itp/encounterpalcus.itp.json
@@ -5,10 +5,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"LIST": {
"type": "list",
"value": [
@@ -153,10 +149,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 9
- },
"LIST": {
"type": "list",
"value": [
@@ -224,10 +216,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"LIST": {
"type": "list",
"value": [
@@ -1769,10 +1757,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"LIST": {
"type": "list",
"value": [
@@ -2461,10 +2445,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"STRREF": {
"type": "dword",
"value": 6688
@@ -2472,10 +2452,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -2499,10 +2475,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"STRREF": {
"type": "dword",
"value": 6690
@@ -2510,10 +2482,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -2521,10 +2489,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"LIST": {
"type": "list",
"value": [
@@ -2555,10 +2519,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
diff --git a/_module/itp/itempalcus.itp.json b/_module/itp/itempalcus.itp.json
index 66a2e9b8..4a60ca9f 100644
--- a/_module/itp/itempalcus.itp.json
+++ b/_module/itp/itempalcus.itp.json
@@ -10,10 +10,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
@@ -356,10 +352,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"LIST": {
"type": "list",
"value": [
@@ -559,10 +551,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 9
- },
"LIST": {
"type": "list",
"value": [
@@ -938,10 +926,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"LIST": {
"type": "list",
"value": [
@@ -1042,10 +1026,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"LIST": {
"type": "list",
"value": [
@@ -1168,10 +1148,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 58
- },
"LIST": {
"type": "list",
"value": [
@@ -1185,6 +1161,17 @@
"type": "resref",
"value": "devarobe"
}
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Unarmed Spiritual Weapon \"Fists\""
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_sprtwp_armor"
+ }
}
]
},
@@ -1200,10 +1187,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 11
- },
"LIST": {
"type": "list",
"value": [
@@ -1315,10 +1298,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 10
- },
"LIST": {
"type": "list",
"value": [
@@ -1375,10 +1354,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 12
- },
"LIST": {
"type": "list",
"value": [
@@ -1509,10 +1484,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 55
- },
"LIST": {
"type": "list",
"value": [
@@ -3945,10 +3916,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 13
- },
"LIST": {
"type": "list",
"value": [
@@ -6084,10 +6051,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 63
- },
"LIST": {
"type": "list",
"value": [
@@ -6375,10 +6338,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 59
- },
"LIST": {
"type": "list",
"value": [
@@ -6490,10 +6449,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 14
- },
"LIST": {
"type": "list",
"value": [
@@ -8554,6 +8509,17 @@
"value": "servantprops4"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Spiritual Weapon Properties"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_sprtwpn_hide"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -8937,10 +8903,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 56
- },
"LIST": {
"type": "list",
"value": [
@@ -10275,6 +10237,17 @@
"value": "spectre_touch"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Spirtual Weapon Slam"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_sprtwpn_slam"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -10373,10 +10346,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 60
- },
"LIST": {
"type": "list",
"value": [
@@ -11736,10 +11705,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 16
- },
"LIST": {
"type": "list",
"value": [
@@ -11994,10 +11959,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 15
- },
"LIST": {
"type": "list",
"value": [
@@ -12263,10 +12224,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 17
- },
"LIST": {
"type": "list",
"value": [
@@ -12455,10 +12412,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 18
- },
"LIST": {
"type": "list",
"value": [
@@ -12702,10 +12655,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 19
- },
"LIST": {
"type": "list",
"value": [
@@ -12879,10 +12828,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 64
- },
"LIST": {
"type": "list",
"value": [
@@ -12917,10 +12862,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 57
- },
"LIST": {
"type": "list",
"value": [
@@ -13026,10 +12967,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 21
- },
"LIST": {
"type": "list",
"value": [
@@ -13372,10 +13309,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 22
- },
"LIST": {
"type": "list",
"value": [
@@ -13923,10 +13856,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 20
- },
"LIST": {
"type": "list",
"value": [
@@ -13994,10 +13923,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 23
- },
"LIST": {
"type": "list",
"value": [
@@ -15583,10 +15508,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 24
- },
"LIST": {
"type": "list",
"value": [
@@ -16149,10 +16070,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 26
- },
"LIST": {
"type": "list",
"value": [
@@ -17916,6 +17833,17 @@
"value": 767
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_997"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790493
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -20831,6 +20759,17 @@
"value": 16827179
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_995"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790488
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -24978,6 +24917,50 @@
"value": 6340
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_874"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790512
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_865"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790497
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_868"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790502
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_871"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790507
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -26100,6 +26083,17 @@
"value": 917
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_877"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790517
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -26199,6 +26193,28 @@
"value": 2671
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_880"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790522
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_881"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790525
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -26892,6 +26908,17 @@
"value": 16829598
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "prc_scr_884"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 16790530
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -27634,10 +27661,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 54
- },
"LIST": {
"type": "list",
"value": [
@@ -27919,10 +27942,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -28088,7 +28107,7 @@
},
"RESREF": {
"type": "resref",
- "value": "mc_blckstickbloo"
+ "value": "mc_blckstickbld"
}
},
{
@@ -28264,7 +28283,7 @@
},
"RESREF": {
"type": "resref",
- "value": "mc_pieceofleathe"
+ "value": "mc_pieceofleathr"
}
},
{
@@ -28520,6 +28539,17 @@
"value": 16826278
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Banded"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor4"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -28674,6 +28704,17 @@
"value": "bralaniscimitar"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Breastplate"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor5"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -28773,6 +28814,17 @@
"value": 16826288
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Chain"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor6"
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -28894,6 +28946,17 @@
"value": "fky_chat_target"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Cover"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor1"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -29136,6 +29199,17 @@
"value": "mc_fur"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Garb"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor0"
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -29232,7 +29306,7 @@
},
"RESREF": {
"type": "resref",
- "value": "mc_grasshopperhl"
+ "value": "mc_grasshopprhlg"
}
},
{
@@ -29279,6 +29353,17 @@
"value": "mc_gumarabic"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Half-plate"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor7"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30016,6 +30101,17 @@
"value": "mc_rawmeat"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Plate"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor8"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30379,6 +30475,17 @@
"value": 4668
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Studded Leather"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor3"
+ }
+ },
{
"__struct_id": 0,
"RESREF": {
@@ -30511,6 +30618,17 @@
"value": "mc_tinytarts"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Toughened Leather"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarmor2"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30751,10 +30869,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -30769,6 +30883,116 @@
"value": "epicspellcasting"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 10"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge10"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 4"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 5"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 6"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 7"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge7"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 8"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge8"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Large 9"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlarge9"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30813,6 +31037,39 @@
"value": "prc_ipbase"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Small 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdsmall1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Small 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdsmall2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Small 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdsmall3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30823,6 +31080,39 @@
"type": "resref",
"value": "soul_gem"
}
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Tower 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdtower1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Tower 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdtower2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Tower 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdtower3"
+ }
}
]
},
@@ -30833,10 +31123,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"LIST": {
"type": "list",
"value": [
@@ -30851,6 +31137,39 @@
"value": "craft_amulet"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Amulet 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdammy1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Amulet 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdammy2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Amulet 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdammy3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30884,6 +31203,28 @@
"value": "craft_belt"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Belt 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbelt1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Belt 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbelt2"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30906,6 +31247,39 @@
"value": "craft_boots"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Boots 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdboots1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Boots 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdboots2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Boots 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdboots3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30928,6 +31302,39 @@
"value": "craft_bracers"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Bracers 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbracers1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Bracers 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbracers2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Bracers 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbracers3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30950,6 +31357,39 @@
"value": "craft_cloak"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Cloak 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdcloak1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Cloak 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdcloak2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Cloak 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdcloak3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -30983,6 +31423,39 @@
"value": "craft_gloves"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Helm 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhelm1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Helm 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhelm2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Helm 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhelm3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31016,6 +31489,72 @@
"value": "kamaofperfection"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Monk Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_mgloves5"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31027,6 +31566,50 @@
"value": "craft_ring"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Ring 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdring1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Ring 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdring2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Ring 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdring3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Ring 4"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdring4"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31091,13 +31674,97 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"LIST": {
"type": "list",
"value": [
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdarrow"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1517
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Bastard Sword"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_bastard"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbaxe"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 169
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdbolt"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1519
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdclub"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1522
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sddagger"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 191
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sddsmace"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1526
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sddsaxe"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1527
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31208,6 +31875,28 @@
"value": "esminskin1"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Greataxe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdgaxe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdgsword"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 167
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31318,6 +32007,50 @@
"value": "guildsilks"
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhalberd"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 175
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Handaxe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhaxe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhcbow"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 173
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdhflail"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1529
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31329,6 +32062,160 @@
"value": "irongskin1"
}
},
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdkama"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1534
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdkatana"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1535
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdkukri"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1536
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Light Crossbow"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlcbow"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlflail"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 176
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlhamm"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1531
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Longbow"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlbow"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdlsword"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 166
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdmace"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 177
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdmstar"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1541
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdqstaff"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1544
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdrapier"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1545
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdscim"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1547
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdscythe"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1549
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31823,6 +32710,127 @@
"type": "resref",
"value": "sewaterskin1"
}
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdssword"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 106
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdsbow"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 171
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdsickle"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1554
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdspear"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 1552
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Staff 1"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdstaff1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Staff 2"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdstaff2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Staff 3"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdstaff3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sddbsword"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 172
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Waraxe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sdwaxe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdwhamm"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 178
+ }
+ },
+ {
+ "__struct_id": 0,
+ "RESREF": {
+ "type": "resref",
+ "value": "sdwhip"
+ },
+ "STRREF": {
+ "type": "dword",
+ "value": 83617
+ }
}
]
},
@@ -31833,10 +32841,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"LIST": {
"type": "list",
"value": [
@@ -31851,6 +32855,600 @@
"value": "dm_chat_control"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Cord"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Ephod"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Grips"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Mitre"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Plate"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Benevolent Sandals"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_cleric_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Bearskin Cloak"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Belt"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Crown"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Footstraps/c>"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Loincloth"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Conan's Wriststrap"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_barb_s6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Crest"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Gauntlets"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Greaves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Helm"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Vestguard"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Dorian's Waistband"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Cape"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Robe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Sash"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Slippers"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Tiara"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Mystra's Wraps"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_wizard_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Cord"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Covering"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Headdress"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Mantle"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Shinwraps"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Oracle's Stanchions"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_druid_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Kabuto"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Kimono"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Obi"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Oyoroi"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Tabi"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Shinobi's Tekou"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_fighter_s2_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Cape"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Robe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Sash"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Slippers"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Tiara"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Thera's Wraps"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_sorc_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Amulet"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_6"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Cap"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Clogs"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Harness"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Sequin Belt"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Trancendent Windcatcher"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_monk_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Gloves"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_1"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Plate"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_5"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Sabatons"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Targe"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_3"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Vanguard"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_4"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Zealot's Waistguard"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_paladin_s1_6"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -31928,6 +33526,17 @@
"value": "prc_wf_compbody"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Critter skin"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_skin"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -32313,6 +33922,39 @@
"value": "mightsilk23"
}
},
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Socket Gem"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_rune"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Socket Gem"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_rune2"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "NAME": {
+ "type": "cexostring",
+ "value": "Socket Gem"
+ },
+ "RESREF": {
+ "type": "resref",
+ "value": "sd_rune3"
+ }
+ },
{
"__struct_id": 0,
"NAME": {
@@ -32527,10 +34169,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 53
- },
"LIST": {
"type": "list",
"value": [
@@ -32641,10 +34279,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 27
- },
"LIST": {
"type": "list",
"value": [
@@ -32866,10 +34500,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 28
- },
"LIST": {
"type": "list",
"value": [
@@ -32992,10 +34622,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 29
- },
"LIST": {
"type": "list",
"value": [
@@ -33108,10 +34734,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 32
- },
"LIST": {
"type": "list",
"value": [
@@ -33245,10 +34867,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 30
- },
"LIST": {
"type": "list",
"value": [
@@ -33371,10 +34989,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 31
- },
"LIST": {
"type": "list",
"value": [
@@ -33465,10 +35079,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 33
- },
"LIST": {
"type": "list",
"value": [
@@ -33613,10 +35223,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 34
- },
"LIST": {
"type": "list",
"value": [
@@ -33739,10 +35345,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 35
- },
"LIST": {
"type": "list",
"value": [
@@ -33942,10 +35544,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 36
- },
"LIST": {
"type": "list",
"value": [
@@ -34277,10 +35875,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 37
- },
"LIST": {
"type": "list",
"value": [
@@ -34755,10 +36349,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 38
- },
"LIST": {
"type": "list",
"value": [
@@ -34981,10 +36571,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 39
- },
"LIST": {
"type": "list",
"value": [
@@ -35052,10 +36638,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 40
- },
"LIST": {
"type": "list",
"value": [
@@ -35178,10 +36760,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 41
- },
"LIST": {
"type": "list",
"value": [
@@ -35284,17 +36862,6 @@
"value": "legend27"
}
},
- {
- "__struct_id": 0,
- "NAME": {
- "type": "cexostring",
- "value": "Maul"
- },
- "RESREF": {
- "type": "resref",
- "value": "maul"
- }
- },
{
"__struct_id": 0,
"NAME": {
@@ -35337,10 +36904,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 42
- },
"LIST": {
"type": "list",
"value": [
@@ -35463,10 +37026,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 61
- },
"LIST": {
"type": "list",
"value": [
@@ -35541,10 +37100,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 46
- },
"LIST": {
"type": "list",
"value": [
@@ -35810,10 +37365,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 47
- },
"LIST": {
"type": "list",
"value": [
@@ -36194,10 +37745,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 48
- },
"LIST": {
"type": "list",
"value": [
@@ -36265,10 +37812,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 49
- },
"LIST": {
"type": "list",
"value": [
@@ -36567,10 +38110,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 50
- },
"LIST": {
"type": "list",
"value": [
@@ -36645,10 +38184,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 51
- },
"LIST": {
"type": "list",
"value": [
@@ -36897,10 +38432,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 43
- },
"LIST": {
"type": "list",
"value": [
@@ -37012,10 +38543,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 44
- },
"LIST": {
"type": "list",
"value": [
@@ -37149,10 +38676,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 45
- },
"LIST": {
"type": "list",
"value": [
@@ -37231,10 +38754,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 62
- },
"LIST": {
"type": "list",
"value": [
@@ -37298,10 +38817,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 52
- },
"LIST": {
"type": "list",
"value": [
diff --git a/_module/itp/placeablepalcus.itp.json b/_module/itp/placeablepalcus.itp.json
index 296d8fb0..8ee76d3c 100644
--- a/_module/itp/placeablepalcus.itp.json
+++ b/_module/itp/placeablepalcus.itp.json
@@ -5,10 +5,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"LIST": {
"type": "list",
"value": [
@@ -241,10 +237,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 22
- },
"STRREF": {
"type": "dword",
"value": 111663
@@ -252,10 +244,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"LIST": {
"type": "list",
"value": [
@@ -2050,10 +2038,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"LIST": {
"type": "list",
"value": [
@@ -2121,10 +2105,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 9
- },
"LIST": {
"type": "list",
"value": [
@@ -2456,10 +2436,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 10
- },
"LIST": {
"type": "list",
"value": [
@@ -2912,10 +2888,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 11
- },
"LIST": {
"type": "list",
"value": [
@@ -3335,10 +3307,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 12
- },
"LIST": {
"type": "list",
"value": [
@@ -3439,10 +3407,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 14
- },
"STRREF": {
"type": "dword",
"value": 9122
@@ -3450,10 +3414,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 15
- },
"LIST": {
"type": "list",
"value": [
@@ -3504,10 +3464,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -3729,10 +3685,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -3811,10 +3763,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"LIST": {
"type": "list",
"value": [
@@ -3959,10 +3907,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -3970,10 +3914,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"LIST": {
"type": "list",
"value": [
@@ -4037,10 +3977,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 13
- },
"LIST": {
"type": "list",
"value": [
@@ -4086,19 +4022,11 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 16
- },
"LIST": {
"type": "list",
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 17
- },
"LIST": {
"type": "list",
"value": [
@@ -4122,10 +4050,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 19
- },
"STRREF": {
"type": "dword",
"value": 5836
@@ -4133,10 +4057,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 21
- },
"STRREF": {
"type": "dword",
"value": 67585
@@ -4144,10 +4064,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 20
- },
"STRREF": {
"type": "dword",
"value": 53151
@@ -4155,10 +4071,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 18
- },
"LIST": {
"type": "list",
"value": [
@@ -4189,10 +4101,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
@@ -4211,7 +4119,7 @@
"__struct_id": 0,
"NAME": {
"type": "cexostring",
- "value": "Genesis Enterance Portal"
+ "value": "Genesis Entrance Portal"
},
"RESREF": {
"type": "resref",
diff --git a/_module/itp/soundpalcus.itp.json b/_module/itp/soundpalcus.itp.json
index 5a8a56a8..a3ff800d 100644
--- a/_module/itp/soundpalcus.itp.json
+++ b/_module/itp/soundpalcus.itp.json
@@ -5,10 +5,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"STRREF": {
"type": "dword",
"value": 6694
@@ -16,10 +12,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 13
- },
"STRREF": {
"type": "dword",
"value": 63289
@@ -27,10 +19,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 12
- },
"STRREF": {
"type": "dword",
"value": 62487
@@ -38,10 +26,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 7
- },
"STRREF": {
"type": "dword",
"value": 62483
@@ -49,10 +33,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"STRREF": {
"type": "dword",
"value": 62482
@@ -65,10 +45,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"STRREF": {
"type": "dword",
"value": 6688
@@ -76,10 +52,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"STRREF": {
"type": "dword",
"value": 6689
@@ -87,10 +59,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"STRREF": {
"type": "dword",
"value": 6690
@@ -98,10 +66,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -109,10 +73,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"STRREF": {
"type": "dword",
"value": 6692
@@ -127,10 +87,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 8
- },
"STRREF": {
"type": "dword",
"value": 62484
diff --git a/_module/itp/storepalcus.itp.json b/_module/itp/storepalcus.itp.json
index 025368c5..0d92f379 100644
--- a/_module/itp/storepalcus.itp.json
+++ b/_module/itp/storepalcus.itp.json
@@ -5,10 +5,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
@@ -92,10 +88,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -152,10 +144,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"LIST": {
"type": "list",
"value": [
@@ -201,10 +189,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"STRREF": {
"type": "dword",
"value": 6690
@@ -212,10 +196,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"LIST": {
"type": "list",
"value": [
@@ -239,10 +219,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"STRREF": {
"type": "dword",
"value": 6692
diff --git a/_module/itp/triggerpalcus.itp.json b/_module/itp/triggerpalcus.itp.json
index 581b70fa..3503bce1 100644
--- a/_module/itp/triggerpalcus.itp.json
+++ b/_module/itp/triggerpalcus.itp.json
@@ -5,10 +5,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"STRREF": {
"type": "dword",
"value": 1082
@@ -16,10 +12,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 6
- },
"LIST": {
"type": "list",
"value": [
@@ -307,10 +299,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 16
- },
"STRREF": {
"type": "dword",
"value": 9129
@@ -323,10 +311,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -361,10 +345,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"STRREF": {
"type": "dword",
"value": 6689
@@ -372,10 +352,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"STRREF": {
"type": "dword",
"value": 6690
@@ -383,10 +359,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -394,10 +366,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"STRREF": {
"type": "dword",
"value": 6692
@@ -417,10 +385,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 11
- },
"STRREF": {
"type": "dword",
"value": 53181
@@ -428,10 +392,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 12
- },
"STRREF": {
"type": "dword",
"value": 2255
@@ -439,10 +399,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 13
- },
"STRREF": {
"type": "dword",
"value": 2256
@@ -450,10 +406,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 14
- },
"STRREF": {
"type": "dword",
"value": 2257
@@ -461,10 +413,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 15
- },
"STRREF": {
"type": "dword",
"value": 53182
diff --git a/_module/itp/waypointpalcus.itp.json b/_module/itp/waypointpalcus.itp.json
index cee240bf..3a83a289 100644
--- a/_module/itp/waypointpalcus.itp.json
+++ b/_module/itp/waypointpalcus.itp.json
@@ -10,10 +10,6 @@
"value": [
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 0
- },
"LIST": {
"type": "list",
"value": [
@@ -59,10 +55,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 1
- },
"STRREF": {
"type": "dword",
"value": 6689
@@ -70,10 +62,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 2
- },
"STRREF": {
"type": "dword",
"value": 6690
@@ -81,10 +69,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 3
- },
"STRREF": {
"type": "dword",
"value": 6691
@@ -92,10 +76,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 4
- },
"STRREF": {
"type": "dword",
"value": 6692
@@ -110,10 +90,6 @@
},
{
"__struct_id": 0,
- "ID": {
- "type": "byte",
- "value": 5
- },
"LIST": {
"type": "list",
"value": [
diff --git a/_module/ncs/airlessaura1.ncs b/_module/ncs/airlessaura1.ncs
index 7961ea56..8c294006 100644
Binary files a/_module/ncs/airlessaura1.ncs and b/_module/ncs/airlessaura1.ncs differ
diff --git a/_module/ncs/altardeath2.ncs b/_module/ncs/altardeath2.ncs
index 771f9243..7a7ab4e3 100644
Binary files a/_module/ncs/altardeath2.ncs and b/_module/ncs/altardeath2.ncs differ
diff --git a/_module/ncs/darktrigger2a.ncs b/_module/ncs/darktrigger2a.ncs
index 0d166dc2..025fa0b7 100644
Binary files a/_module/ncs/darktrigger2a.ncs and b/_module/ncs/darktrigger2a.ncs differ
diff --git a/_module/ncs/moad_spawn.ncs b/_module/ncs/moad_spawn.ncs
index 31a05e65..395b96af 100644
Binary files a/_module/ncs/moad_spawn.ncs and b/_module/ncs/moad_spawn.ncs differ
diff --git a/_module/ncs/no_spn_dragon.ncs b/_module/ncs/no_spn_dragon.ncs
index 9a5d40e7..e32d1ac2 100644
Binary files a/_module/ncs/no_spn_dragon.ncs and b/_module/ncs/no_spn_dragon.ncs differ
diff --git a/_module/ncs/prc_pwonspawn.ncs b/_module/ncs/prc_pwonspawn.ncs
index 279796a4..871366b3 100644
Binary files a/_module/ncs/prc_pwonspawn.ncs and b/_module/ncs/prc_pwonspawn.ncs differ
diff --git a/_module/ncs/sd_area_purge.ncs b/_module/ncs/sd_area_purge.ncs
new file mode 100644
index 00000000..7f5e497b
Binary files /dev/null and b/_module/ncs/sd_area_purge.ncs differ
diff --git a/_module/ncs/sd_chest_lever.ncs b/_module/ncs/sd_chest_lever.ncs
new file mode 100644
index 00000000..1d1b668d
Binary files /dev/null and b/_module/ncs/sd_chest_lever.ncs differ
diff --git a/_module/ncs/sd_chest_loot.ncs b/_module/ncs/sd_chest_loot.ncs
new file mode 100644
index 00000000..bbc97455
Binary files /dev/null and b/_module/ncs/sd_chest_loot.ncs differ
diff --git a/_module/ncs/sd_chestspwn_ent.ncs b/_module/ncs/sd_chestspwn_ent.ncs
new file mode 100644
index 00000000..7175ab11
Binary files /dev/null and b/_module/ncs/sd_chestspwn_ent.ncs differ
diff --git a/_module/ncs/sd_clear_sok_chs.ncs b/_module/ncs/sd_clear_sok_chs.ncs
new file mode 100644
index 00000000..4de883c2
Binary files /dev/null and b/_module/ncs/sd_clear_sok_chs.ncs differ
diff --git a/_module/ncs/sd_creature_kill.ncs b/_module/ncs/sd_creature_kill.ncs
new file mode 100644
index 00000000..88cf05fb
Binary files /dev/null and b/_module/ncs/sd_creature_kill.ncs differ
diff --git a/_module/ncs/sd_destroy_lbag.ncs b/_module/ncs/sd_destroy_lbag.ncs
new file mode 100644
index 00000000..17fa791b
Binary files /dev/null and b/_module/ncs/sd_destroy_lbag.ncs differ
diff --git a/_module/ncs/sd_destroyself.ncs b/_module/ncs/sd_destroyself.ncs
new file mode 100644
index 00000000..aed4c271
Binary files /dev/null and b/_module/ncs/sd_destroyself.ncs differ
diff --git a/_module/ncs/sd_dth.ncs b/_module/ncs/sd_dth.ncs
new file mode 100644
index 00000000..7cb065df
Binary files /dev/null and b/_module/ncs/sd_dth.ncs differ
diff --git a/_module/ncs/sd_loot_anim.ncs b/_module/ncs/sd_loot_anim.ncs
new file mode 100644
index 00000000..1614b931
Binary files /dev/null and b/_module/ncs/sd_loot_anim.ncs differ
diff --git a/_module/ncs/sd_loot_corpse.ncs b/_module/ncs/sd_loot_corpse.ncs
new file mode 100644
index 00000000..994dc8cb
Binary files /dev/null and b/_module/ncs/sd_loot_corpse.ncs differ
diff --git a/_module/ncs/sd_oncliententer.ncs b/_module/ncs/sd_oncliententer.ncs
new file mode 100644
index 00000000..122c5967
Binary files /dev/null and b/_module/ncs/sd_oncliententer.ncs differ
diff --git a/_module/ncs/sd_onrespawn.ncs b/_module/ncs/sd_onrespawn.ncs
new file mode 100644
index 00000000..fd31849e
Binary files /dev/null and b/_module/ncs/sd_onrespawn.ncs differ
diff --git a/_module/ncs/sd_set_item.ncs b/_module/ncs/sd_set_item.ncs
new file mode 100644
index 00000000..6f9b673b
Binary files /dev/null and b/_module/ncs/sd_set_item.ncs differ
diff --git a/_module/ncs/sd_setdrop.ncs b/_module/ncs/sd_setdrop.ncs
new file mode 100644
index 00000000..7e7ce408
Binary files /dev/null and b/_module/ncs/sd_setdrop.ncs differ
diff --git a/_module/ncs/sd_setplot.ncs b/_module/ncs/sd_setplot.ncs
new file mode 100644
index 00000000..bdf8e9fe
Binary files /dev/null and b/_module/ncs/sd_setplot.ncs differ
diff --git a/_module/ncs/sd_soc_install.ncs b/_module/ncs/sd_soc_install.ncs
new file mode 100644
index 00000000..eeb88251
Binary files /dev/null and b/_module/ncs/sd_soc_install.ncs differ
diff --git a/_module/ncs/silenttrigger2.ncs b/_module/ncs/silenttrigger2.ncs
index 90e8f4e5..2274260f 100644
Binary files a/_module/ncs/silenttrigger2.ncs and b/_module/ncs/silenttrigger2.ncs differ
diff --git a/_module/nss/codi_spawn.nss b/_module/nss/codi_spawn.nss
index 819c5a4f..8d30862a 100644
--- a/_module/nss/codi_spawn.nss
+++ b/_module/nss/codi_spawn.nss
@@ -44,6 +44,7 @@ const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
#include "ms_name_inc"
#include "x2_inc_switches"
+
void Embiggen(object oNPC, float fIncrease);
void Embiggen(object oNPC, float fIncrease)
@@ -597,6 +598,7 @@ void main()
//:: Set or Randomize name
ms_Nomenclature(OBJECT_SELF);
+
//:: Post Spawn event requested
if (nSpecEvent == 2 || nSpecEvent == 3)
diff --git a/_module/nss/inc_colorstring.nss b/_module/nss/inc_colorstring.nss
new file mode 100644
index 00000000..1f7a0595
--- /dev/null
+++ b/_module/nss/inc_colorstring.nss
@@ -0,0 +1,7 @@
+const string COLORTOKEN =" ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¡¢£¤¥¦§¨©ª«¬¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþþ";
+
+string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255)
+{
+ return "" + sText + "";
+}
+
diff --git a/_module/nss/inc_itm_appear.nss b/_module/nss/inc_itm_appear.nss
new file mode 100644
index 00000000..2f9bd6e8
--- /dev/null
+++ b/_module/nss/inc_itm_appear.nss
@@ -0,0 +1,228 @@
+//:://////////////////////////////////////////////
+// Common Loot Generator Script
+// Created By: Scott Milliorn
+// Module - A Carpathian Nightmare
+// Date: June 13th, 2018
+//
+// Additional help with donation of code from Dorrian of Trials of Newcastle
+//
+// If any code is used from this script please give credit to both -
+// Milliorn of A Carpathian Nightmare
+// Dorrian of Trials of Newcastle
+//:://////////////////////////////////////////////
+#include "prc_x2_itemprop"
+
+//:: Randomize the color of Weapons.
+void ColorWeapon(object oItem, int iBottom, int iMiddle ,int iTop, object oPC);
+
+//:: Randomize the color of Armor. (By Dorrian & Milliorn)
+void ColorArmor(object oItem, int cloth1, int cloth2, int leather1, int leather2, int metal1, int metal2, object oPC);
+
+//:: Randomize the appearance of Rings, Amulets & Belts.
+void ChangeRingAmuBelt(object oItem, int appearance, object oPC);
+
+//:: Random Weapon parts.
+void ChangeWeaponAppearance(object oItem, int iBottom, int iMiddle ,int iTop, int iBottomC, int iMiddleC ,int iTopC, object oPC);
+
+//:: Random Helm & Cloak color and/or appearance.
+void ColorHelmClk(object oItem, int cloth1, int cloth2, int leather1, int leather2, int metal1, int metal2, int appearance, object oPC);
+
+//:: Random Armor parts.
+void ChangeArmor(object oItem,
+ int iRandomShoulder,
+ int iRandomBicep,
+ int iRandomForearm,
+ int iRandomHand,
+ int iRandomThigh,
+ int iRandomShins,
+ int iRandomFeet,
+ int iRandomPelvis,
+ int iRandomBelt,
+ int iRandomNeck,
+ int iRandomChest,
+ int cloth1,
+ int cloth2,
+ int leather1,
+ int leather2,
+ int metal1,
+ int metal2,
+ object oPC);
+
+void ChangeArmor(object oItem,
+ int iRandomShoulder,
+ int iRandomBicep,
+ int iRandomForearm,
+ int iRandomHand,
+ int iRandomThigh,
+ int iRandomShins,
+ int iRandomFeet,
+ int iRandomPelvis,
+ int iRandomBelt,
+ int iRandomNeck,
+ int iRandomChest,
+ int cloth1,
+ int cloth2,
+ int leather1,
+ int leather2,
+ int metal1,
+ int metal2,
+ object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT, iRandomFeet, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItemAndModify(oCopy1, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT, iRandomFeet, TRUE);
+ DestroyObject(oCopy1); // remove old item
+ object oCopy3 = CopyItemAndModify(oCopy2, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN, iRandomShins, TRUE);
+ DestroyObject(oCopy2); // remove old item
+ object oCopy4 = CopyItemAndModify(oCopy3, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN, iRandomShins, TRUE);
+ DestroyObject(oCopy3); // remove old item
+ object oCopy5 = CopyItemAndModify(oCopy4, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH, iRandomThigh, TRUE);
+ DestroyObject(oCopy4); // remove old item
+ object oCopy6 = CopyItemAndModify(oCopy5, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH, iRandomThigh, TRUE);
+ DestroyObject(oCopy5); // remove old item
+ object oCopy7 = CopyItemAndModify(oCopy6, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_PELVIS, iRandomPelvis, TRUE);
+ DestroyObject(oCopy6); // remove old item
+ object oCopy8 = CopyItemAndModify(oCopy7, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO, iRandomChest, TRUE);
+ DestroyObject(oCopy7); // remove old item
+ object oCopy9 = CopyItemAndModify(oCopy8, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT, iRandomBelt, TRUE);
+ DestroyObject(oCopy8); // remove old item
+ object oCopy10 = CopyItemAndModify(oCopy9, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_NECK, iRandomNeck, TRUE);
+ DestroyObject(oCopy9); // remove old item
+ object oCopy11 = CopyItemAndModify(oCopy10, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM, iRandomForearm, TRUE);
+ DestroyObject(oCopy10); // remove old item
+ object oCopy12 = CopyItemAndModify(oCopy11, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM, iRandomForearm, TRUE);
+ DestroyObject(oCopy11); // remove old item
+ object oCopy13 = CopyItemAndModify(oCopy12, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP, iRandomBicep, TRUE);
+ DestroyObject(oCopy12); // remove old item
+ object oCopy14 = CopyItemAndModify(oCopy13, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP, iRandomBicep, TRUE);
+ DestroyObject(oCopy13); // remove old item
+ object oCopy15 = CopyItemAndModify(oCopy14, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER, iRandomShoulder, TRUE);
+ DestroyObject(oCopy14); // remove old item
+ object oCopy16 = CopyItemAndModify(oCopy15, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER, iRandomShoulder, TRUE);
+ DestroyObject(oCopy15); // remove old item
+ object oCopy17 = CopyItemAndModify(oCopy16, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND, iRandomHand, TRUE);
+ DestroyObject(oCopy16); // remove old item
+ object oCopy18 = CopyItemAndModify(oCopy17, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND, iRandomHand, TRUE);
+ DestroyObject(oCopy17); // remove old item
+ object oCopy19 = CopyItemAndModify(oCopy18, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, cloth1, TRUE);
+ DestroyObject(oCopy18); // remove old item
+ object oCopy20 = CopyItemAndModify(oCopy19, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, cloth2, TRUE);
+ DestroyObject(oCopy19); // remove old item
+ object oCopy21 = CopyItemAndModify(oCopy20, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, leather1, TRUE);
+ DestroyObject(oCopy20); // remove old item
+ object oCopy22 = CopyItemAndModify(oCopy21, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, leather2, TRUE);
+ DestroyObject(oCopy21); // remove old item
+ object oCopy23 = CopyItemAndModify(oCopy22, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, metal1, TRUE);
+ DestroyObject(oCopy22); // remove old item
+ object oCopy24 = CopyItemAndModify(oCopy23, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, metal2, TRUE);
+ DestroyObject(oCopy23); // remove old item
+ object oCopy25 = CopyItem(oCopy24,oPC, TRUE);
+ DestroyObject(oCopy24); // remove old item
+
+}
+
+void ColorArmor(object oItem, int cloth1, int cloth2, int leather1, int leather2, int metal1, int metal2, object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, cloth1, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItemAndModify(oCopy1, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, cloth2, TRUE);
+ DestroyObject(oCopy1); // remove old item
+ object oCopy3 = CopyItemAndModify(oCopy2, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, leather1, TRUE);
+ DestroyObject(oCopy2); // remove old item
+ object oCopy4 = CopyItemAndModify(oCopy3, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, leather2, TRUE);
+ DestroyObject(oCopy3); // remove old item
+ object oCopy5 = CopyItemAndModify(oCopy4, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, metal1, TRUE);
+ DestroyObject(oCopy4); // remove old item
+ object oCopy6 = CopyItemAndModify(oCopy5, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, metal2, TRUE);
+ DestroyObject(oCopy5); // remove old item
+ object oCopy7 = CopyItem(oCopy6,oPC, TRUE);
+ DestroyObject(oCopy6); // remove old item
+}
+
+void ColorHelmClk(object oItem, int cloth1, int cloth2, int leather1, int leather2, int metal1, int metal2, int appearance, object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, cloth1, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItemAndModify(oCopy1, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, cloth2, TRUE);
+ DestroyObject(oCopy1); // remove old item
+ object oCopy3 = CopyItemAndModify(oCopy2, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, leather1, TRUE);
+ DestroyObject(oCopy2); // remove old item
+ object oCopy4 = CopyItemAndModify(oCopy3, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, leather2, TRUE);
+ DestroyObject(oCopy3); // remove old item
+ object oCopy5 = CopyItemAndModify(oCopy4, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, metal1, TRUE);
+ DestroyObject(oCopy4); // remove old item
+ object oCopy6 = CopyItemAndModify(oCopy5, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, metal2, TRUE);
+ DestroyObject(oCopy5); // remove old item
+ object oCopy7 = CopyItemAndModify(oCopy6, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, appearance, TRUE);
+ DestroyObject(oCopy6); // remove old item
+ object oCopy8 = CopyItem(oCopy7,oPC, TRUE);
+ DestroyObject(oCopy7); // remove old item
+}
+
+void ChangeRingAmuBelt(object oItem, int appearance, object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, appearance, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItem(oCopy1,oPC, TRUE);
+ DestroyObject(oCopy1); // remove old item
+}
+
+void ChangeWeaponAppearance(object oItem, int iBottom, int iMiddle ,int iTop, int iBottomC, int iMiddleC, int iTopC, object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_BOTTOM, iBottom, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItemAndModify(oCopy1, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_MIDDLE, iMiddle, TRUE);
+ DestroyObject(oCopy1); // remove old item
+ object oCopy3 = CopyItemAndModify(oCopy2, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_TOP, iTop, TRUE);
+ DestroyObject(oCopy2); // remove old item
+ object oCopy4 = CopyItemAndModify(oCopy3, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_BOTTOM, iBottomC, TRUE);
+ DestroyObject(oCopy3); // remove old item
+ object oCopy5 = CopyItemAndModify(oCopy4, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_MIDDLE, iMiddleC, TRUE);
+ DestroyObject(oCopy4); // remove old item
+ object oCopy6 = CopyItemAndModify(oCopy5, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_TOP, iTopC, TRUE);
+ DestroyObject(oCopy5); // remove old item
+ object oCopy7 = CopyItem(oCopy6,oPC, TRUE);
+ DestroyObject(oCopy6); // remove old item
+
+
+}
+
+void ColorWeapon(object oItem, int iBottom, int iMiddle ,int iTop, object oPC)
+{
+ object oCopyBox = GetObjectByTag("LOOT_GENERATOR");
+
+ object oCopy = CopyItem(oItem,oCopyBox, TRUE);
+ DestroyObject(oItem); // remove old item
+ object oCopy1 = CopyItemAndModify(oCopy, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_BOTTOM, iBottom, TRUE);
+ DestroyObject(oCopy); // remove old item
+ object oCopy2 = CopyItemAndModify(oCopy1, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_MIDDLE, iMiddle, TRUE);
+ DestroyObject(oCopy1); // remove old item
+ object oCopy3 = CopyItemAndModify(oCopy2, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_TOP, iTop, TRUE);
+ DestroyObject(oCopy2); // remove old item
+ object oCopy4 = CopyItem(oCopy3,oPC, TRUE);
+ DestroyObject(oCopy3); // remove old item
+}
+
+//::void main () {}
+
+
diff --git a/_module/nss/moad_spawn.nss b/_module/nss/moad_spawn.nss
index 4ec8ecde..792d8fad 100644
--- a/_module/nss/moad_spawn.nss
+++ b/_module/nss/moad_spawn.nss
@@ -32,6 +32,8 @@
#include "x2_inc_switches"
#include "nwnx_webhook"
#include "nwnx_util"
+#include "sd_lootsystem"
+#include "ms_name_inc"
const int EVENT_USER_DEFINED_PRESPAWN = 1510;
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
@@ -85,6 +87,12 @@ void main()
// Execute default OnSpawn script.
ExecuteScript("nw_c2_default9", OBJECT_SELF);
+//:: Set or Randomize name
+ ms_Nomenclature(OBJECT_SELF);
+
+//:: Testing OnSpawn loot system.
+ sd_droploot(OBJECT_SELF, OBJECT_SELF);
+
//Post Spawn event requeste
if (nSpecEvent == 2 || nSpecEvent == 3)
diff --git a/_module/nss/pqj_inc.nss b/_module/nss/pqj_inc.nss
new file mode 100644
index 00000000..02ef6a25
--- /dev/null
+++ b/_module/nss/pqj_inc.nss
@@ -0,0 +1,249 @@
+//::///////////////////////////////////////////////
+//:: Persistent Quests & Journal Entries / Beta
+//:: pqj_inc
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+
+ Persistent Quests and Journal Entries
+
+ This is a compact set of scripts (4 public functions, 2 private functions) to help you get
+ a persistent journal and to generally manage quests without much overhead.
+
+ it works like this:
+
+ you prepare your journal in the toolbox, assigning proper tags/ids, then you normally use
+ AddJournalQuestEntry() and RemoveJournalQuestEntry() to manage them via scripting.
+
+ now, you just have to use AddPersistentJournalQuestEntry() and RemovePersistentJournalQuestEntry()
+ with exact the same parameters (bAllPlayer, bAllPartyMembers and bAllowOverrideHigher still work like
+ in the original bioware functions). this means no restrictions, it's fully transparent.
+
+ now add the following line of code to your Module OnClientEnter script (don't forget to include this script):
+ RebuildJournalQuestEntries(GetEnteringObject());
+
+ that's all, now you have a persistent journal... you can basically use CTRL-R to find/replace the
+ original functions with the persistent ones and add the OnClientEnter code.
+
+ furthermore, you can use RetrieveQuestState() to get the current state of a
+ quest for the specified player/quest-tag. this means you can manage your conversations with
+ this function and control quest-flow. you won't need to store additional LocalInts somewhere, just
+ use the DB information.
+
+ technical blabla:
+
+ minimized DB usage: stores all quest states in a single string
+
+ i'm using a combo of tokenized + padded string to get maximum parsing efficiency.
+ tokenized: i can find & change a single quest entry with only a few string commands
+ padded: i can browse through a large string (100+ quest entries) with minimal need of string manipulation
+ so this won't slow down your server during journal rebuilds even with tons of quests
+
+ this is beta code and pretty much un-optimized ..still needs some bug hunting
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Knat
+//:: Created On: 19.06.2003
+//:://////////////////////////////////////////////
+
+// database filename
+const string PQJ_DATABASE = "JOURNALS";
+// database fieldname
+const string PQJ_PLAYER_VARNAME = "QUESTJOURNAL";
+
+//
+//void main (){}
+//
+//
+// transparent wrapper to AddJournalQuestEntry
+// use this function instead of the original one to store quest/journal data
+// persistently using the bio DB. all function parameters work similar to the original function
+//
+// Add a journal quest entry to oCreature.
+// - szPlotID: the plot identifier used in the toolset's Journal Editor
+// - nState: the state of the plot as seen in the toolset's Journal Editor
+// - oCreature
+// - bAllPartyMembers: If this is TRUE, the entry will show up in the journal of
+// everyone in the party
+// - bAllPlayers: If this is TRUE, the entry will show up in the journal of
+// everyone in the world
+// - bAllowOverrideHigher: If this is TRUE, you can set the state to a lower
+// number than the one it is currently on
+void AddPersistentJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE);
+
+// transparent wrapper to RemoveJournalQuestEntry()
+// use this function instead of the original one to remove quest/journal data
+// persistently using the bio DB. all function parameters work similar to the original function
+//
+// Remove a journal quest entry from oCreature.
+// - szPlotID: the plot identifier used in the toolset's Journal Editor
+// - oCreature
+// - bAllPartyMembers: If this is TRUE, the entry will be removed from the
+// journal of everyone in the party
+// - bAllPlayers: If this is TRUE, the entry will be removed from the journal of
+// everyone in the world
+void RemovePersistentJournalQuestEntry(string szPlotID, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE);
+
+// use this function to rebuild the journal on oCreature using the bio DB
+// a good place is the Module OnClientEnter() event
+void RebuildJournalQuestEntries(object oCreature);
+
+// retrieve persistent quest state from the DB
+// - szPlotID: the plot identifier used in the toolset's Journal Editor
+int RetrieveQuestState(string szPlotID, object oCreature);
+
+// -----------------------------------------------------------------------------
+
+void RebuildJournalQuestEntries(object oCreature)
+{
+ if(GetIsPC(oCreature))
+ {
+ string sEntries = GetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,oCreature);
+ int i, nCount = GetStringLength(sEntries) / 44;
+
+ string sQuest;
+ for(i=0;i < nCount;i++)
+ {
+ // get quest
+ sQuest = GetSubString(sEntries,(i*44),32);
+ // remove padding
+ sQuest = GetStringLeft(sQuest, FindSubString(sQuest, " "));
+ // add journal entry
+ AddJournalQuestEntry(sQuest, StringToInt(GetSubString(sEntries,(i*44) + 33,8)), oCreature, FALSE, FALSE, TRUE);
+ }
+ }
+}
+
+int RetrieveQuestState(string szPlotID, object oCreature)
+{
+ // retrieve all quest entries
+ string sEntries = GetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,oCreature);
+ // get quest we search for and add padding
+ string sQuest = (GetStringLength(szPlotID) < 32) ? szPlotID + GetStringLeft(" ",32 - GetStringLength(szPlotID)) : GetStringLeft(szPlotID,32);
+
+ // find target quest
+ int nPos = FindSubString(sEntries, sQuest + ">");
+
+ if( nPos != -1) // success ?? get & return value
+ return StringToInt(GetStringLeft(GetStringRight(sEntries,GetStringLength(sEntries)-nPos-GetStringLength(sQuest)-1),10));
+
+ // quest not started yet
+ return 0;
+}
+
+void StoreQuestEntry(string szPlotID, int nState, object oCreature, int bAllowOverrideHigher=FALSE)
+{
+ // retrieve all quest entries
+ string sEntries = GetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,oCreature);
+
+ // pad quest
+ string sQuest = (GetStringLength(szPlotID) < 32) ? szPlotID + GetStringLeft(" ",32 - GetStringLength(szPlotID)) : GetStringLeft(szPlotID,32);
+ // pad state
+ string sState = IntToString(nState);
+ sState = (GetStringLength(sState) < 10) ? sState + GetStringLeft(" ",10 - GetStringLength(sState)) : GetStringLeft(sState,10);
+
+ // find target quest
+ int nPos = FindSubString(sEntries, sQuest + ">");
+
+ if( nPos != -1) // success ?
+ {
+
+ // check for override flag
+ if(!bAllowOverrideHigher) // new state < old state ? return
+ if(nState < StringToInt(GetStringRight(sEntries,GetStringLength(sEntries)-nPos-GetStringLength(sQuest)-1)))
+ return;
+
+ // replace old quest state with new one
+ string sL = GetStringLeft(sEntries, nPos + GetStringLength(sQuest) + 1);
+ sEntries = sL + sState + GetStringRight(sEntries, GetStringLength(sEntries) - GetStringLength(sL) - 10);
+ }
+ else // add quest
+ sEntries += sQuest + ">" + sState + "|";
+
+ // store quest entries
+ SetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,sEntries,oCreature);
+}
+
+void DeleteQuestEntry(string szPlotID, object oCreature)
+{
+ // retrieve all quest entries
+ string sEntries = GetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,oCreature);
+ // pad quest
+ string sQuest = (GetStringLength(szPlotID) < 32) ? szPlotID + GetStringLeft(" ",32 - GetStringLength(szPlotID)) : GetStringLeft(szPlotID,32);
+ // find target quest
+ int nPos = FindSubString(sEntries, sQuest + ">");
+
+ if( nPos != -1) // success ?
+ {
+
+ // replace old quest state with new one
+ string sL = GetStringLeft(sEntries, nPos);
+ sEntries = sL + GetStringRight(sEntries, GetStringLength(sEntries) - GetStringLength(sL) - 44);
+
+ // store quest entries
+ SetCampaignString(PQJ_DATABASE,PQJ_PLAYER_VARNAME,sEntries,oCreature);
+ }
+
+}
+
+void RemovePersistentJournalQuestEntry(string szPlotID, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE)
+{
+ RemoveJournalQuestEntry(szPlotID, oCreature, bAllPartyMembers, bAllPlayers);
+ // store data
+ if(bAllPlayers)
+ {
+ // all players
+ object oPC = GetFirstPC();
+ while(GetIsObjectValid(oPC))
+ {
+ if(GetIsPC(oPC)) DeleteQuestEntry(szPlotID, oPC);
+ oPC = GetNextPC();
+ }
+ }
+ else if(bAllPartyMembers)
+ {
+ // whole group
+ object oPartyMember = GetFirstFactionMember(oCreature, TRUE);
+ while (GetIsObjectValid(oPartyMember))
+ {
+ DeleteQuestEntry(szPlotID, oPartyMember);
+ oPartyMember = GetNextFactionMember(oCreature, TRUE);
+ }
+ }
+ else
+ {
+ // player only
+ DeleteQuestEntry(szPlotID, oCreature);
+ }
+}
+
+void AddPersistentJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE)
+{
+ AddJournalQuestEntry(szPlotID, nState, oCreature, bAllPartyMembers, bAllPlayers, bAllowOverrideHigher);
+ // store data
+ if(bAllPlayers)
+ {
+ // all players
+ object oPC = GetFirstPC();
+ while(GetIsObjectValid(oPC))
+ {
+ if(GetIsPC(oPC)) StoreQuestEntry(szPlotID, nState, oPC, bAllowOverrideHigher);
+ oPC = GetNextPC();
+ }
+ }
+ else if(bAllPartyMembers)
+ {
+ //SendMessageToPC(oCreature, "PARTY");
+ object oPartyMember = GetFirstFactionMember(oCreature, TRUE);
+ while (GetIsObjectValid(oPartyMember))
+ {
+ StoreQuestEntry(szPlotID, nState, oPartyMember, bAllowOverrideHigher);
+ oPartyMember = GetNextFactionMember(oCreature, TRUE);
+ }
+ }
+ else
+ {
+ StoreQuestEntry(szPlotID, nState, oCreature, bAllowOverrideHigher);
+ }
+}
diff --git a/_module/nss/prc_pwonspawn.nss b/_module/nss/prc_pwonspawn.nss
index 27a22b6e..74e10b7f 100644
--- a/_module/nss/prc_pwonspawn.nss
+++ b/_module/nss/prc_pwonspawn.nss
@@ -10,6 +10,9 @@
#include "nw_i0_plot"
#include "rd_level"
#include "inc_sqlite_time"
+#include "inc_debug"
+#include "prc_inc_racial"
+#include "sd_lootsystem"
void ReallyEquipItemInSlot(object oNPC, object oItem, int nSlot);
@@ -31,6 +34,7 @@ void main()
int nTotalPCs;
int nTotalPCLevel;
int nAveragePCLevel;
+ int iRacial = GetRacialType(OBJECT_SELF);
int nCommoner = GetLevelByClass(CLASS_TYPE_COMMONER, OBJECT_SELF);
string sCurrentDate = SQLite_GetSystemDate();
@@ -39,7 +43,22 @@ void main()
object oArea = GetArea(OBJECT_SELF);
object oSkelly;
object oPC = GetFirstObjectInArea(oArea);
-
+
+//:: Testing OnSpawn loot system.
+ if (iRacial == RACIAL_TYPE_ANIMAL ||
+ iRacial == RACIAL_TYPE_BEAST ||
+ iRacial == RACIAL_TYPE_CONSTRUCT ||
+ iRacial == RACIAL_TYPE_OOZE ||
+ iRacial == RACIAL_TYPE_PLANT ||
+ iRacial == RACIAL_TYPE_VERMIN)
+ {
+ if(DEBUG) {FloatingTextStringOnCreature("Creature doesn't carry treasure", GetFirstPC(), FALSE);}
+ }
+ else
+ {
+ sd_droploot(OBJECT_SELF, OBJECT_SELF);
+ }
+
//:: Get average PC level for area
//:: Cycle through PCs in Area
diff --git a/_module/nss/sd_area_purge.nss b/_module/nss/sd_area_purge.nss
new file mode 100644
index 00000000..8e822eb5
--- /dev/null
+++ b/_module/nss/sd_area_purge.nss
@@ -0,0 +1,10 @@
+#include "sd_reset_inc"
+
+void main()
+{
+ object oPC = GetExitingObject();
+ if (!(GetIsPC(oPC)))return;
+
+ AREA_CLEAR(oPC);
+
+}
diff --git a/_module/nss/sd_chest_lever.nss b/_module/nss/sd_chest_lever.nss
new file mode 100644
index 00000000..57f0488d
--- /dev/null
+++ b/_module/nss/sd_chest_lever.nss
@@ -0,0 +1,100 @@
+void SD_NAMECHEST(object oChest, string sChestRange)
+{
+ SetName(oChest, sChestRange);
+}
+
+void SPAWN_CHESTS(int iLevel)
+{
+
+object oMod = GetModule();
+object oPC = GetFirstPC();
+
+int iWC = iLevel+0;
+int iSC = iLevel+5;
+int iAC = iLevel+10;
+int iMC = iLevel+15;
+int iGC = iLevel+20;
+int iGM = iLevel+25;
+
+string sLevel = IntToString(iLevel);
+
+
+string sWLev = IntToString(iWC);
+string sSLev = IntToString(iSC);
+string sALev = IntToString(iAC);
+string sMLev = IntToString(iMC);
+string sGLev = IntToString(iGC);
+string sGMLev = IntToString(iGM);
+
+
+object oWP1 = GetWaypointByTag("sd_weap");
+object oWP2 = GetWaypointByTag("sd_shield");
+object oWP3 = GetWaypointByTag("sd_arm");
+object oWP4 = GetWaypointByTag("sd_magi");
+object oWP5 = GetWaypointByTag("sd_gloves");
+object oWP6 = GetWaypointByTag("sd_gems");
+
+effect eDiss = EffectVisualEffect(VFX_FNF_DISPEL_GREATER);
+effect eApp = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+
+object oCH1 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP1), FALSE, sWLev);
+DelayCommand(0.1, SD_NAMECHEST(oCH1, "Weapon Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH1));
+object oCH2 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP2), FALSE, sSLev);
+DelayCommand(0.1, SD_NAMECHEST(oCH2, "Shield Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH2));
+object oCH3 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP3), FALSE, sALev);
+DelayCommand(0.1, SD_NAMECHEST(oCH3, "Armor Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH3));
+object oCH4 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP4), FALSE, sMLev);
+DelayCommand(0.1, SD_NAMECHEST(oCH4, "Mag Item Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH4));
+object oCH5 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP5), FALSE, sGLev);
+DelayCommand(0.1, SD_NAMECHEST(oCH5, "Monk Gloves Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH5));
+object oCH6 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP6), FALSE, sGMLev);
+DelayCommand(0.1, SD_NAMECHEST(oCH6, "Gem Chest: Range "+sLevel));
+DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eApp, oCH6));
+}
+
+void main()
+{
+ object oMod = GetModule();
+ object oPC = GetFirstPC();
+ int iLevel = GetLocalInt(oMod, "range");
+
+ ++iLevel;
+
+ if (iLevel>=6)iLevel=1;
+
+ SetLocalInt(oMod, "range", iLevel);
+
+
+ effect eDiss = EffectVisualEffect(VFX_FNF_DISPEL_GREATER);
+ effect eApp = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+
+ int iSafe = GetLocalInt(OBJECT_SELF, "switched");
+ if (iSafe==1){FloatingTextStringOnCreature("You must wait 5 seconds", oPC);return;}
+
+ AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
+ AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
+
+ SetLocalInt(OBJECT_SELF, "switched", 1);
+ DelayCommand(6.0, SetLocalInt(OBJECT_SELF, "switched", 0));
+
+ object oArea = GetArea(OBJECT_SELF);
+ object oItem = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oItem))
+ {
+ if (GetObjectType(oItem)==OBJECT_TYPE_PLACEABLE &&
+ GetHasInventory(oItem) && GetName(oItem)!="Socketed Items")
+ {
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eDiss, oItem);
+ DestroyObject(oItem, 0.2f);
+ }
+ oItem = GetNextObjectInArea(oArea);
+ }
+
+
+DelayCommand(4.0, SPAWN_CHESTS(iLevel));
+}
diff --git a/_module/nss/sd_chest_loot.nss b/_module/nss/sd_chest_loot.nss
new file mode 100644
index 00000000..f264ad7f
--- /dev/null
+++ b/_module/nss/sd_chest_loot.nss
@@ -0,0 +1,62 @@
+#include "sd_lootsystem"
+
+void main()
+{
+ object oPC = GetLastOpenedBy();
+ string sTag = GetTag(OBJECT_SELF);
+ int iLoot = StringToInt(sTag);
+
+ switch (iLoot)
+ {
+ case 1: DropWeapon(oPC, OBJECT_SELF, 1, 0, 1); break;
+ case 2: DropWeapon(oPC, OBJECT_SELF, 2, 0, 1); break;
+ case 3: DropWeapon(oPC, OBJECT_SELF, 3, 0, 1); break;
+ case 4: DropWeapon(oPC, OBJECT_SELF, 4, 0, 1); break;
+ case 5: DropWeapon(oPC, OBJECT_SELF, 5, 0, 1); break;
+
+ case 6: DropShield(oPC, OBJECT_SELF, 1, 0, 1); break;
+ case 7: DropShield(oPC, OBJECT_SELF, 2, 0, 1); break;
+ case 8: DropShield(oPC, OBJECT_SELF, 3, 0, 1); break;
+ case 9: DropShield(oPC, OBJECT_SELF, 4, 0, 1); break;
+ case 10: DropShield(oPC, OBJECT_SELF, 5, 0, 1); break;
+
+ case 11: DropArmor(oPC, OBJECT_SELF, 1, 0, 1); break;
+ case 12: DropArmor(oPC, OBJECT_SELF, 2, 0, 1); break;
+ case 13: DropArmor(oPC, OBJECT_SELF, 3, 0, 1); break;
+ case 14: DropArmor(oPC, OBJECT_SELF, 4, 0, 1); break;
+ case 15: DropArmor(oPC, OBJECT_SELF, 5, 0, 1); break;
+
+ case 16: DropMagicItem(oPC, OBJECT_SELF, 1, 0, 1); break;
+ case 17: DropMagicItem(oPC, OBJECT_SELF, 2, 0, 1); break;
+ case 18: DropMagicItem(oPC, OBJECT_SELF, 3, 0, 1); break;
+ case 19: DropMagicItem(oPC, OBJECT_SELF, 4, 0, 1); break;
+ case 20: DropMagicItem(oPC, OBJECT_SELF, 5, 0, 1); break;
+
+ case 21: DropMonkGloves(oPC, OBJECT_SELF, 1, 0, 1); break;
+ case 22: DropMonkGloves(oPC, OBJECT_SELF, 2, 0, 1); break;
+ case 23: DropMonkGloves(oPC, OBJECT_SELF, 3, 0, 1); break;
+ case 24: DropMonkGloves(oPC, OBJECT_SELF, 4, 0, 1); break;
+ case 25: DropMonkGloves(oPC, OBJECT_SELF, 5, 0, 1); break;
+
+ case 26: DropGem(oPC, OBJECT_SELF, 1); break;
+ case 27: DropGem(oPC, OBJECT_SELF, 2); break;
+ case 28: DropGem(oPC, OBJECT_SELF, 3); break;
+ case 29: DropGem(oPC, OBJECT_SELF, 4); break;
+ case 30: DropGem(oPC, OBJECT_SELF, 5); break;
+
+ case 31: {
+ DropWeapon(oPC, OBJECT_SELF, 1, 100, 1);
+ DropShield(oPC, OBJECT_SELF, 1, 100, 1);
+ DropArmor(oPC, OBJECT_SELF, 1, 100, 1);
+ DropMagicItem(oPC, OBJECT_SELF, 1, 100, 1);
+ DropMonkGloves(oPC, OBJECT_SELF, 1, 100, 1);}break;
+ }
+
+object oItem = GetFirstItemInInventory(OBJECT_SELF);
+while (GetIsObjectValid(oItem))
+ {
+ if (GetIdentified(oItem)==FALSE)SetIdentified(oItem, TRUE);
+ oItem = GetNextItemInInventory(OBJECT_SELF);
+ }
+
+}
diff --git a/_module/nss/sd_chestspwn_ent.nss b/_module/nss/sd_chestspwn_ent.nss
new file mode 100644
index 00000000..ff56ebdf
--- /dev/null
+++ b/_module/nss/sd_chestspwn_ent.nss
@@ -0,0 +1,56 @@
+void SD_NAMECHEST(object oChest, string sChestRange)
+{
+ SetName(oChest, sChestRange);
+}
+
+void main()
+{
+
+object oMod = GetModule();
+object oPC = GetFirstPC();
+object oEnter = GetEnteringObject();
+
+if (oEnter!=oPC)return;
+
+int iLevel = 1;
+
+SetLocalInt(oMod, "range", 1);
+
+string sLevel = IntToString(iLevel);
+
+int iWC = iLevel+0;
+int iSC = iLevel+5;
+int iAC = iLevel+10;
+int iMC = iLevel+15;
+int iGC = iLevel+20;
+int iGM = iLevel+25;
+
+
+string sWLev = IntToString(iWC);
+string sSLev = IntToString(iSC);
+string sALev = IntToString(iAC);
+string sMLev = IntToString(iMC);
+string sGLev = IntToString(iGC);
+string sGMLev = IntToString(iGM);
+
+
+object oWP1 = GetWaypointByTag("sd_weap");
+object oWP2 = GetWaypointByTag("sd_shield");
+object oWP3 = GetWaypointByTag("sd_arm");
+object oWP4 = GetWaypointByTag("sd_magi");
+object oWP5 = GetWaypointByTag("sd_gloves");
+object oWP6 = GetWaypointByTag("sd_gems");
+
+object oCH1 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP1), FALSE, sWLev);
+DelayCommand(0.2, SD_NAMECHEST(oCH1, "Weapon Chest: Range "+sLevel));
+object oCH2 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP2), FALSE, sSLev);
+DelayCommand(0.2, SD_NAMECHEST(oCH2, "Shield Chest: Range "+sLevel));
+object oCH3 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP3), FALSE, sALev);
+DelayCommand(0.2, SD_NAMECHEST(oCH3, "Armor Chest: Range "+sLevel));
+object oCH4 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP4), FALSE, sMLev);
+DelayCommand(0.2, SD_NAMECHEST(oCH4, "Mag Item Chest: Range "+sLevel));
+object oCH5 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP5), FALSE, sGLev);
+DelayCommand(0.2, SD_NAMECHEST(oCH5, "Monk Gloves Chest: Range "+sLevel));
+object oCH6 = CreateObject(OBJECT_TYPE_PLACEABLE, "sd_lootchest", GetLocation(oWP6), FALSE, sGMLev);
+DelayCommand(0.2, SD_NAMECHEST(oCH6, "Gem Chest: Range "+sLevel));
+}
diff --git a/_module/nss/sd_clear_sok_chs.nss b/_module/nss/sd_clear_sok_chs.nss
new file mode 100644
index 00000000..ccf9cb28
--- /dev/null
+++ b/_module/nss/sd_clear_sok_chs.nss
@@ -0,0 +1,10 @@
+void main()
+{
+ object oItem = GetFirstItemInInventory(OBJECT_SELF);
+while (GetIsObjectValid(oItem))
+ {
+ DestroyObject(oItem);
+ oItem = GetNextItemInInventory(OBJECT_SELF);
+ }
+
+}
diff --git a/_module/nss/sd_creature_kill.nss b/_module/nss/sd_creature_kill.nss
new file mode 100644
index 00000000..0e6ad4c7
--- /dev/null
+++ b/_module/nss/sd_creature_kill.nss
@@ -0,0 +1,19 @@
+void main()
+{
+ object oPC = GetLastUsedBy();
+ object oArea = GetArea(oPC);
+ effect eBlood = EffectVisualEffect(VFX_COM_CHUNK_RED_LARGE);
+ effect eDeath = EffectDeath(TRUE, FALSE);
+
+ object oCreature = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oCreature))
+ {
+ if (GetObjectType(oCreature)==OBJECT_TYPE_CREATURE&&
+ GetIsEnemy(oPC, oCreature))
+ {
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eBlood, oCreature);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oCreature);
+ }
+ oCreature = GetNextObjectInArea(oArea);
+ }
+}
diff --git a/_module/nss/sd_destroy_lbag.nss b/_module/nss/sd_destroy_lbag.nss
new file mode 100644
index 00000000..86a35d64
--- /dev/null
+++ b/_module/nss/sd_destroy_lbag.nss
@@ -0,0 +1,39 @@
+#include "prc_inc_racial"
+void main()
+{
+object oPC = GetLastClosedBy();
+object oItem;
+object oCorpse = GetLocalObject(OBJECT_SELF, "oHostBody");
+object oBlood = GetLocalObject(OBJECT_SELF, "oBlood");
+object oBones;
+location lLoc = GetLocation(oCorpse);
+int iCount;
+
+AssignCommand(oPC, ClearAllActions());
+
+oItem = GetFirstItemInInventory(OBJECT_SELF);
+while (GetIsObjectValid(oItem))
+ {
+ ++iCount;
+ oItem = GetNextItemInInventory(OBJECT_SELF);
+ }
+if (iCount==0){
+ AssignCommand(oCorpse, SetIsDestroyable(TRUE, FALSE, FALSE));
+ DestroyObject(oBlood);
+ DestroyObject(oCorpse);
+ if ((MyPRCGetRacialType(oCorpse) != RACIAL_TYPE_CONSTRUCT) &&
+ (MyPRCGetRacialType(oCorpse) != RACIAL_TYPE_ELEMENTAL)&&
+ (MyPRCGetRacialType(oCorpse) != RACIAL_TYPE_DRAGON)&&
+ (MyPRCGetRacialType(oCorpse) != RACIAL_TYPE_ANIMAL))
+
+ {
+ oBones = CreateObject(OBJECT_TYPE_PLACEABLE,
+ "plc_bones",
+ lLoc, FALSE);
+ ExecuteScript("sd_destroyself", oBones);
+ }
+ DestroyObject(OBJECT_SELF, 0.2f);
+ }
+
+
+}
diff --git a/_module/nss/sd_destroyself.nss b/_module/nss/sd_destroyself.nss
new file mode 100644
index 00000000..5ffbea09
--- /dev/null
+++ b/_module/nss/sd_destroyself.nss
@@ -0,0 +1,4 @@
+void main()
+{
+ DelayCommand(30.0, DestroyObject(OBJECT_SELF));
+}
diff --git a/_module/nss/sd_dth.nss b/_module/nss/sd_dth.nss
new file mode 100644
index 00000000..6bb453cd
--- /dev/null
+++ b/_module/nss/sd_dth.nss
@@ -0,0 +1,6 @@
+void main()
+{
+ object oPC = GetLastUsedBy();
+ effect eLos = EffectDeath(TRUE);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eLos, oPC);
+}
diff --git a/_module/nss/sd_loot_anim.nss b/_module/nss/sd_loot_anim.nss
new file mode 100644
index 00000000..1c8d8a99
--- /dev/null
+++ b/_module/nss/sd_loot_anim.nss
@@ -0,0 +1,16 @@
+void main()
+{
+object oPC = GetLastUsedBy();
+
+ // Play crouch animation only if PC just opened the corpse inventory GUI
+ // EXCEPTION: If the PC opens the corpse inventory, then quickly presses
+ // the "I" key (to open the PC inventory), a BioWare software bug will
+ // trick the software into permanently thinking the corpse inventory is
+ // open (even though the GUI can be opened and closed normally). This will
+ // cause the animation to play when corpse is opened or closed (a minor
+ // bug).
+ if (GetIsOpen(OBJECT_SELF))
+ {
+ AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0f, 1.2f));
+ }
+}
diff --git a/_module/nss/sd_loot_corpse.nss b/_module/nss/sd_loot_corpse.nss
new file mode 100644
index 00000000..e7a57bf6
--- /dev/null
+++ b/_module/nss/sd_loot_corpse.nss
@@ -0,0 +1,56 @@
+#include "sd_lootsystem"
+#include "prc_inc_racial"
+void BodyFade(object oHostBody, object oBlood)
+{
+ object oBones;
+ location lLoc = GetLocation(oHostBody);
+ SetPlotFlag(oHostBody, FALSE);
+ AssignCommand(oHostBody, SetIsDestroyable(TRUE,FALSE,FALSE));
+ if ((MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_CONSTRUCT) &&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_ELEMENTAL)&&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_DRAGON)&&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_ANIMAL))
+
+ {
+
+ }
+ DestroyObject(oBlood);
+ if (GetIsDead(oHostBody))DestroyObject(oHostBody, 0.2f);
+ }
+
+void main()
+{
+ float lsDelay = 60.0; // Corpse & loot fade delay
+ object oHostBody = OBJECT_SELF; //Get the Dead Creature Object
+ object oBlood;
+ object oSaveBlood;
+ string sBaseTag = GetTag(oHostBody); //Get that TAG of the dead creature
+ string sPrefix = GetStringLeft(sBaseTag, 4); //Look for Dead Prefix
+ location lLoc = GetLocation(oHostBody);
+
+ if ((MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_UNDEAD) &&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_CONSTRUCT) &&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_ELEMENTAL)&&
+ (MyPRCGetRacialType(oHostBody) != RACIAL_TYPE_DRAGON))
+ {
+ oBlood = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_bloodstain", lLoc, FALSE);
+ }
+ DelayCommand(lsDelay, BodyFade(oHostBody, oBlood));
+
+
+ //Sink the lootbag into the ground a little
+ float fSinkCorpseObj = 0.1f; //depth
+ vector vHostBodyLoc = GetPosition(oHostBody);
+ float fCorpseFacing = GetFacing(oHostBody);
+ vector vCorpseLoc = Vector(vHostBodyLoc.x, vHostBodyLoc.y, vHostBodyLoc.z - fSinkCorpseObj);
+ location lCorpseLoc = Location(GetArea(oHostBody), vCorpseLoc, fCorpseFacing);
+
+ //Create the lootbag
+ object oLootCorpse = CreateObject(OBJECT_TYPE_PLACEABLE, "rr_sack", lCorpseLoc, FALSE); //Spawn our lootable object
+
+ SetLocalObject(oLootCorpse, "oHostBody", oHostBody); //Set Local for deletion later if needed
+ SetLocalObject(oLootCorpse, "oBlood", oBlood);
+ NameSack(oLootCorpse);
+ DelayCommand(0.1,sd_droploot(oHostBody, oLootCorpse));
+ DelayCommand(lsDelay, LootClear(oLootCorpse));
+}
diff --git a/_module/nss/sd_lootsys_tools.nss b/_module/nss/sd_lootsys_tools.nss
index 599132b0..d4ebcf50 100644
--- a/_module/nss/sd_lootsys_tools.nss
+++ b/_module/nss/sd_lootsys_tools.nss
@@ -1,4 +1,4 @@
-#include "x2_inc_itemprop"
+#include "prc_x2_itemprop"
//#include "nw_i0_generic"
//////////////////////////////////////////////////////////
@@ -84,7 +84,7 @@ void DropScroll(object oMob, object oSack, int iRange);
// oMob = the creature that just died
// oSack = the object into which you will spawn the potion
// iStack = Stacksize
-void DropPot(object oMob, object oSack, int iStack);
+void DropPotion(object oMob, object oSack, int iStack);
// Generates a random misc item (i.e. bag)
// =======================================
@@ -122,7 +122,11 @@ void sd_droploot (object oMob, object oSack);
void DropAlchemyRecipe(object oMob, object oSack, int iRange);
-
+void SetEyes(int iType, object oMob)
+{
+ effect eVis = EffectVisualEffect(iType);
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oMob);
+}
const string COLORTOKEN =" ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¡¢£¤¥¦§¨©ª«¬¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþþ";
@@ -652,7 +656,7 @@ object oRecipe = CreateItemOnObject(sType, oSack, 1);
SetIdentified(oRecipe, FALSE);
}
-void DropPot(object oMod, object oSack, int iStack)
+void DropPotion(object oMod, object oSack, int iStack)
{
string sPotion;
@@ -1401,7 +1405,7 @@ void MeleeImbue(object oItem)
IPSafeAddItemProperty(oItem, ipAdd);
}
-void MCimbue(object oItem, int iRange)
+void MassCritImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iDam;
@@ -1523,7 +1527,7 @@ int sd_GetAbil()
return iType;
}
-void DAMimbue(object oItem, int iRange)
+void DamageTypeImbue(object oItem, int iRange)
{
itemproperty ipAdd;
itemproperty ipVis;
@@ -1893,7 +1897,7 @@ ipAdd = ItemPropertyRegeneration(iRegen);
IPSafeAddItemProperty(oItem, ipAdd);
}
-void VRimbue(object oItem, int iRange)
+void VampRegenImbue(object oItem, int iRange)
{
int iRegen;
itemproperty ipAdd;
diff --git a/_module/nss/sd_lootsystem.nss b/_module/nss/sd_lootsystem.nss
new file mode 100644
index 00000000..7b522a75
--- /dev/null
+++ b/_module/nss/sd_lootsystem.nss
@@ -0,0 +1,7202 @@
+//////////////////////////////////////////////////////////
+//::use: #include"sd_lootsystem"
+//::
+//::
+//:: Slayers of Darkmoon loot generation system
+//::
+//::
+//::
+//:: Commche 2006
+//::
+
+#include "prc_x2_itemprop"
+#include "prc_inc_newip"
+#include "nw_i0_generic"
+#include "inc_itm_appear"
+#include "inc_epicspells"
+
+
+//////////////////////////////////////////////////////////
+//: Constants
+//:
+//:note* See line 4408(?) for specific item droprate configuration
+
+const int LUCK_CHANCE = 5000; // 1 in x chance getting a much better item (0 for off)
+const int DROP_RATE = 1; // % modifyer for loot drop (see line 4619 for specifics)
+const int CHANCE_WORN = 0; // % chance of worn item (0 for off)
+const int CHANCE_BROKEN = 0; // % chance of broken item (0 for off)
+
+int iRandomShoulder = Random(24),
+ iRandomBicep = Random(15),
+ iRandomForearm = Random(23),
+ iRandomHand = Random(9),
+ iRandomThigh = Random(16),
+ iRandomShins = Random(21),
+ iRandomFeet = Random(16),
+ iRandomRobe = Random(11),
+ iRandomPelvis = Random(37),
+ iRandomBelt = Random(16),
+ iRandomNeck = Random(6),
+ iRandomChest = Random(61);
+
+
+ int iRandomArmor1 = Random(175),
+ iRandomArmor2 = Random(175),
+ iRandomArmor3 = Random(175),
+ iRandomArmor4 = Random(175),
+ iRandomArmor5 = Random(175),
+ iRandomArmor6 = Random(175);
+
+int iRandomWeapon1 = d4(),
+ iRandomWeapon2 = d4(),
+ iRandomWeapon3 = d4();
+
+int iRandomCloak = Random(16),
+ iRandomHelmet = Random(124);
+
+int iRandRing = Random(238),
+ iRandBelt = Random(255),
+ iRandAmulet = Random(255),
+ iRandBracer = Random(178),
+ iRandGauntlet = Random(199);
+
+
+//------------------------------------------------------------------------------
+// Returns TRUE if oItem is a bludgeoning weapon
+//------------------------------------------------------------------------------
+int PRCGetBludgeoningWeapon(object oItem)
+{
+ int nItem = GetBaseItemType(oItem);
+ //exclude creature weapons
+ if(nItem == BASE_ITEM_CBLUDGWEAPON)
+ return FALSE;
+ int nWeapon = (StringToInt(Get2DACache("baseitems", "WeaponType", nItem)));
+ // 2 = bludgeoning, 5 = bludgeoning/piercing
+ return (nWeapon == 2 || nWeapon == 5);
+}
+
+
+// Generates a random weapon
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the weapon
+// iRange = the quality of the weapon: 1=lowest 5=highest
+// SockChance = a % chance for the generated weapon to be socketed
+// DamBroke = a switch to disable chance of damaged/broken weapon: 0=on 1=off
+void DropWeapon(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
+
+// Generates random chest armor
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the armor
+// iRange = the quality of the armor: 1=lowest 5=highest
+// SockChance = a % chance for the generated armor to be socketed
+// DamBroke = a switch to disable chance of damaged/broken armor: 0=on 1=off
+void DropArmor(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
+
+// Generates a random shield
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the shield
+// iRange = the quality of the shield: 1=lowest 5=highest
+// SockChance = a % chance for the generated shield to be socketed
+// DamBroke = a switch to disable chance of damaged/broken shield: 0=on 1=off
+void DropShield(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
+
+// Generates random monk gloves
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the gloves
+// iRange = the quality of the gloves: 1=lowest 5=highest
+// SockChance = a % chance for the generated gloves to be socketed
+// DamBroke = a switch to disable chance of damaged/broken gloves: 0=on 1=off
+void DropMonkGloves(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
+
+// Generates a random magic item (i.e. boots, helm, amulet, ring, belt, bracer)
+// ============================================================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the item
+// iRange = the quality of the item: 1=lowest 5=highest
+// SockChance = a % chance for the generated item to be socketed
+// DamBroke = a switch to disable chance of damaged/broken item: 0=on 1=off
+void DropMagicItem(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
+
+// Generates a random socket gem
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the gem
+// iRange = the quality of the gem: 1=lowest 5=highest
+void DropGem (object oMob, object oSack, int iRange);
+
+// Generates random ranged ammo (only arrows & bolts)
+// ==================================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the ammo
+// iRange = the quality of the ammo: 1=lowest 5=highest
+void DropAmmo(object oMob, object oSack, int iRange);
+
+// Generates a random scroll
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the scroll
+// iRange = the quality of the scroll: 1=lowest 5=highest
+// note* this is based on the gold-value of the scroll
+void DropScroll(object oMob, object oSack, int iRange);
+
+// Generates a random potion
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the potion
+void DropPotion(object oMob, object oSack);
+
+// Generates a random misc item (i.e. bag)
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the misc
+void DropMisc(object oMob, object oSack);
+
+// Generates a random rod or wand
+// =======================================
+// oMob = the creature that just died
+// oSack = the object into which you will spawn the rod or wand
+void DropRodWand(object oMob, object oSack);
+
+// Generates random gold
+// ==================================================
+// oMob = the creature that just died
+// note* the gold amount will be based on the creature's level using the below formula
+// Gold = (d20()*Creature LVL)+(15*Creature LVL)+iBonus
+// oSack = the object into which you will spawn the ammo
+// iBonus = additional gold to be added to the tally
+void DropGold(object oMob, object oSack, int iBonus);
+
+// Drop randomly chosen and generated loot & some gold
+// ===================================================
+// *This is the main call function of the sd lootsystem
+// oMob = the creature that just died (the loot dropped is based on their class & level)
+// oSack = the object into which you will spawn the loot
+void sd_droploot (object oMob, object oSack);
+
+// Drop randomly chosen class set item piece
+// ===================================================
+// *you can control what class type of set item will drop
+// oMob = the creature that just died (the loot dropped is based on their class & level)
+// oSack = the object into which you will spawn the loot
+// iClass = the pereferred class of the drop
+// eg:
+// (1 - Fighter (2 - wiz (3 - sorc (4 - rogue/dex fighter (5 -cleric (6 - bard
+// (7 - pally (8 - druid (9 - ranger (10 - monk (11 - barb (12 - weapon sets
+// Default is 0: this will instead choose randomly from every item regardless
+// of class
+void DropSetItem(object oMob, object oSack, int iClass = 0);
+
+// CHEST CLEARER
+void ClearChest (object oMob)
+{
+ //:: Clears all inventory items from the mob, then destroys the mob object itself.
+ object oItem = GetFirstItemInInventory(oMob);
+
+ while (GetIsObjectValid(oItem))
+ {
+ DestroyObject(oItem);
+ oItem = GetNextItemInInventory(oMob);
+ }
+}
+
+const string COLORTOKEN =" ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¡¢£¤¥¦§¨©ª«¬¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþþ";
+
+string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255)
+{
+ return "" + sText + "";
+}
+
+void SetThreatLevel(object oMob)
+{
+ int iHD = GetHitDice(OBJECT_SELF);
+ int iRange;
+ string sName;
+ string cName = GetName(oMob);
+
+ if (iHD>0&&iHD<11) iRange=1; // lvl 1-10
+ if (iHD>10&&iHD<19) iRange=2; // lvl 11-18
+ if (iHD>18&&iHD<28) iRange=3; // lvl 19-27
+ if (iHD>27&&iHD<36) iRange=4; // lvl 28-35
+ if (iHD>35/* &&iHD<61 */) iRange=5; // lvl 36+
+
+ switch(iRange)
+ {
+ case 1: sName = ColorString(cName,255, 255, 255); break;
+ case 2: sName = ColorString(cName,189, 183, 107); break;
+ case 3: sName = ColorString(cName,218, 165, 32); break;
+ case 4: sName = ColorString(cName,210, 105, 30); break;
+ case 5: sName = ColorString(cName,255, 0, 0); break;
+
+ }
+
+ if (GetLocalInt(OBJECT_SELF, "BOSS")==1)sName = ColorString(cName,255, 255, 0);
+ SetName(oMob, sName);
+}
+
+void NameSack(object oSack)
+{
+ string sName = GetName(OBJECT_SELF);
+ sName+= " Corpse";
+ SetName(oSack, sName);
+}
+
+void InvClear (object oMob)
+{
+ object oItem = GetFirstItemInInventory(oMob);
+
+ while (GetIsObjectValid(oItem))
+ {
+ if (GetPlotFlag(oItem) == FALSE)
+ {
+ DestroyObject(oItem);
+ }
+
+ oItem = GetNextItemInInventory(oMob);
+ }
+}
+
+void LootClear (object oMob)
+{
+ object oItem = GetFirstItemInInventory(oMob);
+
+ while (GetIsObjectValid(oItem))
+ {
+ DestroyObject(oItem);
+ oItem = GetNextItemInInventory(oMob);
+ }
+
+ DestroyObject(oMob);
+}
+
+void DropAlchemy(object oMob, object oSack, int iRange)
+{
+ string sAlchemical;
+ int nRandom = Random(16) + 1;
+ int iRoll;
+
+ if (iRange==1)
+ {//:: Alchemical items
+ iRoll = Random(21);
+ switch (iRoll)
+ {
+ case 0: sAlchemical = "prc_brittlebn"; break;
+ case 1: sAlchemical = "x1_wmgrenade001"; break;
+ case 2: sAlchemical = "x1_wmgrenade002"; break;
+ case 3: sAlchemical = "x1_wmgrenade003"; break;
+ case 4: sAlchemical = "x1_wmgrenade004"; break;
+ case 5: sAlchemical = "x1_wmgrenade005"; break;
+ case 6: sAlchemical = "x1_wmgrenade006"; break;
+ case 7: sAlchemical = "x1_wmgrenade007"; break;
+ case 8: sAlchemical = "prc_it_antitox"; break;
+ case 9: sAlchemical = "prc_it_blendcrm"; break;
+ case 10: sAlchemical = "prc_it_crcklpdr"; break;
+ case 11: sAlchemical = "prc_it_emblmfr"; break;
+ case 12: sAlchemical = "prc_it_fareyeoil"; break;
+ case 13: sAlchemical = "prc_it_healblm"; break;
+ case 14: sAlchemical = "prc_it_keenear"; break;
+ case 15: sAlchemical = "prc_it_lockslip"; break;
+ case 16: sAlchemical = "prc_it_nerv"; break;
+ case 17: sAlchemical = "prc_it_scrmflsk"; break;
+ case 18: sAlchemical = "prc_it_shedden"; break;
+ case 19: sAlchemical = "prc_it_shedden2"; break;
+ case 20: sAlchemical = "prc_it_softfoot"; break;
+ }
+ }
+ if (iRange >= 2)
+ {//:: Alchemical Items
+ iRoll = Random(27);
+ switch (iRoll)
+ {
+ case 0: sAlchemical = "x1_wmgrenade006"; break;
+ case 1: sAlchemical = "x2_it_acidbomb"; break;
+ case 2: sAlchemical = "x2_it_firebomb"; break;
+ case 3: sAlchemical = "prc_it_shedden3"; break;
+ case 4: sAlchemical = "prc_it_shedden4"; break;
+ case 5: sAlchemical = "prc_it_shedden5"; break;
+ case 6: sAlchemical = "nw_it_medkit004"; break;
+ case 7: sAlchemical = "x1_wmgrenade007"; break;
+ case 8: sAlchemical = "prc_it_antitox"; break;
+ case 9: sAlchemical = "prc_it_blendcrm"; break;
+ case 10: sAlchemical = "prc_it_crcklpdr"; break;
+ case 11: sAlchemical = "prc_it_emblmfr"; break;
+ case 12: sAlchemical = "prc_it_fareyeoil"; break;
+ case 13: sAlchemical = "prc_it_healblm"; break;
+ case 14: sAlchemical = "prc_it_keenear"; break;
+ case 15: sAlchemical = "prc_it_lockslip"; break;
+ case 16: sAlchemical = "prc_it_nerv"; break;
+ case 17: sAlchemical = "prc_it_scrmflsk"; break;
+ case 18: sAlchemical = "prc_it_shedden"; break;
+ case 19: sAlchemical = "prc_it_shedden2"; break;
+ case 20: sAlchemical = "prc_it_softfoot"; break;
+ case 21: sAlchemical = "prc_brittlebn"; break;
+ case 22: sAlchemical = "x1_wmgrenade001"; break;
+ case 23: sAlchemical = "x1_wmgrenade002"; break;
+ case 24: sAlchemical = "x1_wmgrenade003"; break;
+ case 25: sAlchemical = "x1_wmgrenade004"; break;
+ case 26: sAlchemical = "x1_wmgrenade005"; break;
+
+ }
+ }
+
+ object oAlchemy = CreateItemOnObject(sAlchemical, oSack, 1);
+
+ SetIdentified(oAlchemy, FALSE);
+}
+
+void DropScroll(object oMob, object oSack, int iRange)
+{
+ string sType;
+ int nRandom = Random(16) + 1;
+ int iRoll;
+
+ if (iRange==1) //:: scrolls up to max value of 300
+ {
+ iRoll = d100();
+ switch (iRoll)
+ {
+ case 1: sType = "x1_it_sparscr002"; break;
+ case 2: sType = "nw_it_sparscr107"; break;
+ case 3: sType = "x1_it_sparscr102"; break;
+ case 4: sType = "x1_it_spdvscr101"; break;
+ case 5: sType = "x2_it_spdvscr202"; break;
+ case 6: sType = "x2_it_spdvscr103"; break;
+ case 7: sType = "x2_it_spdvscr102"; break;
+ case 8: sType = "nw_it_sparscr211"; break;
+ case 9: sType = "x1_it_spdvscr202"; break;
+ case 10: sType = "nw_it_sparscr212"; break;
+ case 11: sType = "nw_it_sparscr112"; break;
+ case 12: sType = "x1_it_spdvscr107"; break;
+ case 13: sType = "nw_it_sparscr213"; break;
+ case 14: sType = "x2_it_sparscr207"; break;
+ case 15: sType = "nw_it_sparscr107"; break;
+ case 16: sType = "nw_it_spdvscr202"; break;
+ case 17: sType = "nw_it_sparscr217"; break;
+ case 18: sType = "x2_it_sparscr206"; break;
+ case 19: sType = "nw_it_sparscr110"; break;
+ case 20: sType = "x2_it_sparscr201"; break;
+ case 21: sType = "x1_it_spdvscr301"; break;
+ case 22: sType = "x2_it_spdvscr104"; break;
+ case 23: sType = "x2_it_spdvscr001"; break;
+ case 24: sType = "x2_it_spdvscr203"; break;
+ case 25: sType = "x2_it_spdvscr308"; break;
+ case 26: sType = "nw_it_sparscr206"; break;
+ case 27: sType = "nw_it_sparscr003"; break;
+ case 28: sType = "x2_it_spdvscr101"; break;
+ case 29: sType = "x2_it_sparscr202"; break;
+ case 30: sType = "x1_it_spdvscr102"; break;
+ case 31: sType = "x2_it_spdvscr105"; break;
+ case 32: sType = "nw_it_sparscr219"; break;
+ case 33: sType = "x1_it_sparscr003"; break;
+ case 34: sType = "nw_it_sparscr215"; break;
+ case 35: sType = "nw_it_sparscr101"; break;
+ case 36: sType = "x2_it_spdvscr106"; break;
+ case 37: sType = "x1_it_spdvscr103"; break;
+ case 38: sType = "x1_it_sparscr101"; break;
+ case 39: sType = "x1_it_sparscr101"; break;
+ case 40: sType = "x2_it_sparscr305"; break;
+ case 41: sType = "x1_it_spdvscr205"; break;
+ case 42: sType = "x2_it_sparscr205"; break;
+ case 43: sType = "x1_it_sparscr001"; break;
+ case 44: sType = "nw_it_sparscr220"; break;
+ case 45: sType = "x2_it_sparscr203"; break;
+ case 46: sType = "nw_it_sparscr208"; break;
+ case 47: sType = "nw_it_sparscr209"; break;
+ case 48: sType = "nw_it_sparscr103"; break;
+ case 49: sType = "x2_it_spdvscr204"; break;
+ case 50: sType = "nw_it_sparscr308"; break;
+ case 51: sType = "x2_it_sparscr101"; break;
+ case 52: sType = "x2_it_sparscr104"; break;
+ case 53: sType = "nw_it_sparscr106"; break;
+ case 54: sType = "x1_it_spdvscr104"; break;
+ case 55: sType = "x1_it_spdvscr001"; break;
+ case 56: sType = "x1_it_spdvscr201"; break;
+ case 57: sType = "nw_it_sparscr207"; break;
+ case 58: sType = "x2_it_sparscr102"; break;
+ case 59: sType = "nw_it_sparscr216"; break;
+ case 60: sType = "nw_it_sparscr218"; break;
+ case 61: sType = "nw_it_spdvscr201"; break;
+ case 62: sType = "nw_it_sparscr004"; break;
+ case 63: sType = "nw_it_sparscr104"; break;
+ case 64: sType = "x1_it_spdvscr106"; break;
+ case 65: sType = "nw_it_sparscr109"; break;
+ case 66: sType = "x2_it_sparscr105"; break;
+ case 67: sType = "nw_it_sparscr202"; break;
+ case 68: sType = "nw_it_sparscr113"; break;
+ case 69: sType = "x1_it_spdvscr203"; break;
+ case 70: sType = "nw_it_sparscr221"; break;
+ case 71: sType = "nw_it_sparscr102"; break;
+ case 72: sType = "x2_it_sparscral"; break;
+ case 73: sType = "nw_it_sparscr111"; break;
+ case 74: sType = "nw_it_sparscr002"; break;
+ case 75: sType = "x2_it_spdvscr107"; break;
+ case 76: sType = "x2_it_spdvscr205"; break;
+ case 77: sType = "nw_it_sparscr201"; break;
+ case 78: sType = "nw_it_sparscr001"; break;
+ case 79: sType = "x2_it_spdvscr108"; break;
+ case 80: sType = "nw_it_sparscr210"; break;
+ case 81: sType = "x2_it_sparscr103"; break;
+ case 82: sType = "x1_it_sparscr103"; break;
+ case 83: sType = "x1_it_spdvscr105"; break;
+ case 84: sType = "nw_it_spdvscr203"; break;
+ case 85: sType = "nw_it_sparscr108"; break;
+ case 86: sType = "nw_it_spdvscr204"; break;
+ case 87: sType = "x2_it_sparscr204"; break;
+ case 88: sType = "nw_it_sparscr105"; break;
+ case 89: sType = "nw_it_sparscr203"; break;
+ case 90: sType = "x1_it_sparscr202"; break;
+ case 91: sType = "x1_it_sparscr104"; break;
+ case 92: sType = "nw_it_sparscr214"; break;
+ case 93: sType = "x2_it_spdvscr002"; break;
+ case 94: sType = "nw_it_sparscr204"; break;
+ }
+ }
+
+ if (iRange==2)
+ {
+ iRoll = d100(); //:: scrolls valued 540-1621
+ switch (iRoll)
+ {
+ case 1: sType = "nw_it_sparscr509"; break;
+ case 2: sType = "x2_it_spdvscr508"; break;
+ case 3: sType = "x2_it_sparscr501"; break;
+ case 4: sType = "x2_it_spdvscr501"; break;
+ case 5: sType = "nw_it_sparscr414"; break;
+ case 6: sType = "x1_it_sparscr502"; break;
+ case 7: sType = "x2_it_spdvscr307"; break;
+ case 8: sType = "nw_it_sparscr405"; break;
+ case 9: sType = "x2_it_spdvscr504"; break;
+ case 10: sType = "nw_it_sparscr307"; break;
+ case 11: sType = "nw_it_sparscr502"; break;
+ case 12: sType = "nw_it_sparscr507"; break;
+ case 13: sType = "nw_it_sparscr406"; break;
+ case 14: sType = "nw_it_sparscr411"; break;
+ case 15: sType = "x2_it_spdvscr402"; break;
+ case 16: sType = "x2_it_spdvscr305"; break;
+ case 17: sType = "x2_it_spdvscr403"; break;
+ case 18: sType = "nw_it_sparscr501"; break;
+ case 19: sType = "nw_it_sparscr301"; break;
+ case 20: sType = "x1_it_sparscr301"; break;
+ case 21: sType = "x2_it_spdvscr404"; break;
+ case 22: sType = "x2_it_spdvscr309"; break;
+ case 23: sType = "nw_it_sparscr416"; break;
+ case 24: sType = "nw_it_sparscr503"; break;
+ case 25: sType = "nw_it_sparscr608"; break;
+ case 26: sType = "nw_it_sparscr418"; break;
+ case 27: sType = "x2_it_spdvscr509"; break;
+ case 28: sType = "nw_it_sparscr413"; break;
+ case 29: sType = "nw_it_sparscr504"; break;
+ case 30: sType = "nw_it_sparscr309"; break;
+ case 31: sType = "x1_it_sparscr501"; break;
+ case 32: sType = "nw_it_sparscr304"; break;
+ case 33: sType = "x1_it_spdvscr403"; break;
+ case 34: sType = "x2_it_spdvscr405"; break;
+ case 35: sType = "x2_it_spdvscr306"; break;
+ case 36: sType = "x2_it_sparscr701"; break;
+ case 37: sType = "nw_it_sparscr602"; break;
+ case 38: sType = "x1_it_spdvscr303"; break;
+ case 39: sType = "x2_it_sparscr304"; break;
+ case 40: sType = "nw_it_sparscr508"; break;
+ case 41: sType = "x1_it_sparscr303"; break;
+ case 42: sType = "x2_it_spdvscr406"; break;
+ case 43: sType = "nw_it_sparscr312"; break;
+ case 44: sType = "x2_it_spdvscr505"; break;
+ case 45: sType = "x2_it_spdvscr302"; break;
+ case 46: sType = "nw_it_sparscr505"; break;
+ case 47: sType = "x2_it_spdvscr401"; break;
+ case 48: sType = "nw_it_sparscr408"; break;
+ case 49: sType = "x1_it_spdvscr501"; break;
+ case 50: sType = "x2_it_spdvscr301"; break;
+ case 51: sType = "x1_it_spdvscr401"; break;
+ case 52: sType = "x1_it_spdvscr302"; break;
+ case 53: sType = "x2_it_spdvscr310"; break;
+ case 54: sType = "nw_it_sparscr314"; break;
+ case 55: sType = "x1_it_sparscr401"; break;
+ case 56: sType = "x2_it_sparscr303"; break;
+ case 57: sType = "x2_it_sparscr602"; break;
+ case 58: sType = "nw_it_sparscr511"; break;
+ case 59: sType = "nw_it_sparscr512"; break;
+ case 60: sType = "nw_it_sparscr417"; break;
+ case 61: sType = "nw_it_sparscr513"; break;
+ case 62: sType = "nw_it_sparscr310"; break;
+ case 63: sType = "nw_it_sparscr302"; break;
+ case 64: sType = "x2_it_sparscrmc"; break;
+ case 65: sType = "x2_it_spdvscr304"; break;
+ case 66: sType = "x1_it_spdvscr402"; break;
+ case 67: sType = "x2_it_sparscr301"; break;
+ case 68: sType = "x2_it_sparscr502"; break;
+ case 69: sType = "nw_it_sparscr506"; break;
+ case 70: sType = "nw_it_sparscr401"; break;
+ case 71: sType = "x2_it_spdvscr502"; break;
+ case 72: sType = "nw_it_sparscr315"; break;
+ case 73: sType = "x2_it_spdvscr311"; break;
+ case 74: sType = "nw_it_spdvscr402"; break;
+ case 75: sType = "x1_it_spdvscr502"; break;
+ case 76: sType = "nw_it_sparscr409"; break;
+ case 77: sType = "x2_it_spdvscr407"; break;
+ case 78: sType = "nw_it_sparscr415"; break;
+ case 79: sType = "x2_it_spdvscr312"; break;
+ case 80: sType = "x1_it_spdvscr305"; break;
+ case 81: sType = "nw_it_spdvscr501"; break;
+ case 82: sType = "nw_it_spdvscr301"; break;
+ case 83: sType = "nw_it_sparscr402"; break;
+ case 84: sType = "nw_it_spdvscr401"; break;
+ case 85: sType = "x2_it_sparscr302"; break;
+ case 86: sType = "nw_it_sparscr410"; break;
+ case 87: sType = "x2_it_spdvscr506"; break;
+ case 88: sType = "nw_it_sparscr313"; break;
+ case 89: sType = "x2_it_spdvscr507"; break;
+ case 90: sType = "x1_it_spdvscr304"; break;
+ case 91: sType = "nw_it_sparscr305"; break;
+ case 92: sType = "nw_it_sparscr403"; break;
+ case 93: sType = "nw_it_sparscr306"; break;
+ case 94: sType = "nw_it_sparscr404"; break;
+ case 95: sType = "nw_it_sparscr510"; break;
+ case 96: sType = "x2_it_sparscr902"; break;
+ case 97: sType = "nw_it_sparscr606"; break;
+ case 98: sType = "x2_it_spdvscr503"; break;
+ case 99: sType = "nw_it_sparscr407"; break;
+ case 100: sType = "x1_it_sparscr302"; break;
+ }
+ }
+
+ if (iRange==3)
+ {
+ iRoll = d100(); //:: scrolls valued 2400-3200
+ switch (iRoll)
+ {
+ case 1: sType = "nw_it_sparscr603"; break;
+ case 2: sType = "x1_it_spdvscr701"; break;
+ case 3: sType = "x1_it_spdvscr601"; break;
+ case 4: sType = "x1_it_sparscr602"; break;
+ case 5: sType = "x1_it_sparscr701"; break;
+ case 6: sType = "x2_it_spdvscr603"; break;
+ case 7: sType = "nw_it_sparscr607"; break;
+ case 8: sType = "nw_it_sparscr610"; break;
+ case 9: sType = "nw_it_sparscr707"; break;
+ case 10: sType = "x1_it_spdvscr605"; break;
+ case 11: sType = "x1_it_spdvscr702"; break;
+ case 12: sType = "x2_it_spdvscr601"; break;
+ case 13: sType = "nw_it_sparscr704"; break;
+ case 14: sType = "x1_it_spdvscr703"; break;
+ case 15: sType = "x1_it_sparscr601"; break;
+ case 16: sType = "x1_it_spdvscr604"; break;
+ case 17: sType = "x2_it_sparscr503"; break;
+ case 18: sType = "nw_it_sparscr708"; break;
+ case 19: sType = "x1_it_spdvscr704"; break;
+ case 20: sType = "x1_it_sparscr605"; break;
+ case 21: sType = "nw_it_sparscr601"; break;
+ case 22: sType = "nw_it_spdvscr701"; break;
+ case 23: sType = "x1_it_spdvscr602"; break;
+ case 24: sType = "x2_it_spdvscr606"; break;
+ case 25: sType = "nw_it_sparscr612"; break;
+ case 26: sType = "nw_it_sparscr613"; break;
+ case 27: sType = "x2_it_spdvscr604"; break;
+ case 28: sType = "x2_it_spdvscr605"; break;
+ case 29: sType = "x1_it_sparscr603"; break;
+ case 30: sType = "nw_it_sparscr611"; break;
+ case 31: sType = "x1_it_spdvscr603"; break;
+ case 32: sType = "nw_it_sparscr604"; break;
+ case 33: sType = "nw_it_sparscr702"; break;
+ case 34: sType = "nw_it_sparscr706"; break;
+ case 35: sType = "nw_it_sparscr802"; break;
+ case 36: sType = "x2_it_spdvscr702"; break;
+ case 37: sType = "nw_it_spdvscr702"; break;
+ case 38: sType = "nw_it_sparscr609"; break;
+ case 39: sType = "x2_it_sparscr703"; break;
+ case 40: sType = "nw_it_sparscr701"; break;
+ case 41: sType = "x1_it_sparscr604"; break;
+ case 42: sType = "x2_it_spdvscr602"; break;
+ case 43: sType = "nw_it_sparscr605"; break;
+ case 44: sType = "nw_it_sparscr703"; break;
+ case 45: sType = "x2_it_spdvscr803"; break;
+ case 46: sType = "nw_it_sparscr614"; break;
+ case 47: sType = "nw_it_sparscr614"; break;
+ case 48: sType = "x2_it_sparscr601"; break;
+ case 49: sType = "x2_it_spdvscr701"; break;
+ case 50: sType = "nw_it_sparscr603"; break;
+ case 51: sType = "x1_it_spdvscr701"; break;
+ case 52: sType = "x1_it_spdvscr601"; break;
+ case 53: sType = "x1_it_sparscr602"; break;
+ case 54: sType = "x1_it_sparscr701"; break;
+ case 55: sType = "x2_it_spdvscr603"; break;
+ case 56: sType = "nw_it_sparscr607"; break;
+ case 57: sType = "nw_it_sparscr610"; break;
+ case 58: sType = "nw_it_sparscr707"; break;
+ case 59: sType = "x1_it_spdvscr605"; break;
+ case 60: sType = "x1_it_spdvscr702"; break;
+ case 61: sType = "x2_it_spdvscr601"; break;
+ case 62: sType = "nw_it_sparscr704"; break;
+ case 63: sType = "x1_it_spdvscr703"; break;
+ case 64: sType = "x1_it_sparscr601"; break;
+ case 65: sType = "x1_it_spdvscr604"; break;
+ case 66: sType = "x2_it_sparscr503"; break;
+ case 67: sType = "nw_it_sparscr708"; break;
+ case 68: sType = "x1_it_spdvscr704"; break;
+ case 69: sType = "x1_it_sparscr605"; break;
+ case 70: sType = "nw_it_sparscr601"; break;
+ case 71: sType = "nw_it_spdvscr701"; break;
+ case 72: sType = "x1_it_spdvscr602"; break;
+ case 73: sType = "x2_it_spdvscr606"; break;
+ case 74: sType = "nw_it_sparscr612"; break;
+ case 75: sType = "nw_it_sparscr613"; break;
+ case 76: sType = "x2_it_spdvscr604"; break;
+ case 77: sType = "x2_it_spdvscr605"; break;
+ case 78: sType = "x1_it_sparscr603"; break;
+ case 79: sType = "nw_it_sparscr611"; break;
+ case 80: sType = "x1_it_spdvscr603"; break;
+ case 81: sType = "nw_it_sparscr604"; break;
+ case 82: sType = "nw_it_sparscr702"; break;
+ case 83: sType = "nw_it_sparscr706"; break;
+ case 84: sType = "nw_it_sparscr802"; break;
+ case 85: sType = "x2_it_spdvscr702"; break;
+ case 86: sType = "nw_it_spdvscr702"; break;
+ case 87: sType = "nw_it_sparscr609"; break;
+ case 88: sType = "x2_it_sparscr703"; break;
+ case 89: sType = "nw_it_sparscr701"; break;
+ case 90: sType = "x1_it_sparscr604"; break;
+ case 91: sType = "x2_it_spdvscr602"; break;
+ case 92: sType = "nw_it_sparscr605"; break;
+ case 93: sType = "nw_it_sparscr703"; break;
+ case 94: sType = "x2_it_spdvscr803"; break;
+ case 95: sType = "nw_it_sparscr614"; break;
+ case 96: sType = "nw_it_sparscr614"; break;
+ case 97: sType = "x2_it_sparscr601"; break;
+ case 98: sType = "x2_it_spdvscr701"; break;
+ case 99: sType = "x2_it_sparscr703"; break;
+ case 100: sType = "nw_it_sparscr701"; break;
+ }
+ }
+
+ if (iRange==4||iRange==5)
+ {
+ iRoll = Random(40)+1; //:: scrolls valued above 3200
+ switch (iRoll)
+ {
+ case 1: sType = "nw_it_sparscr806"; break;
+ case 2: sType = "x2_it_spdvscr804"; break;
+ case 3: sType = "x1_it_sparscr801"; break;
+ case 4: sType = "x1_it_sparscr901"; break;
+ case 5: sType = "x2_it_sparscr901"; break;
+ case 6: sType = "x2_it_sparscr801"; break;
+ case 7: sType = "x1_it_spdvscr803"; break;
+ case 8: sType = "x1_it_spdvscr804"; break;
+ case 9: sType = "nw_it_sparscr905"; break;
+ case 10: sType = "x2_it_spdvscr901"; break;
+ case 11: sType = "nw_it_sparscr908"; break;
+ case 12: sType = "nw_it_sparscr902"; break;
+ case 13: sType = "nw_it_sparscr803"; break;
+ case 14: sType = "nw_it_sparscr912"; break;
+ case 15: sType = "nw_it_sparscr809"; break;
+ case 16: sType = "x2_it_spdvscr902"; break;
+ case 17: sType = "nw_it_sparscr804"; break;
+ case 18: sType = "nw_it_sparscr807"; break;
+ case 19: sType = "nw_it_sparscr806"; break;
+ case 20: sType = "x2_it_spdvscr801"; break;
+ case 21: sType = "nw_it_sparscr906"; break;
+ case 22: sType = "nw_it_sparscr801"; break;
+ case 23: sType = "nw_it_sparscr901"; break;
+ case 24: sType = "x2_it_spdvscr802"; break;
+ case 25: sType = "nw_it_sparscr903"; break;
+ case 26: sType = "nw_it_sparscr808"; break;
+ case 27: sType = "nw_it_sparscr910"; break;
+ case 28: sType = "x2_it_spdvscr903"; break;
+ case 29: sType = "nw_it_sparscr904"; break;
+ case 30: sType = "nw_it_sparscr805"; break;
+ case 31: sType = "x1_it_spdvscr802"; break;
+ case 32: sType = "nw_it_sparscr911"; break;
+ case 33: sType = "x1_it_spdvscr901"; break;
+ case 34: sType = "nw_it_sparscr909"; break;
+ case 35: sType = "nw_it_sparscr907"; break;
+ case 36: sType = "x1_it_spdvscr801"; break;
+ case 37: sType = "nw_it_sparscr906"; break;
+ case 38: sType = "nw_it_sparscr808"; break;
+ case 39: sType = "x2_it_sparscr801"; break;
+ case 40: sType = "x2_it_spdvscr804"; break;
+ }
+ }
+
+ object oScroll = CreateItemOnObject(sType, oSack, 1);
+
+ SetIdentified(oScroll, FALSE);
+}
+
+void DropPotion(object oMod, object oSack)
+{
+ string sPotion;
+
+ int nRandom = Random(41) + 1;
+ switch (nRandom)
+ {
+ case 1: sPotion = "hy_mpotion001"; break;
+ case 2: sPotion = "hy_mpotion002"; break;
+ case 3: sPotion = "hy_mpotion003"; break;
+ case 4: sPotion = "hy_mpotion005"; break;
+ case 5: sPotion = "hy_mpotion006"; break;
+ case 6: sPotion = "hy_mpotion008"; break;
+ case 7: sPotion = "hy_mpotion009"; break;
+ case 8: sPotion = "x2_it_mpotion001"; break;
+ case 9: sPotion = "nw_it_mpotion001" ; break;
+ case 10: sPotion = "nw_it_mpotion002" ; break;
+ case 11: sPotion = "nw_it_mpotion003" ; break;
+ case 12: sPotion = "nw_it_mpotion004" ; break;
+ case 13: sPotion = "nw_it_mpotion005" ; break;
+ case 14: sPotion = "nw_it_mpotion006"; break;
+ case 15: sPotion = "nw_it_mpotion007"; break;
+ case 16: sPotion = "nw_it_mpotion008"; break;
+ case 17: sPotion = "nw_it_mpotion009"; break;
+ case 18: sPotion = "nw_it_mpotion010"; break;
+ case 19: sPotion = "nw_it_mpotion011"; break;
+ case 20: sPotion = "nw_it_mpotion012"; break;
+ case 21: sPotion = "nw_it_mpotion013"; break;
+ case 22: sPotion = "nw_it_mpotion014"; break;
+ case 23: sPotion = "nw_it_mpotion015"; break;
+ case 24: sPotion = "nw_it_mpotion016"; break;
+ case 25: sPotion = "nw_it_mpotion017"; break;
+ case 26: sPotion = "nw_it_mpotion018"; break;
+ case 27: sPotion = "nw_it_mpotion019"; break;
+ case 28: sPotion = "nw_it_mpotion020"; break;
+ case 29: sPotion = "x2_it_mpotion001"; break;
+ case 30: sPotion = "hy_mpotion001"; break;
+ case 31: sPotion = "hy_mpotion002"; break;
+ case 32: sPotion = "hy_mpotion003"; break;
+ case 33: sPotion = "hy_mpotion004"; break;
+ case 34: sPotion = "hy_mpotion005"; break;
+ case 35: sPotion = "hy_mpotion006"; break;
+ case 36: sPotion = "hy_mpotion007"; break;
+ case 37: sPotion = "hy_mpotion008"; break;
+ case 38: sPotion = "hy_mpotion009"; break;
+ case 39: sPotion = "hy_mpotion010"; break;
+ case 40: sPotion = "hy_mpotion011"; break;
+ case 41: sPotion = "hy_mpotion012"; break;
+ }
+
+ CreateItemOnObject(sPotion, oSack, 1);
+}
+
+void DropRodWand(object oMod, object oSack)
+{
+ string sType;
+
+ int nRandom = Random(16) + 1;
+ switch (nRandom)
+ {//::: Rods
+ case 1: sType = "nw_wmgmrd002"; break; //res
+ case 2: sType = "nw_wmgmrd005"; break; //rev
+ case 3: sType = "nw_wmgrd002"; break; // ghost
+ case 4: sType = "nw_wmgmrd006"; break; // frost
+
+ //:: Wands
+ case 5: sType = "nw_wmgwn011"; break;
+ case 6: sType = "nw_wmgwn002"; break;
+ case 7: sType = "nw_wmgwn007"; break;
+ case 8: sType = "nw_wmgwn004"; break;
+ case 9: sType = "nw_wmgwn006"; break;
+ case 10: sType = "nw_wmgwn005"; break;
+ case 11: sType = "nw_wmgwn012"; break;
+ case 12: sType = "nw_wmgwn010"; break;
+ case 13: sType = "nw_wmgwn008"; break;
+ case 14: sType = "nw_wmgwn009"; break;
+ case 15: sType = "nw_wmgwn003"; break;
+ case 16: sType = "nw_wmgwn013"; break;
+ }
+
+ CreateItemOnObject(sType, oSack, 1);
+}
+
+void DropMisc(object oMod, object oSack)
+{
+ string sName;
+
+ int nDice = Random(22)+1;
+ switch (nDice)
+ {
+ case 1: sName = "nw_it_contain002"; break; //mpouch
+ case 2: sName = "nw_it_msmlmisc05"; break; //healpearl
+ case 3: sName = "nw_it_mmidmisc04"; break; //scab bless
+ case 4: sName = "x0_it_msmlmisc05"; break; //earth elem
+ case 5: sName = "x0_it_mmedmisc03"; break; //harp
+ case 6: sName = "x0_it_msmlmisc01"; break; //water elem
+ case 7: sName = "x0_it_msmlmisc02"; break; //fire elem
+ case 8: sName = "x0_it_mmedmisc01"; break; //shielding
+ case 9: sName = "x0_it_mthnmisc21"; break; //air elem
+ case 10: sName = "x0_it_mthnmisc19"; break; //bard lire
+ case 11: sName = "x0_it_mthnmisc17"; break; // bard spls
+ case 12: sName = "x0_it_mmedmisc02"; break; // bard spls
+ case 13: sName = "x0_it_mthnmisc05"; break; // dust app
+ case 14: sName = "x0_it_mthnmisc06"; break; // dust dissapp
+ case 15: sName = "x0_it_mthnmisc13"; break; // sunbeam
+ case 16: sName = "x0_it_mthnmisc15"; break; //
+ case 17: sName = "x0_it_mthnmisc14"; break; // lath chal
+ case 18: sName = "nw_it_mmidmisc01"; break; // harp charm
+ case 19: sName = "nw_it_mmidmisc02"; break; // harp haunt
+ case 20: sName = "nw_it_mmidmisc03"; break; // harp pand
+ case 21: sName = "x0_it_msmlmisc06"; break; // horn good/evil
+ case 22: sName = "x0_it_mthnmisc09"; break; //
+ }
+
+ CreateItemOnObject(sName, oSack, 1);
+}
+
+void DropSetItem(object oMod, object oSack, int iClass)
+{
+ string sName;
+ int iDice;
+
+ if (iClass==0)iClass = d12();
+
+ switch (iClass)
+ {
+ case 1:
+ { //:: STR Fighter Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_fighter_s1_1"; break;
+ case 2: sName = "sd_fighter_s1_2"; break;
+ case 3: sName = "sd_fighter_s1_3"; break;
+ case 4: sName = "sd_fighter_s1_4"; break;
+ case 5: sName = "sd_fighter_s1_5"; break;
+ case 6: sName = "sd_fighter_s1_6"; break;
+ }
+ }
+ break;
+
+ case 2:
+ {//:: Wizard Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_wizard_s1_1"; break;
+ case 2: sName = "sd_wizard_s1_2"; break;
+ case 3: sName = "sd_wizard_s1_3"; break;
+ case 4: sName = "sd_wizard_s1_4"; break;
+ case 5: sName = "sd_wizard_s1_5"; break;
+ case 6: sName = "sd_wizard_s1_6"; break;
+ }
+ }
+ break;
+
+ case 3:
+ {//:: Sorcerer Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_sorc_s1_1"; break;
+ case 2: sName = "sd_sorc_s1_2"; break;
+ case 3: sName = "sd_sorc_s1_3"; break;
+ case 4: sName = "sd_sorc_s1_4"; break;
+ case 5: sName = "sd_sorc_s1_5"; break;
+ case 6: sName = "sd_sorc_s1_6"; break;
+ }
+ }
+ break;
+
+ case 4:
+ {//:: DEX Fighter/Rogue Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_fighter_s2_1"; break;
+ case 2: sName = "sd_fighter_s2_2"; break;
+ case 3: sName = "sd_fighter_s2_3"; break;
+ case 4: sName = "sd_fighter_s2_4"; break;
+ case 5: sName = "sd_fighter_s2_5"; break;
+ case 6: sName = "sd_fighter_s2_6"; break;
+ }
+ }
+ break;
+
+ case 5:
+ {//:: Cleric Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_cleric_s1_1"; break;
+ case 2: sName = "sd_cleric_s1_2"; break;
+ case 3: sName = "sd_cleric_s1_3"; break;
+ case 4: sName = "sd_cleric_s1_4"; break;
+ case 5: sName = "sd_cleric_s1_5"; break;
+ case 6: sName = "sd_cleric_s1_6"; break;
+ }
+ }
+ break;
+
+ case 6:
+ {//:: Bard Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_bard_s1_1"; break;
+ case 2: sName = "sd_bard_s1_2"; break;
+ case 3: sName = "sd_bard_s1_3"; break;
+ case 4: sName = "sd_bard_s1_4"; break;
+ case 5: sName = "sd_bard_s1_5"; break;
+ case 6: sName = "sd_bard_s1_6"; break;
+ }
+ }
+ break;
+
+ case 7:
+ {//:: Paladin Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_paladin_s1_1"; break;
+ case 2: sName = "sd_paladin_s1_2"; break;
+ case 3: sName = "sd_paladin_s1_3"; break;
+ case 4: sName = "sd_paladin_s1_4"; break;
+ case 5: sName = "sd_paladin_s1_5"; break;
+ case 6: sName = "sd_paladin_s1_6"; break;
+ }
+ }
+ break;
+
+ case 8:
+ {//:: Druid Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_druid_s1_1"; break;
+ case 2: sName = "sd_druid_s1_2"; break;
+ case 3: sName = "sd_druid_s1_3"; break;
+ case 4: sName = "sd_druid_s1_4"; break;
+ case 5: sName = "sd_druid_s1_5"; break;
+ case 6: sName = "sd_druid_s1_6"; break;
+ }
+ }
+ break;
+
+ case 9:
+ {//:: Ranger Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_ranger_s1_1"; break;
+ case 2: sName = "sd_ranger_s1_2"; break;
+ case 3: sName = "sd_ranger_s1_3"; break;
+ case 4: sName = "sd_ranger_s1_4"; break;
+ case 5: sName = "sd_ranger_s1_5"; break;
+ case 6: sName = "sd_ranger_s1_6"; break;
+ }
+ }
+ break;
+
+ case 10:
+ {//:: Monk Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_monk_s1_1"; break;
+ case 2: sName = "sd_monk_s1_2"; break;
+ case 3: sName = "sd_monk_s1_3"; break;
+ case 4: sName = "sd_monk_s1_4"; break;
+ case 5: sName = "sd_monk_s1_5"; break;
+ case 6: sName = "sd_monk_s1_6"; break;
+ }
+ }
+ break;
+
+ case 11:
+ {//:: Barbarian Set
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_barb_s1_6"; break;
+ case 2: sName = "sd_barb_s1_1"; break;
+ case 3: sName = "sd_barb_s1_2"; break;
+ case 4: sName = "sd_barb_s1_3"; break;
+ case 5: sName = "sd_barb_s1_4"; break;
+ case 6: sName = "sd_barb_s1_5"; break;
+ }
+ }
+ break;
+
+ case 12:
+ {//:: Dual Weapon / Weapon & Shield Sets
+ iDice = d6();
+ switch(iDice)
+ {
+ case 1: sName = "sd_weap_s1_1"; break;
+ case 2: sName = "sd_weap_s1_2"; break;
+ case 3: sName = "sd_weap_s2_1"; break;
+ case 4: sName = "sd_weap_s2_2"; break;
+ case 5: sName = "sd_weap_s3_1"; break;
+ case 6: sName = "sd_weap_s3_2"; break;
+ }
+ }
+ break;
+ }
+// coming soon: Ring Sets, Ammy/Ring Sets
+
+//////////////////////////////////////
+//:Debugging
+ FloatingTextStringOnCreature("Class: "+IntToString(iClass), oMod);
+ FloatingTextStringOnCreature("Roll: "+IntToString(iDice), oMod);
+ FloatingTextStringOnCreature(sName, oMod);
+
+ CreateItemOnObject(sName, oSack, 1);
+}
+
+void DropGold (object oMob, object oSack, int iBonus)
+{
+ string sGold, sLvl;
+ int iHD = GetHitDice(oMob);
+ int iGold = 0;
+
+ iGold = (d20()*iHD)+(10*iHD)+iBonus;
+
+ CreateItemOnObject("nw_it_gold001", oSack, iGold);
+
+ /////////////////////////////////////////////////////////////////////////
+ //Gold Debugging
+ //object oPC = GetFirstPC();
+ //sGold = IntToString(iGold);
+ //sLvl = IntToString(iHD);
+ //FloatingTextStringOnCreature(sGold+" Gold Spawned by lvl "+sLvl+" mob", oPC);
+ //
+ //
+ //
+}
+
+void CastImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iSpell;
+ int iUses;
+ int iRoll;
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d20();
+ if (iRoll==1)iSpell = IP_CONST_CASTSPELL_BURNING_HANDS_2;
+ if (iRoll==2)iSpell = IP_CONST_CASTSPELL_BARKSKIN_3;
+ if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MAGE_ARMOR_2;
+ if (iRoll==4)iSpell = IP_CONST_CASTSPELL_MAGIC_MISSILE_5;
+ if (iRoll==5)iSpell = IP_CONST_CASTSPELL_COLOR_SPRAY_2;
+ if (iRoll==6)iSpell = IP_CONST_CASTSPELL_DOOM_5;
+ if (iRoll==7)iSpell = IP_CONST_CASTSPELL_ENTANGLE_5;
+ if (iRoll==8)iSpell = IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3;
+ if (iRoll==9)iSpell = IP_CONST_CASTSPELL_BLESS_2;
+ if (iRoll==10)iSpell = IP_CONST_CASTSPELL_BULLS_STRENGTH_3;
+ if (iRoll==11)iSpell = IP_CONST_CASTSPELL_CATS_GRACE_3;
+ if (iRoll==12)iSpell = IP_CONST_CASTSPELL_CLARITY_3;
+ if (iRoll==13)iSpell = IP_CONST_CASTSPELL_GREASE_2;
+ if (iRoll==14)iSpell = IP_CONST_CASTSPELL_HOLD_PERSON_3;
+ if (iRoll==15)iSpell = IP_CONST_CASTSPELL_HOLD_MONSTER_7;
+ if (iRoll==16)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_3;
+ if (iRoll==17)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_PURGE_5;
+ if (iRoll==18)iSpell = IP_CONST_CASTSPELL_LIGHTNING_BOLT_5;
+ if (iRoll==19)iSpell = IP_CONST_CASTSPELL_SHIELD_5;
+ if (iRoll==20)iSpell = IP_CONST_CASTSPELL_SILENCE_3;
+ }
+ break;
+
+ case 2:
+ {
+ iRoll = d20();
+ if (iRoll==1)iSpell = IP_CONST_CASTSPELL_DISPLACEMENT_9;
+ if (iRoll==2)iSpell = IP_CONST_CASTSPELL_FIREBALL_10;
+ if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MAGIC_CIRCLE_AGAINST_ALIGNMENT_5;
+ if (iRoll==4)iSpell = IP_CONST_CASTSPELL_SLAY_LIVING_9;
+ if (iRoll==5)iSpell = IP_CONST_CASTSPELL_STONESKIN_7;
+ if (iRoll==6)iSpell = IP_CONST_CASTSPELL_ICE_STORM_9;
+ if (iRoll==7)iSpell = IP_CONST_CASTSPELL_CALL_LIGHTNING_10;
+ if (iRoll==8)iSpell = IP_CONST_CASTSPELL_ISAACS_LESSER_MISSILE_STORM_13;
+ if (iRoll==9)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_12;
+ if (iRoll==10)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_7;
+ if (iRoll==11)iSpell = IP_CONST_CASTSPELL_HOLD_PERSON_3;
+ if (iRoll==12)iSpell = IP_CONST_CASTSPELL_HOLD_MONSTER_7;
+ if (iRoll==13)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_PURGE_5;
+ if (iRoll==14)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5;
+ if (iRoll==15)iSpell = IP_CONST_CASTSPELL_LIGHTNING_BOLT_10;
+ if (iRoll==16)iSpell = IP_CONST_CASTSPELL_MINOR_GLOBE_OF_INVULNERABILITY_7;
+ if (iRoll==17)iSpell = IP_CONST_CASTSPELL_STINKING_CLOUD_5;
+ if (iRoll==18)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_IV_7;
+ if (iRoll==19)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_V_9;
+ if (iRoll==20)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_VI_11;
+ }
+ break;
+
+ case 3:
+ {
+ iRoll = d12();
+ if (iRoll==1)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
+ if (iRoll==2)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
+ if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
+ if (iRoll==4)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
+ if (iRoll==5)iSpell = IP_CONST_CASTSPELL_GREATER_DISPELLING_15;
+ if (iRoll==6)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
+ if (iRoll==7)iSpell = IP_CONST_CASTSPELL_CHAIN_LIGHTNING_20;
+ if (iRoll==8)iSpell = IP_CONST_CASTSPELL_GREATER_STONESKIN_11;
+ if (iRoll==9)iSpell = IP_CONST_CASTSPELL_FIREBRAND_15;
+ if (iRoll==10)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_12;
+ if (iRoll==11)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_12;
+ if (iRoll==12)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5;
+ }
+ break;
+
+ case 4:
+ {
+ iRoll = Random(16);
+ if (iRoll==1)iSpell = IP_CONST_CASTSPELL_BIGBYS_FORCEFUL_HAND_15;
+ if (iRoll==2)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
+ if (iRoll==3)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
+ if (iRoll==4)iSpell = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15;
+ if (iRoll==5)iSpell = IP_CONST_CASTSPELL_PREMONITION_15;
+ if (iRoll==6)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
+ if (iRoll==7)iSpell = IP_CONST_CASTSPELL_METEOR_SWARM_17;
+ if (iRoll==8)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
+ if (iRoll==9)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
+ if (iRoll==10)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
+ if (iRoll==11)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
+ if (iRoll==12)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
+ if (iRoll==13)iSpell = IP_CONST_CASTSPELL_FIREBRAND_15;
+ if (iRoll==14)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_18;
+ if (iRoll==15)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_18;
+ if (iRoll==16)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
+ }
+ break;
+
+ case 5:
+ {
+ iRoll = d20();
+ if (iRoll==1)iSpell = IP_CONST_CASTSPELL_WAIL_OF_THE_BANSHEE_17;
+ if (iRoll==2)iSpell = IP_CONST_CASTSPELL_TIME_STOP_17;
+ if (iRoll==3)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
+ if (iRoll==4)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
+ if (iRoll==5)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
+ if (iRoll==6)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_SWORD_18;
+ if (iRoll==7)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
+ if (iRoll==8)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
+ if (iRoll==9)iSpell = IP_CONST_CASTSPELL_BIGBYS_FORCEFUL_HAND_15;
+ if (iRoll==10)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
+ if (iRoll==11)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
+ if (iRoll==12)iSpell = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15;
+ if (iRoll==13)iSpell = IP_CONST_CASTSPELL_PREMONITION_15;
+ if (iRoll==14)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
+ if (iRoll==15)iSpell = IP_CONST_CASTSPELL_METEOR_SWARM_17;
+ if (iRoll==16)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
+ if (iRoll==17)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
+ if (iRoll==18)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
+ if (iRoll==19)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
+ if (iRoll==20)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
+ }
+ break;
+
+ }
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d3();
+ if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
+ if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
+ if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE;
+ break;
+ }
+ case 2:
+ {
+ iRoll = d3();
+ if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
+ if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
+ if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
+ break;
+ }
+ case 3:
+ {
+ iRoll = d3();
+ if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
+ if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE;
+ if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE;
+
+ iRoll = d100();
+
+ if (iRoll > 95)
+ {
+ iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
+ }
+
+ break;
+ }
+ case 4:
+ {
+ iRoll = d3();
+
+ if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE;
+ if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
+ if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
+
+ iRoll = d100();
+
+ if (iRoll > 95)
+ {
+ iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
+ }
+
+ break;
+ }
+ case 5:
+ {
+ iRoll = d3();
+
+ if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
+ if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
+ if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY;
+
+ iRoll = d100();
+
+ if (iRoll > 90)
+ {
+ iUses = IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY;
+ }
+
+ break;
+ }
+ }
+
+ ipAdd = ItemPropertyCastSpell(iSpell, iUses);
+ IPSafeAddItemProperty(oItem, ipAdd);
+ iRoll = (d12() * iRange)+1; if (iRoll > 50) iRoll = 50;
+ SetItemCharges(oItem, iRoll);
+}
+
+void WeapOnHit(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iProperty;
+ int iSaveDC;
+ int iSpecial;
+ int iRoll;
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d3();
+ if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
+ if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
+ if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
+ }
+ break;
+ case 2:
+ {
+ iRoll = d4();
+ if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
+ if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
+ if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
+ if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
+ if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
+ if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
+ if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
+ if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
+ if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
+ }
+ break;
+ case 4:
+ {
+ iRoll = d10();
+ if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
+ if (iRoll==2)iProperty = IP_CONST_ONHIT_SILENCE;
+ if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
+ if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
+ if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
+ if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
+ if (iRoll==7)iProperty = IP_CONST_ONHIT_HOLD;
+ if (iRoll==8)iProperty = IP_CONST_ONHIT_CONFUSION;
+ if (iRoll==9)iProperty = IP_CONST_ONHIT_ABILITYDRAIN;
+ if (iRoll==10)iProperty = IP_CONST_ONHIT_FEAR;
+ }
+ break;
+ case 5:
+ {
+ iRoll = d12();
+ if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
+ if (iRoll==2)iProperty = IP_CONST_ONHIT_SILENCE;
+ if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
+ if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
+ if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
+ if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
+ if (iRoll==7)iProperty = IP_CONST_ONHIT_HOLD;
+ if (iRoll==8)iProperty = IP_CONST_ONHIT_CONFUSION;
+ if (iRoll==9)iProperty = IP_CONST_ONHIT_ABILITYDRAIN;
+ if (iRoll==10)iProperty = IP_CONST_ONHIT_FEAR;
+ if (iRoll==11)iProperty = IP_CONST_ONHIT_BLINDNESS;
+ if (iRoll==12)iProperty = IP_CONST_ONHIT_LEVELDRAIN;
+ }
+
+ break;
+ }
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d2();
+ if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ break;
+ }
+ case 2:
+ {
+ iRoll = d3();
+ if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ break;
+ }
+ case 3:
+ {
+ iRoll = d3();
+ if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
+
+ iRoll = d100();
+ if (iRoll > 95)
+ {
+ iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
+ }
+ break;
+ }
+ case 4:
+ {
+ iRoll = d4();
+
+ if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
+ if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
+ if (iRoll==4)iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
+
+ iRoll=d100();
+
+ if (iRoll > 95)
+ {
+ iSaveDC = IP_CONST_ONHIT_SAVEDC_20;
+ }
+
+ break;
+ }
+ case 5:
+ {
+ iRoll = d4();
+
+ if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
+ if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
+ if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_20;
+ if (iRoll==4)iSaveDC = IP_CONST_ONHIT_SAVEDC_22;
+
+ iRoll=d100();
+
+ if (iRoll>90)
+ {
+ iSaveDC = IP_CONST_ONHIT_SAVEDC_24;
+ }
+ break;
+ }
+ }
+
+ switch (iRange)
+ {
+ case 1: case 2: case 3: case 4: case 5:
+ {
+ iRoll = Random(5);
+ if (iRoll==1)iSpecial = IP_CONST_ONHIT_DURATION_5_PERCENT_5_ROUNDS;
+ if (iRoll==2)iSpecial = IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS;
+ if (iRoll==3)iSpecial = IP_CONST_ONHIT_DURATION_25_PERCENT_3_ROUNDS;
+ if (iRoll==4)iSpecial = IP_CONST_ONHIT_DURATION_50_PERCENT_2_ROUNDS;
+ if (iRoll==5)iSpecial = IP_CONST_ONHIT_DURATION_75_PERCENT_1_ROUND;
+ break;
+ }
+ }
+
+ ipAdd = ItemPropertyOnHitProps(iProperty, iSaveDC, iSpecial);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void SpellSlot(object oItem, int iRange, int iNum)
+{
+ itemproperty ipAdd;
+ itemproperty ipClass;
+ int iLvl, i;
+ int iClass;
+ int iSpec;
+ int iRoll;
+ iRoll = d8();
+ switch (iRoll)
+ {
+ case 1:
+ {
+ iClass = IP_CONST_CLASS_BARD; iSpec = 1;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_BARD);
+ }
+ break;
+ case 2:
+ {
+ iClass = IP_CONST_CLASS_DRUID;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_DRUID);
+ }
+ break;
+ case 3:
+ {
+ iClass = IP_CONST_CLASS_SORCERER;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_SORCERER);
+ }
+ break;
+ case 4:
+ {
+ iClass = IP_CONST_CLASS_WIZARD;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_WIZARD);
+ }
+ break;
+ case 5:
+ {
+ iClass = IP_CONST_CLASS_PALADIN; iSpec = 2;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_PALADIN);
+ }
+ break;
+ case 6:
+ {
+ iClass = IP_CONST_CLASS_RANGER; iSpec = 2;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_RANGER);
+ }
+ break;
+ case 7:
+ {
+ iClass = IP_CONST_CLASS_CLERIC;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_CLERIC);
+ }
+ break;
+ case 8:
+ {
+ iClass = IP_CONST_CLASS_WIZARD;
+ ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_WIZARD);
+ }
+ break;
+ }
+
+ for (i = 0; i < iNum; i++)
+ {
+ if (iSpec == 1)
+ {
+ switch (iRange) // Bard max lvl 6
+ {
+ case 1: iLvl = 1; break; // 1
+ case 2: {iLvl = d3();if(iLvl==3)iLvl=2;}break; // 1-2
+ case 3: {iLvl = d3()+2;if(iLvl==5)iLvl=3;}break; // 3-4
+ case 4: {iLvl = d3()+3;if(iLvl==6)iLvl=4;}break; // 4-5
+ case 5: {iLvl = d3()+4;if(iLvl==7)iLvl=5;}break; // 5-6
+ }
+ }
+ else if (iSpec == 2)
+ {
+ switch (iRange) // Pally & Ranger max lvl 4
+ {
+ case 1: iLvl = 1; break; // 1
+ case 2: {iLvl = d3();if(iLvl==3)iLvl=2;}break; // 1-2
+ case 3: iLvl = d3(); break; // 1-3
+ case 4: iLvl = d3()+1; break; // 2-4
+ case 5: {iLvl = d3()+2;if(iLvl==5)iLvl=3;}break; // 3-4
+ }
+ }
+ else
+ {
+ switch (iRange) // The rest max lvl 9
+ {
+ case 1: iLvl = 1; break; // 1
+ case 2: iLvl = d4(); break; // 1-4
+ case 3: iLvl = d4()+1; break; // 2-5
+ case 4: iLvl = d6()+2; break; // 3-8
+ case 5: iLvl = d6()+4; break; // 5-9
+ }
+ }
+ ipAdd = ItemPropertyBonusLevelSpell(iClass, iLvl);
+ AddItemProperty(DURATION_TYPE_PERMANENT, ipAdd, oItem);
+ }
+
+ IPSafeAddItemProperty(oItem, ipClass);
+}
+
+void ImbueDivinity(object oItem, int iRange) //:: PRC8
+{
+ itemproperty ipAdd;
+ int iEnh;
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ //:: Cantrips & 1st lvl spells
+ iEnh = Random(2); break;
+ }
+ case 2:
+ {
+ //:: 1st & 2nd lvl spells
+ iEnh = Random(2)+1; break;
+ }
+ case 3:
+ {
+ //:: 2nd & 3rd lvl spells
+ iEnh = Random(2)+2; break;
+ }
+ case 4:
+ {
+ //:: 3rd & 4th lvl spells
+ iEnh = Random(2)+3; break;
+ }
+ case 5:
+ {
+ //:: 3rd, 4th & 5th lvl spells
+ iEnh = Random(3)+3; break;
+ }
+ }
+
+ ipAdd = ItemPropertyDivinity(iEnh);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void ImbueWizardry(object oItem, int iRange) //:: PRC8
+{
+ itemproperty ipAdd;
+ int iEnh;
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ //:: Cantrips & 1st lvl spells
+ iEnh = Random(2); break;
+ }
+ case 2:
+ {
+ //:: 1st & 2nd lvl spells
+ iEnh = Random(2)+1; break;
+ }
+ case 3:
+ {
+ //:: 2nd & 3rd lvl spells
+ iEnh = Random(2)+2; break;
+ }
+ case 4:
+ {
+ //:: 3rd & 4th lvl spells
+ iEnh = Random(2)+3; break;
+ }
+ case 5:
+ {
+ //:: 3rd, 4th & 5th lvl spells
+ iEnh = Random(3)+3; break;
+ }
+ }
+
+ ipAdd = ItemPropertyWizardry(iEnh);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void MightyEnhance(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+
+ int iEnh = d4();
+
+ switch (iRange)
+ {
+ case 1: iEnh+=0; break; // 1-4
+ case 2: iEnh+=1; break; // 2-5
+ case 3: iEnh+=2; break; // 3-6
+ case 4: iEnh+=3; break; // 4-7
+ case 5: iEnh+=4; break; // 5-8
+ }
+
+ ipAdd = ItemPropertyMaxRangeStrengthMod(iEnh);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void BowEnhance(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iEnh = d3();
+
+ switch (iRange)
+ {
+ case 1: if (iEnh==3)iEnh=1; break; // 1-2
+ case 2: {iEnh+=1;if (iEnh==4)iEnh=1;} break; // 2-3
+ case 3: {iEnh+=1;if (iEnh==4)iEnh=2;} break; // 3-4
+ case 4: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 4-5
+ case 5: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 5-6
+ }
+
+ ipAdd = ItemPropertyAttackBonus(iEnh);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void AmmoUnlim(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iType;
+ int iDam;
+ int iRoll = d12();
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d3();
+ if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_BASIC;
+ if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_BASIC;
+ if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS1;
+ }
+ break;
+ case 2:
+ {
+ iRoll = d4();
+ if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
+ if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
+ if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
+ if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
+ if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
+ if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS3;
+ if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
+ if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
+ if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
+ }
+ break;
+ case 4:
+ {
+ iRoll = d6();
+ if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS3;
+ if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
+ if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
+ if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
+ if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
+ if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
+ }
+ break;
+ case 5:
+ {
+ iRoll = d6();
+ if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
+ if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS5;
+ if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS5;
+ if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
+ if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
+ if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
+ }
+ break;
+ }
+
+ ipAdd = ItemPropertyUnlimitedAmmo(iType);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void AmmoEnhance(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iType;
+ int iDam;
+ int iRoll = d10();
+
+ switch (iRoll)
+ {
+ case 1: iType = IP_CONST_DAMAGETYPE_ACID; break;
+ case 2: iType = IP_CONST_DAMAGETYPE_BLUDGEONING; break;
+ case 3: iType = IP_CONST_DAMAGETYPE_COLD; break;
+ case 4: iType = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
+ case 5: iType = IP_CONST_DAMAGETYPE_FIRE; break;
+ case 6: iType = IP_CONST_DAMAGETYPE_MAGICAL; break;
+ case 7: iType = IP_CONST_DAMAGETYPE_NEGATIVE; break;
+ case 8: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
+ case 9: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
+ case 10: iType = IP_CONST_DAMAGETYPE_SONIC; break;
+ }
+ switch (iRange)
+ {
+ case 1: iDam = IP_CONST_DAMAGEBONUS_1; break;
+ case 2:
+ {
+ iRoll = d4();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ }
+ break;
+ case 4:
+ {
+ iRoll = d8();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ }
+ break;
+ case 5:
+ {
+ iRoll = d10();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d10;
+ }
+ break;
+ }
+
+ ipAdd = ItemPropertyDamageBonus(iType, iDam);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void WeapEnhance(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iEnh = d3();
+
+ switch (iRange)
+ {
+ case 1: if (iEnh==3)iEnh=1; break; // 1-2
+ case 2: {iEnh+=1;if (iEnh==4)iEnh=1;} break; // 2-3
+ case 3: {iEnh+=1;if (iEnh==4)iEnh=2;} break; // 3-4
+ case 4: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 4-5
+ case 5: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 5-6
+ }
+
+ ipAdd = ItemPropertyAttackBonus(iEnh);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void RangedImbue(object oItem)
+{
+ itemproperty ipAdd;
+ int iType;
+ int iRoll = d3();
+
+ switch (iRoll)
+ {
+ case 1: if (iRoll==1)iType=IP_CONST_DAMAGETYPE_BLUDGEONING; break;
+ case 2: if (iRoll==2)iType=IP_CONST_DAMAGETYPE_SLASHING; break;
+ case 3: if (iRoll==3)iType=IP_CONST_DAMAGETYPE_PIERCING; break;
+ }
+
+ ipAdd = ItemPropertyExtraRangeDamageType(iType);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void MeleeImbue(object oItem)
+{
+ itemproperty ipAdd;
+ int iType;
+ int iRoll = d3();
+
+ switch (iRoll)
+ {
+ case 1: if (iRoll==1)iType=IP_CONST_DAMAGETYPE_BLUDGEONING; break;
+ case 2: if (iRoll==2)iType=IP_CONST_DAMAGETYPE_SLASHING; break;
+ case 3: if (iRoll==3)iType=IP_CONST_DAMAGETYPE_PIERCING; break;
+ }
+
+ ipAdd = ItemPropertyExtraMeleeDamageType(iType);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void MassCritImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iDam;
+ int iCol;
+ int iType;
+ int iRoll;
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d3();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ }
+ break;
+ case 2:
+ {
+ iRoll = d4();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_2;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
+
+ iRoll=d100();
+ {
+ if (iRoll>90)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ }
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
+
+ iRoll=d100();
+ {
+ if (iRoll>95)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ }
+ }
+ break;
+ case 4:
+ {
+ iRoll = d10();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
+
+ iRoll=d100();
+ {
+ if (iRoll > 95)iDam = IP_CONST_DAMAGEBONUS_1d10;
+ }
+ }
+ break;
+ case 5:
+ {
+ iRoll = d12();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_1d10;
+
+ iRoll=d100();
+ {
+ if (iRoll > 95)iDam = IP_CONST_DAMAGEBONUS_2d6;
+ }
+ }
+ break;
+ }
+
+ ipAdd = ItemPropertyMassiveCritical(iDam);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void DamageTypeImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ itemproperty ipVis;
+ int iDam;
+ int iCol;
+ int iType;
+ int iRoll = d10();
+
+ switch (iRoll)
+ {
+ case 1: {iType = IP_CONST_DAMAGETYPE_ACID; iCol=4;} break;
+ case 2: {iType = IP_CONST_DAMAGETYPE_BLUDGEONING;} break;
+ case 3: {iType = IP_CONST_DAMAGETYPE_COLD; iCol=2;} break;
+ case 4: {iType = IP_CONST_DAMAGETYPE_ELECTRICAL; iCol=5;} break;
+ case 5: {iType = IP_CONST_DAMAGETYPE_FIRE; iCol=3;} break;
+ case 6: {iType = IP_CONST_DAMAGETYPE_MAGICAL; iCol=7;} break;
+ case 7: {iType = IP_CONST_DAMAGETYPE_NEGATIVE; iCol=1;} break;
+ case 8: {iType = IP_CONST_DAMAGETYPE_PIERCING; iCol=1;} break;
+ case 9: {iType = IP_CONST_DAMAGETYPE_SLASHING; iCol=1;} break;
+ case 10: {iType = IP_CONST_DAMAGETYPE_SONIC; iCol=7; }break;
+ }
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = d3();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ }
+ break;
+ case 2:
+ {
+ iRoll = d4();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ }
+ break;
+ case 4:
+ {
+ iRoll = d10();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ }
+ break;
+ case 5:
+ {
+ iRoll = d12();
+ if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
+ if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d8;
+ if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_1d10;
+ }
+ break;
+ }
+
+ ipAdd = ItemPropertyDamageBonus(iType, iDam);
+ IPSafeAddItemProperty(oItem, ipAdd);
+ //ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL);
+ //IPSafeAddItemProperty(oItem, ipAdd);
+
+}
+
+void ACmisc(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iAC = d3();
+
+ switch (iRange)
+ {
+ case 1: if(iAC==3)iAC=1; break; // 1-2
+ case 2: {iAC+=1;if (iAC==4)iAC=1;} break; // 2-3
+ case 3: {iAC+=1;if (iAC==4)iAC=2;} break; // 3-4
+ case 4: {iAC+=2;if (iAC==5)iAC=2;} break; // 4-5
+ case 5: {iAC+=3;if (iAC==6)iAC=3;} break; // 5-6
+ }
+
+ ipAdd = ItemPropertyACBonus(iAC);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void ACimbue(object oItem, int iRange, int iSpec)
+{
+ itemproperty ipAdd;
+ int iAC = d3();
+ int iPen;
+ int iRoll;
+ int iAbil;
+
+ switch (iRange)
+ {
+ case 1: if(iAC==3)iAC=1; break; // 1-2
+ case 2: {iAC+=1;if (iAC==4)iAC=1;} break; // 2-3
+ case 3: {iAC+=1;if (iAC==4)iAC=2;} break; // 3-4
+ case 4: {iAC+=2;if (iAC==5)iAC=2;} break; // 4-5
+ case 5: {iAC+=3;if (iAC==6)iAC=3;} break; // 5-6
+ }
+ ipAdd = ItemPropertyACBonus(iAC);
+
+ if (iSpec==1){iPen = d4()+1; ipAdd = ItemPropertyDecreaseAC(IP_CONST_ACMODIFIERTYPE_ARMOR, iPen);}
+ if (iSpec==2){iPen = d4()+1; ipAdd = ItemPropertyEnhancementPenalty(iPen);}
+ if (iSpec==3)
+ {
+ iPen = d4()+1;
+ iRoll = d6();
+ switch(iRoll)
+ {
+ case 1: iAbil = ABILITY_DEXTERITY; break;
+ case 2: iAbil = ABILITY_INTELLIGENCE; break;
+ case 3: iAbil = ABILITY_WISDOM; break;
+ case 4: iAbil = ABILITY_CHARISMA; break;
+ case 5: iAbil = ABILITY_CONSTITUTION; break;
+ case 6: iAbil = ABILITY_STRENGTH; break;
+ }
+
+ ipAdd = ItemPropertyDecreaseAbility(iAbil, iPen);
+ }
+
+ if (iSpec==4)
+ {
+ iPen = d4()+1; ipAdd = ItemPropertyAttackPenalty(iPen);
+ }
+
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void MIMMimbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iType;
+ int iRoll;
+
+ switch (iRange)
+ {
+ case 1: {} break;
+ case 2:
+ {
+ iRoll = Random(35);
+ if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
+ if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
+ if (iRoll==3)iType = IP_CONST_IMMUNITYSPELL_SLEEP;
+ if (iRoll==4)iType = IP_CONST_IMMUNITYSPELL_WEB;
+ if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_RAY_OF_FROST;
+ if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_GREASE;
+ if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_COLOR_SPRAY;
+ if (iRoll==8)iType = IP_CONST_IMMUNITYSPELL_DAZE;
+ if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_BURNING_HANDS;
+ if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS;
+ if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT;
+ if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE;
+ if (iRoll==13)iType = IP_CONST_FEAT_ALERTNESS;
+ if (iRoll==14)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
+ if (iRoll==15)iType = IP_CONST_FEAT_ARMOR_PROF_MEDIUM;
+ if (iRoll==16)iType = IP_CONST_FEAT_ARMOR_PROF_LIGHT;
+ if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
+ if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
+ if (iRoll==19)iType = IP_CONST_FEAT_DODGE;
+ if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
+ if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
+ if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
+ if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
+ if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
+ if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
+ if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
+ if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
+ if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
+ if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
+ if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
+ if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
+ if (iRoll==33)iType = IP_CONST_FEAT_SNEAK_ATTACK_1D6;
+ if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
+ if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
+ }
+ break;
+ case 3:
+ {
+ iRoll = Random(35);
+ if (iRoll==1)iType = IP_CONST_IMMUNITYSPELL_DOOM;
+ if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
+ if (iRoll==3)iType = IP_CONST_IMMUNITYSPELL_CLOUDKILL;
+ if (iRoll==4)iType = IP_CONST_IMMUNITYSPELL_GREASE;
+ if (iRoll==5)iType = IP_CONST_IMMUNITYMISC_POISON;
+ if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_SLEEP;
+ if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_WEB;
+ if (iRoll==8)iType = IP_CONST_IMMUNITYSPELL_RAY_OF_FROST;
+ if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_ENTANGLE;
+ if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW;
+ if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_SLOW;
+ if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON;
+ if (iRoll==13)iType = IP_CONST_FEAT_ALERTNESS;
+ if (iRoll==14)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==15)iType = IP_CONST_FEAT_WEAPSPEUNARM;
+ if (iRoll==16)iType = IP_CONST_FEAT_ARMOR_PROF_LIGHT;
+ if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
+ if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
+ if (iRoll==19)iType = IP_CONST_FEAT_WHIRLWIND;
+ if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
+ if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
+ if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
+ if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
+ if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
+ if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
+ if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
+ if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
+ if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
+ if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
+ if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
+ if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
+ if (iRoll==33)iType = 32;
+ if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
+ if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
+ }
+ break;
+ case 4:
+ {
+ iRoll = Random(35);
+ if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
+ if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
+ if (iRoll==3)iType = IP_CONST_IMMUNITYMISC_FEAR;
+ if (iRoll==4)iType = IP_CONST_IMMUNITYMISC_PARALYSIS;
+ if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_FIREBALL;
+ if (iRoll==6)iType = IP_CONST_IMMUNITYMISC_DISEASE;
+ if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS;
+ if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
+ if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
+ if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL;
+ if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY;
+ if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_SILENCE;
+ if (iRoll==13)iType = 32;
+ if (iRoll==14)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==15)iType = IP_CONST_FEAT_WEAPSPEUNARM;
+ if (iRoll==16)iType = IP_CONST_FEAT_POINTBLANK;
+ if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
+ if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
+ if (iRoll==19)iType = IP_CONST_FEAT_WHIRLWIND;
+ if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
+ if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
+ if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
+ if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
+ if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
+ if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
+ if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
+ if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
+ if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
+ if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
+ if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
+ if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
+ if (iRoll==33)iType = 32;
+ if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
+ if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
+ }
+ break;
+ case 5:
+ {
+ iRoll = Random(35);
+ if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
+ if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
+ if (iRoll==3)iType = IP_CONST_IMMUNITYMISC_FEAR;
+ if (iRoll==4)iType = IP_CONST_IMMUNITYMISC_PARALYSIS;
+ if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
+ if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_HEALING_CIRCLE;
+ if (iRoll==7)iType = IP_CONST_IMMUNITYMISC_KNOCKDOWN;
+ if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
+ if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS;
+ if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_HEAL;
+ if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_IMPLOSION;
+ if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_HARM;
+ if (iRoll==13)iType = IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS;
+ if (iRoll==14)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
+ if (iRoll==15)iType = IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL;
+ if (iRoll==16)iType = IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY;
+ if (iRoll==17)iType = IP_CONST_IMMUNITYSPELL_STORM_OF_VENGEANCE;
+ if (iRoll==18)iType = IP_CONST_IMMUNITYSPELL_WAIL_OF_THE_BANSHEE;
+ if (iRoll==19)iType = IP_CONST_IMMUNITYSPELL_WORD_OF_FAITH;
+ if (iRoll==20)iType = IP_CONST_FEAT_SNEAK_ATTACK_2D6;
+ if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
+ if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
+ if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
+ if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
+ if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
+ if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
+ if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
+ if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
+ if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
+ if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
+ if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
+ if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
+ if (iRoll==33)iType = IP_CONST_FEAT_SNEAK_ATTACK_1D6;
+ if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
+ if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
+ }
+ break;
+ }
+
+ ipAdd = ItemPropertyImmunityMisc(iType);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void RESimbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iRes;
+ int iType;
+ int iRoll = Random(9)+1;
+
+ switch (iRoll)
+ {
+ case 1: iType = IP_CONST_DAMAGETYPE_ACID; break;
+ case 2: iType = IP_CONST_DAMAGETYPE_BLUDGEONING; break;
+ case 3: iType = IP_CONST_DAMAGETYPE_COLD; break;
+ case 4: iType = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
+ case 5: iType = IP_CONST_DAMAGETYPE_FIRE; break;
+ case 6: iType = IP_CONST_DAMAGETYPE_PHYSICAL; break;
+ case 7: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
+ case 8: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
+ case 9: iType = IP_CONST_DAMAGETYPE_SONIC; break;
+ }
+
+ switch (iRange)
+ {
+ case 1: iRes = IP_CONST_DAMAGERESIST_5; break;
+ case 2:
+ {
+ iRoll=d4();
+ if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
+ }
+ break;
+ case 3:
+ {
+ iRoll=d3();
+ if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
+ }
+ break;
+ case 4:
+ {
+ iRoll=d4();
+ if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
+ if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_10;
+ if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
+ if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
+ }
+ break;
+ case 5:
+ {
+ iRoll=d4();
+ if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_10;
+ if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_10;
+ if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
+ if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
+ }
+ break;
+ }
+ ipAdd = ItemPropertyDamageResistance(iType, iRes);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void AbilityImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iAbil;
+ int iType;
+ int iRoll = d6();
+
+ switch (iRoll)
+ {
+ case 1: iType = ABILITY_DEXTERITY; break;
+ case 2: iType = ABILITY_INTELLIGENCE; break;
+ case 3: iType = ABILITY_WISDOM; break;
+ case 4: iType = ABILITY_CHARISMA; break;
+ case 5: iType = ABILITY_CONSTITUTION; break;
+ case 6: iType = ABILITY_STRENGTH; break;
+ }
+
+ switch (iRange)
+ {
+ case 1: {iAbil = d3(); if (iAbil==3)iAbil=1; break;} // 1-2
+ case 2: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 2-3
+ case 3: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 3-4
+ case 4: {iAbil = d3()+1;if (iAbil==5)iAbil=2; break;} // 4-5
+ case 5: {iAbil = d3()+1;if (iAbil==6)iAbil=2; break;} // 5-6
+ }
+
+ ipAdd = ItemPropertyAbilityBonus(iType, iAbil);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void MiscImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iRoll;
+
+ switch (iRange)
+ {
+ case 1:
+ {
+ iRoll = Random(43);
+
+ if (iRoll==1)ipAdd = ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_WHITE);
+ if (iRoll==2)ipAdd = ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_BLUE);
+ if (iRoll==3)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
+ if (iRoll==4)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==5)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==6)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
+ if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
+ if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
+ if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
+ if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
+ if (iRoll==14)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
+ if (iRoll==15)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
+ if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
+ if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
+ if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
+ if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
+ if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
+ if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
+ if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
+ if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
+ if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
+ if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
+ if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SNEAK_ATTACK_1D6);
+ if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
+ if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
+ if (iRoll==30)ipAdd = ItemPropertyBonusFeat(32);
+ if (iRoll==31)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_5_PERCENT);
+ if (iRoll==32)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
+ if (iRoll==33)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 2);
+ if (iRoll==34)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 2);
+ if (iRoll==35)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 2);
+ if (iRoll==36)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 2);
+ if (iRoll==37)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 2);
+ if (iRoll==38)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 3);
+ if (iRoll==39)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 3);
+ if (iRoll==40)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 3);
+ if (iRoll==41)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 3);
+ if (iRoll==42)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 3);
+ if (iRoll==43)ipAdd = ItemPropertyImmunityToSpellLevel(1);
+ }
+ break;
+ case 2:
+ {
+ iRoll = Random(43);
+ if (iRoll==1)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_PERSON);
+ if (iRoll==2)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, 2);
+ if (iRoll==3)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
+ if (iRoll==4)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==5)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==6)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
+ if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
+ if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
+ if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
+ if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
+ if (iRoll==14)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
+ if (iRoll==15)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
+ if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
+ if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
+ if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
+ if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
+ if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
+ if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
+ if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
+ if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
+ if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
+ if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
+ if (iRoll==27)ipAdd = ItemPropertyBonusFeat(32);
+ if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
+ if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
+ if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_POWERATTACK);
+ if (iRoll==31)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
+ if (iRoll==32)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
+ if (iRoll==33)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 3);
+ if (iRoll==34)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 3);
+ if (iRoll==35)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 3);
+ if (iRoll==36)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 3);
+ if (iRoll==37)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 3);
+ if (iRoll==38)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 4);
+ if (iRoll==39)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 4);
+ if (iRoll==40)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 4);
+ if (iRoll==41)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 4);
+ if (iRoll==42)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 4);
+ if (iRoll==43)ipAdd = ItemPropertyImmunityToSpellLevel(1);
+ }
+ break;
+ case 3:
+ {
+ iRoll = Random(56);
+ if (iRoll==1)ipAdd = ItemPropertyDarkvision();
+ if (iRoll==2)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN);
+ if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(1);
+ if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
+ if (iRoll==5)ipAdd = ItemPropertyRegeneration(1);
+ if (iRoll==6)ipAdd = ItemPropertyDarkvision();
+ if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
+ if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
+ if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
+ if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
+ if (iRoll==15)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
+ if (iRoll==16)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
+ if (iRoll==17)ipAdd = ItemPropertyBonusFeat(32);
+ if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
+ if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
+ if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
+ if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
+ if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
+ if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
+ if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
+ if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
+ if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
+ if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
+ if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
+ if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
+ if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
+ if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
+ if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
+ if (iRoll==35)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_15_PERCENT);
+ if (iRoll==36)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==37)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==38)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==39)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==40)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
+ if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
+ if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
+ if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
+ if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
+ if (iRoll==46)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 4);
+ if (iRoll==47)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 4);
+ if (iRoll==48)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 4);
+ if (iRoll==49)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 4);
+ if (iRoll==50)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 4);
+ if (iRoll==51)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 5);
+ if (iRoll==52)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 5);
+ if (iRoll==53)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 5);
+ if (iRoll==54)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 5);
+ if (iRoll==55)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 5);
+ if (iRoll==56)ipAdd = ItemPropertyImmunityToSpellLevel(1);
+ }
+ break;
+ case 4:
+ {
+ iRoll = Random(72);
+ if (iRoll==1)ipAdd = ItemPropertyDarkvision();
+ if (iRoll==2)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
+ if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(3);
+ if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 3);
+ if (iRoll==5)ipAdd = ItemPropertyRegeneration(1);
+ if (iRoll==6)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
+ if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FIREBALL);
+ if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOOM);
+ if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS);
+ if (iRoll==10)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 1);
+ if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_METEOR_SWARM);
+ if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
+ if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY);
+ if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SILENCE);
+ if (iRoll==15)ipAdd = ItemPropertyBonusFeat(33);
+ if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
+ if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
+ if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
+ if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
+ if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
+ if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
+ if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
+ if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
+ if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
+ if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
+ if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
+ if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
+ if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
+ if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
+ if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_RAPID_SHOT);
+ if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SHIELD_PROFICIENCY);
+ if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
+ if (iRoll==35)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_20_PERCENT);
+ if (iRoll==36)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==37)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==38)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==39)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==40)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
+ if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
+ if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
+ if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
+ if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
+ if (iRoll==46)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
+ if (iRoll==47)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==48)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
+ if (iRoll==49)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==50)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==51)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==52)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
+ if (iRoll==53)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
+ if (iRoll==54)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
+ if (iRoll==55)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
+ if (iRoll==56)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERVATION);
+ if (iRoll==57)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERGY_DRAIN);
+ if (iRoll==58)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FINGER_OF_DEATH);
+ if (iRoll==59)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 5);
+ if (iRoll==60)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 5);
+ if (iRoll==61)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 5);
+ if (iRoll==62)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 5);
+ if (iRoll==63)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 5);
+ if (iRoll==64)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 6);
+ if (iRoll==65)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 6);
+ if (iRoll==66)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 6);
+ if (iRoll==67)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 6);
+ if (iRoll==68)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
+ if (iRoll==69)ipAdd = ItemPropertyImmunityToSpellLevel(2);
+ if (iRoll==70)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 7);
+ if (iRoll==71)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 7);
+ if (iRoll==72)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 7);
+ if (iRoll==73)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 7);
+ }
+ break;
+ case 5:
+ {
+ iRoll = Random(86);
+ if (iRoll==1)ipAdd = ItemPropertyDarkvision();
+ if (iRoll==2)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, 3);
+ if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(2);
+ if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 3);
+ if (iRoll==5)ipAdd = ItemPropertyRegeneration(2);
+ if (iRoll==6)ipAdd = ItemPropertyRegeneration(1);
+ if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS);
+ if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HEAL);
+ if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_IMPLOSION);
+ if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HARM);
+ if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_METEOR_SWARM);
+ if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
+ if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY);
+ if (iRoll==15)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_STORM_OF_VENGEANCE);
+ if (iRoll==16)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WAIL_OF_THE_BANSHEE);
+ if (iRoll==17)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WORD_OF_FAITH);
+ if (iRoll==18)ipAdd = ItemPropertyBonusFeat(33);
+ if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
+ if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
+ if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
+ if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
+ if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
+ if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
+ if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
+ if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
+ if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
+ if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
+ if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
+ if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
+ if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
+ if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
+ if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
+ if (iRoll==35)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_RAPID_SHOT);
+ if (iRoll==36)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SHIELD_PROFICIENCY);
+ if (iRoll==37)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
+ if (iRoll==38)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_TWO_WEAPON_FIGHTING);
+ if (iRoll==39)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_30_PERCENT);
+ if (iRoll==40)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_35_PERCENT);
+ if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
+ if (iRoll==46)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
+ if (iRoll==47)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
+ if (iRoll==48)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
+ if (iRoll==49)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
+ if (iRoll==50)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
+ if (iRoll==51)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
+ if (iRoll==52)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
+ if (iRoll==53)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
+ if (iRoll==54)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
+ if (iRoll==55)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
+ if (iRoll==56)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
+ if (iRoll==57)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
+ if (iRoll==58)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
+ if (iRoll==59)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
+ if (iRoll==60)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
+ if (iRoll==61)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERVATION);
+ if (iRoll==62)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERGY_DRAIN);
+ if (iRoll==63)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FINGER_OF_DEATH);
+ if (iRoll==64)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 6);
+ if (iRoll==65)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 6);
+ if (iRoll==66)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 6);
+ if (iRoll==67)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 6);
+ if (iRoll==68)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
+ if (iRoll==69)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 7);
+ if (iRoll==70)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 7);
+ if (iRoll==71)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 7);
+ if (iRoll==72)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 7);
+ if (iRoll==73)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 7);
+ if (iRoll==74)ipAdd = ItemPropertyImmunityToSpellLevel(2);
+ if (iRoll==75)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 8);
+ if (iRoll==76)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 8);
+ if (iRoll==77)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 8);
+ if (iRoll==78)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 8);
+ if (iRoll==79)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
+ if (iRoll==80)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 9);
+ if (iRoll==81)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 9);
+ if (iRoll==82)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 9);
+ if (iRoll==83)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 9);
+ if (iRoll==84)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 7);
+ }
+ break;
+ }
+
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void SaveImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ int iAbil;
+ int iType;
+ int iRoll = d6();
+
+ switch (iRoll)
+ {
+ case 1: iType = IP_CONST_SAVEBASETYPE_FORTITUDE; break;
+ case 2: iType = IP_CONST_SAVEBASETYPE_REFLEX; break;
+ case 3: iType = IP_CONST_SAVEBASETYPE_WILL; break;
+ case 4: iType = IP_CONST_SAVEBASETYPE_FORTITUDE; break;
+ case 5: iType = IP_CONST_SAVEBASETYPE_REFLEX; break;
+ case 6: iType = IP_CONST_SAVEBASETYPE_WILL; break;
+ }
+
+ switch (iRange)
+ {
+ case 1: {iAbil = d3(); if (iAbil==3)iAbil=1; break;} // 1-2
+ case 2: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 2-3
+ case 3: {iAbil = d3();if (iAbil==5)iAbil=1; break;} // 3-4
+ case 4: {iAbil = d3();if (iAbil==6)iAbil=2; break;} // 4-5
+ case 5: {iAbil = d3()+1;if (iAbil==7)iAbil=2; break;} // 5-6
+ }
+
+ ipAdd = ItemPropertyBonusSavingThrow(iType, iAbil);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void ImpEvasionImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyImprovedEvasion();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void TruseeingImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyTrueSeeing();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void DarkvisionImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyDarkvision();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void FreedomImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyFreeAction();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void RegenImbue(object oItem, int iRange)
+{
+ int iRegen;
+ itemproperty ipAdd;
+
+ switch (iRange)
+ {
+ case 1: {iRegen = d2();if (iRegen==3)iRegen=1; break;} //1-2
+ case 2: iRegen = d2(); break; //1-3
+ case 3: iRegen = d2(); break; //1-4
+ case 4: {iRegen = d2();if (iRegen==5)iRegen=2;break;} //2-4
+ case 5: iRegen = d2();break; //2-5
+ }
+
+ ipAdd = ItemPropertyRegeneration(iRegen);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void VampRegenImbue(object oItem, int iRange)
+{
+ int iRegen;
+ itemproperty ipAdd;
+
+ switch (iRange)
+ {
+ case 1: {iRegen = d3();if (iRegen==3)iRegen=1; break;} //1-2
+ case 2: iRegen = d3(); break; //1-3
+ case 3: iRegen = d3()+1; break; //1-4
+ case 4: {iRegen = d3()+1;if (iRegen==5)iRegen=3;break;} //2-4
+ case 5: iRegen = d3()+2;break; //2-5
+ }
+
+ ipAdd = ItemPropertyVampiricRegeneration(iRegen);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void EvilImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void HolyImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void FireImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_FIRE);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void ElecImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_ELECTRICAL);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void AcidImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_ACID);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void HasteImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyHaste();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void KeenImbue(object oItem)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyKeen();
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void WoundingImbue(object oItem, int iRange)
+{
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING, iRange-1, iRange);
+ IPSafeAddItemProperty(oItem, ipAdd);
+}
+
+void EchobladeImbue(object oItem) //:: PRC8
+{
+ if(!PRCGetBludgeoningWeapon(oItem))
+ {
+ itemproperty ipAdd;
+ ipAdd = ItemPropertyEchoblade();
+ IPSafeAddItemProperty(oItem, ipAdd);
+ }
+}
+
+void DropArmor (object oMob, object oSack, int iRange, int SockChance, int iChest)
+{
+ object oItem;
+ itemproperty ipAdd;
+ string sType, sIName, sName, sSocks, AbilName, ResName, HasteName;
+ int iQual = 0;
+ int iAbilQual = 0;
+ int iResQual = 0;
+ int iHasteQual = 0;
+ int iRoll = d10();
+
+ switch(iRoll)
+ {
+ case 1: sType = "sdarmor8"; break;
+ case 2: sType = "sdarmor7"; break;
+ case 3: sType = "sdarmor6"; break;
+ case 4: sType = "sdarmor5"; break;
+ case 5: sType = "sdarmor4"; break;
+ case 6: sType = "sdarmor3"; break;
+ case 7: sType = "sdarmor2"; break;
+ case 8: sType = "sdarmor1"; break;
+ case 9: sType = "sdarmor0"; break;
+ case 10: sType = "sdarmor02"; break;
+ }
+ oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
+
+ // chance for socketed item
+ iRoll = d100();
+ if (iRoll < SockChance)
+ {
+ iRoll=d6();
+ SetLocalInt(oItem, "SOCKETS", iRoll);
+ sSocks = IntToString(iRoll);
+ ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
+ IPSafeAddItemProperty(oItem, ipAdd);
+
+ sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
+ SetName(oItem, sName);
+ return;
+ }
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) // chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll<=CHANCE_BROKEN&&iChest!=1) // chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+//////////////////////////////////////////// Lvls 1-5
+
+//:: AC bonus
+ DelayCommand(0.2, ACimbue(oItem, iRange, 0));
+ ++iQual;
+
+//:: Ability bonus
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+////////////////////////////////////////// Lvls 6-10
+
+ if (iRange==2)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+ //:: Misc
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2,MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll > 85)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ iRoll = d100();
+ if (iRoll > 97)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20
+
+ if (iRange==3)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll>89)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ //::: Misc
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ // Misc Immunity
+ // iRoll = d100();
+ // if (iRoll>90)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ // }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ ++iHasteQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30
+
+ if (iRange==4)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+ //:: Damage Res bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ //:: Misc
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ // Misc Immunity
+ // iRoll = d100();
+ // if (iRoll>75)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ // }
+
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ ++iHasteQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40
+
+ if (iRange==5)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll > 50)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+
+ if (iRoll > 70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+ if (iRoll > 85)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ ++iAbilQual;
+ }
+
+ //:: Damage Res bonus x 3
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ iRoll = d100();
+ if (iRoll > 70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+ iRoll = d100();
+ if (iRoll > 90)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ ++iResQual;
+ }
+
+ //:: Misc
+ iRoll = d100();
+ if (iRoll > 70)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 75)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ // Misc Immunity
+ // iRoll = d100();
+ // if (iRoll>70)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ }
+
+ // iRoll = d100();
+ // if (iRoll>75)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ // }
+
+ // iRoll = d100();
+ // if (iRoll>90)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ // }
+
+
+ // iRoll = d100();
+ // if (iRoll>95)
+ // {
+ // DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ // ++iQual;
+ // }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ ++iHasteQual;
+ }
+
+ DelayCommand(0.4, ChangeArmor(oItem, iRandomShoulder, iRandomBicep, iRandomForearm, iRandomHand, iRandomThigh, iRandomShins, iRandomFeet, iRandomPelvis, iRandomBelt, iRandomNeck, iRandomChest, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, oSack));
+
+
+ switch(iAbilQual)
+ {
+ case 1: AbilName = ColorString(" Neophyte", 1, 255, 1);break;
+ case 2: AbilName = ColorString(" Journeyman", 1, 255, 1);break;
+ case 3: AbilName = ColorString(" Seraphim", 1, 255, 255);break;
+ case 4: AbilName = ColorString(" Archon", 1, 255, 255);break;
+ case 5: AbilName = ColorString(" Paragon", 1, 255, 255);break;
+ }
+ switch(iResQual)
+ {
+ case 0: ResName = ColorString(" Guarded", 255, 255, 255);break;
+ case 1: ResName = ColorString(" Stout", 1, 255, 1);break;
+ case 2: ResName = ColorString(" Resilient", 1, 255, 1);break;
+ case 3: ResName = ColorString(" Sentinel", 1, 255, 255);break;
+ case 4: ResName = ColorString(" Inpenetrable", 1, 255, 255);break;
+ }
+ switch(iHasteQual)
+ {
+ case 1: HasteName = "Swift "; break;
+ }
+ switch(iQual)
+ {
+ case 1: sName = ColorString(HasteName + "Magical Armour ",255, 255, 255) + "of the" + ResName + AbilName; break;
+ case 2: sName = ColorString(HasteName + "Enchanted Armour ", 30, 180, 30)+ "of the" + ResName + AbilName; break;
+ case 3: sName = ColorString(HasteName + "Enchanted Armour ", 30, 180, 30)+ "of the" + ResName + AbilName; break;
+ case 4: sName = ColorString(HasteName + "Imbued Armour ", 5, 90, 255)+ "of the" + ResName + AbilName; break;
+ case 5: sName = ColorString(HasteName + "Imbued Armour ", 5, 90, 255)+ "of the" + ResName + AbilName; break;
+ case 6: sName = ColorString(HasteName + "Planar Armour ", 185, 1, 200)+ "of the" + ResName + AbilName; break;
+ case 7: sName = ColorString(HasteName + "Planar Armour ", 185, 1, 200)+ "of the" + ResName + AbilName; break;
+ case 8: sName = ColorString(HasteName + "Divine Armour ", 255, 245, 210)+ "of the" + ResName + AbilName; break;
+ case 9: sName = ColorString(HasteName + "Divine Armour ", 255, 245, 210)+ "of the" + ResName + AbilName; break;
+ case 10: sName = ColorString(HasteName + "Ancient Armour ", 180, 180, 80)+ "of the" + ResName + AbilName; break;
+ }
+
+ DelayCommand(0.4,SetName(oItem, sName));
+}
+
+void DropShield (object oMob, object oSack, int iRange, int SockChance, int iChest)
+{
+ object oItem;
+ itemproperty ipAdd;
+ string sType, sName, sIName, sSocks;
+ int iQual = 0;
+ int iRoll = d20();
+
+ switch(iRoll)
+ {
+ case 1: {sType = "sdTower1"; sIName = "Targe";} break;
+ case 2: {sType = "sdLarge1"; sIName = "Wooden Shield";} break;
+ case 3: {sType = "sdSmall1"; sIName = "Buckler";} break;
+ case 4: {sType = "sdTower2"; sIName = "Deflector";} break;
+ case 5: {sType = "sdLarge2"; sIName = "Protector";} break;
+ case 6: {sType = "sdSmall2"; sIName = "Heater";} break;
+ case 7: {sType = "sdTower3"; sIName = "Defender";} break;
+ case 8: {sType = "sdLarge3"; sIName = "Reinforced Shield";} break;
+ case 9: {sType = "sdSmall3"; sIName = "Arm Blocker";} break;
+ case 10: {sType = "sdTower4"; sIName = "Centurion";} break;
+ case 11: {sType = "sdLarge4"; sIName = "Iron Shield";} break;
+ case 12: {sType = "sdLarge5"; sIName = "Medium Shield";} break;
+ case 13: {sType = "sdLarge6"; sIName = "Vanguards Brace";} break;
+ case 14: {sType = "sdLarge7"; sIName = "Protector";} break;
+ case 15: {sType = "sdLarge8"; sIName = "Kite Shield";} break;
+ case 16: {sType = "sdLarge9"; sIName = "Protector";} break;
+ case 17: {sType = "sdLarge10"; sIName = "Kite Shield";} break;
+ case 18: {sType = "sdSmall3"; sIName = "Buckler";} break;
+ case 19: {sType = "sdTower2"; sIName = "Gothic Shield";} break;
+ case 20: {sType = "sdSmall1"; sIName = "Heater";} break;
+ }
+
+ oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
+
+ // chance for socketed item
+
+ iRoll = d100();
+ if (iRoll < SockChance)
+ {
+ iRoll=d6();
+ SetLocalInt(oItem, "SOCKETS", iRoll);
+ sSocks = IntToString(iRoll);
+ ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
+ IPSafeAddItemProperty(oItem, ipAdd);
+
+ sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
+ SetName(oItem, sName);
+ return;
+ }
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) // chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) // chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+//////////////////////////////////////////// Lvls 1-5
+
+//:: Ac bonus
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+
+////////////////////////////////////////// Lvls 6-10
+
+ if (iRange==2)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ // Save
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20
+
+ if (iRange==3)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Saves
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30
+
+ if (iRange==4)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Misc
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Saves
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40
+
+ if (iRange==5)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ //:: Damage Res bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Misc
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>94)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ }
+
+ switch(iQual)
+ {
+ case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
+ case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
+ case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
+ case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
+ case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
+ case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
+ case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
+ case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
+ case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
+ case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
+ }
+
+ SetName(oItem, sName);
+}
+
+void DropMagicItem (object oMob, object oSack, int iRange, int SockChance, int iChest)
+{
+ string sType, sName, sIName, sSocks;
+ object oItem;
+ itemproperty ipAdd;
+ int iID = 0;
+ int iQual = 0;
+ int iRoll = d20();
+
+ switch(iRoll)
+ {
+ case 1: {sType = "sdammy1"; sIName = "Amulet";iID = 1;} break;
+ case 2: {sType = "sdring1"; sIName = "Ring";iID = 2;} break;
+ case 3: {sType = "sdboots1"; sIName = "Boots";iID = 1;}break;
+ case 4: {sType = "sdbracers1"; sIName = "Wristband";} break;
+ case 5: {sType = "sdhelm1"; sIName = "Helm";} break;
+ case 6: {sType = "sdcloak1"; sIName = "Cloak";iID = 1;} break;
+ case 7: {sType = "sdbelt1"; sIName = "Belt";} break;
+ case 8: {sType = "sdammy2"; sIName = "Talisman";iID = 1;} break;
+ case 9: {sType = "sdring2"; sIName = "Band";iID = 2;} break;
+ case 10: {sType = "sdboots2"; sIName = "Sabatons";iID = 1;} break;
+ case 11: {sType = "sdbracers2"; sIName = "Bracers";} break;
+ case 12: {sType = "sdhelm2"; sIName = "Visor";} break;
+ case 13: {sType = "sdcloak2"; sIName = "Cape";iID = 1;} break;
+ case 14: {sType = "sdbelt2"; sIName = "Thick Belt";} break;
+ case 15: {sType = "sdammy3"; sIName = "Charm";iID = 1;} break;
+ case 16: {sType = "sdring3"; sIName = "Circle";iID = 2;} break;
+ case 17: {sType = "sdboots3"; sIName = "Greaves";iID = 1;} break;
+ case 18: {sType = "sdbracers3"; sIName = "Armband";} break;
+ case 19: {sType = "sdhelm3"; sIName = "Vanguard";} break;
+ case 20: {sType = "sdring4"; sIName = "Coil";iID = 2;} break;
+ }
+
+//:: Chance for socketed item
+
+ oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
+
+ iRoll = d100();
+ if (iRoll < SockChance)
+ {
+ iRoll=d6();
+ SetLocalInt(oItem, "SOCKETS", iRoll);
+ sSocks = IntToString(iRoll);
+ ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
+ IPSafeAddItemProperty(oItem, ipAdd);
+
+ sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
+ SetName(oItem, sName);
+ return;
+ }
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+///////////////////////////////////////////// Hench Reward Code
+
+ object oPC = GetFirstPC();
+
+ if (GetMaster(oMob)!=OBJECT_INVALID)
+ {
+ SetIdentified(oItem, TRUE);
+ SetItemCursedFlag(oItem, TRUE);
+ }
+
+//////////////////////////////////////////// Lvls 1-5
+ if (iRange == 1)
+ {
+ //:: AC bonus for ammy, cloak & boots or ability bonus otherwise
+ iRoll = d100();
+ if (iID == 1)
+ {
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+ }
+ if (iID == 2) //:: Rings
+ {
+ if (iRoll > 94) //:: 5% Chance for Divinty / Wizardry
+ {
+ iRoll = d2(1);
+ if (iRoll == 1)
+ {
+ DelayCommand(0.2, ImbueWizardry(oItem, iRange));
+ iQual+=3;
+ }
+ else
+ {
+ DelayCommand(0.2, ImbueDivinity(oItem, iRange));
+ iQual+=3;
+ }
+ }
+ }
+ else
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ }
+
+////////////////////////////////////////// Lvls 6-10
+
+ if (iRange == 2)
+ {
+ //:: Ability bonus &/or AC Bonus
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Rings ONLY
+ if (iID==2)
+ {
+ iRoll = d100();
+ if (iRoll > 94) //:: 5% Chance for Divinty / Wizardry
+ {
+ iRoll = d2(1);
+ if (iRoll == 1)
+ {
+ DelayCommand(0.2, ImbueWizardry(oItem, iRange));
+ iQual+=3;
+ }
+ else
+ {
+ DelayCommand(0.2, ImbueDivinity(oItem, iRange));
+ iQual+=3;
+ }
+ }
+ else if (iRoll > 65) //:: 30% Chance for spell slots
+ {
+ iRoll = d3(); // 1-3 slots
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ iQual+=2;
+ }
+ }
+ else
+ {//:: Else, Saving Throw bonuses
+ iRoll = d100();
+ if (iRoll > 89)
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ }
+
+////////////////////////////////////////// Lvls 11-20
+
+ if (iRange == 3)
+ {
+ //:: Ability bonus &/or AC Bonus
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Rings ONLY
+ if (iID==2)
+ {
+ iRoll = d100();
+ if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
+ {
+ iRoll = d2(1);
+ if (iRoll == 1)
+ {
+ DelayCommand(0.2, ImbueWizardry(oItem, iRange));
+ iQual+=3;
+ }
+ else
+ {
+ DelayCommand(0.2, ImbueDivinity(oItem, iRange));
+ iQual+=3;
+ }
+ }
+ else if (iRoll > 59) //:: 30% Chance for spell slots
+ {
+ iRoll = d3()+1; // 2-4 slots
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ iQual+=2;
+ }
+ }
+ else
+ {//:: Misc Immunity
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ iQual+=2;
+ }
+ //:: Saving Throw Bonuses
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30
+
+ if (iRange == 4)
+ {
+ //:: 2x Ability bonus &/or AC Bonus
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Rings ONLY
+ if (iID==2)
+ {
+ iRoll = d100();
+ if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
+ {
+ iRoll = d2(1);
+ if (iRoll == 1)
+ {
+ DelayCommand(0.2, ImbueWizardry(oItem, iRange));
+ iQual+=3;
+ }
+ else
+ {
+ DelayCommand(0.2, ImbueDivinity(oItem, iRange));
+ iQual+=3;
+ }
+ }
+ else if (iRoll > 59) //:: 30% Chance for spell slots
+ {
+ iRoll = d4()+2; // 3-6 slots
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ iQual+=2;
+ }
+ }
+ else
+ {//:: Misc Itemprop
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Misc Immunity
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ iQual+=2;
+ }
+ //:: Damage Res bonus
+ iRoll = d100();
+ if (iRoll > 80)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Saving Throw Bonuses
+ iRoll = d100();
+ if (iRoll > 70)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40
+
+ if (iRange == 5)
+ {
+ //:: 2x Ability bonus &/or AC Bonus
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, ACmisc(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 55)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Res bonus x 2
+ iRoll = d100();
+ if (iRoll > 70)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll >75)
+ {
+ DelayCommand(0.2, RESimbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Rings ONLY
+ if (iID==2)
+ {
+ iRoll = d100();
+ if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
+ {
+ iRoll = d2(1);
+ if (iRoll == 1)
+ {
+ DelayCommand(0.2, ImbueWizardry(oItem, iRange));
+ iQual+=3;
+ }
+ else
+ {
+ DelayCommand(0.2, ImbueDivinity(oItem, iRange));
+ iQual+=3;
+ }
+ }
+ else if (iRoll > 59) //:: 30% Chance for spell slots
+ {
+ iRoll = d6()+2; // 3-8 slots
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ iQual+=2;
+ }
+ }
+ else
+ //:: Misc
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MiscImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Misc Immunity
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, MIMMimbue(oItem, iRange));
+ iQual+=2;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+ switch(iQual)
+ {
+ case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
+ case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
+ case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
+ case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
+ case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
+ case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
+ case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
+ case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
+ case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
+ case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
+ }
+
+ SetName(oItem, sName);
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_CLOAK)
+ {
+ DelayCommand(0.4, ColorHelmClk(oItem, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, iRandomCloak, oSack));
+ }
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_HELMET)
+ {
+ DelayCommand(0.4, ColorHelmClk(oItem, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, iRandomHelmet, oSack));
+ }
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_RING)
+ {
+ DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandRing, oSack));
+ }
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_BELT)
+ {
+ DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandBelt, oSack));
+ }
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_AMULET)
+ {
+ DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandAmulet, oSack));
+ }
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_BRACER)
+ {
+ DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandBracer, oSack));
+ }
+}
+
+void DropMonkGloves (object oMob, object oSack, int iRange, int SockChance, int iChest)
+{
+ object oItem;
+ itemproperty ipAdd;
+ string sType, sName, sIName, sSocks;
+ int iDice1, iDice2, iRoll;
+ int iQual;
+ int iWType = 0;
+
+ iRoll = d6();
+ switch (iRoll)
+ {
+ case 1: sType = "sd_mgloves"; break;
+ case 2: sType = "sd_mgloves1"; break;
+ case 3: sType = "sd_mgloves2"; break;
+ case 4: sType = "sd_mgloves3"; break;
+ case 5: sType = "sd_mgloves4"; break;
+ case 6: sType = "sd_mgloves5"; break;
+ }
+
+ iRoll = d20();
+ switch (iRoll)
+ {
+ case 1: sIName = "War Talons"; break;
+ case 2: sIName = "Blood Claws"; break;
+ case 3: sIName = "Pulverizers"; ;break;
+ case 4: sIName = "Ninja Claws"; break;
+ case 5: sIName = "War Gloves"; break;
+ case 6: sIName = "Flesh Knuckles"; break;
+ case 7: sIName = "Death Mitts"; break;
+ case 8: sIName = "Palm Guards"; break;
+ case 9: sIName = "Knuckledusters"; ;break;
+ case 10: sIName = "Tiger Fists"; break;
+ case 11: sIName = "Tauntlets"; break;
+ case 12: sIName = "Chi Bracelets"; break;
+ case 13: sIName = "Dragon Claws"; break;
+ case 14: sIName = "Steel Palms"; break;
+ case 15: sIName = "Exploding Fists"; break;
+ case 16: sIName = "Nose Breakers"; break;
+ case 17: sIName = "Stiff Fingers"; ;break;
+ case 18: sIName = "Heart Piercers"; break;
+ case 19: sIName = "Digit Devastators"; break;
+ case 20: sIName = "Gore Gauntlets"; break;
+ }
+
+ oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
+
+ //:: Monk
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+//////////////////////////////////////////// Lvls 1-5 ::Monk2::
+
+ //:: Attack bonus
+ DelayCommand(0.2, BowEnhance(oItem, iRange));
+ ++iQual;
+
+////////////////////////////////////////// Lvls 6-10 ::Monk2::
+
+ if (iRange==2)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll==98)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20 ::Monk2::
+
+ if (iRange==3)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 2
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>55)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //::: Haste
+ iRoll = d100();
+ if (iRoll>=95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Monk2::
+
+ if (iRange==4)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 3
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Monk2::
+
+ if (iRange==5)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 3
+ iRoll = d100();
+ if (iRoll>30)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>92)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=90)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+ switch(iQual)
+ {
+ case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
+ case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
+ case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
+ case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
+ case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
+ case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
+ case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
+ case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
+ case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
+ case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
+ }
+
+ SetName(oItem, sName);
+ SetIdentified(oItem, FALSE);
+ DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandGauntlet, oSack));
+}
+
+void DropWeapon (object oMob, object oSack, int iRange, int SockChance, int iChest)
+{
+ object oItem;
+ itemproperty ipAdd;
+ string sType, sName, sIName, sSocks, DType;
+ int iRoll;
+ int iQual = 0;
+ int iWType = 0;
+
+ iRoll = Random(54)+1;
+ switch(iRoll)
+ {
+ //:: Axes
+ case 1:
+ {
+ sType = "sdgaxe"; iRoll = d3();
+
+ if (iRoll==1)sIName = "Greataxe";
+ if (iRoll==2)sIName = "Two Handed Axe";
+ if (iRoll==3)sIName = "Executioner's Axe";
+ }
+ break;
+ case 2:
+ {
+ sType = "sdwaxe"; iRoll = d3();
+
+ if (iRoll==1)sIName = "Dwarven War Axe";
+ if (iRoll==2)sIName = "War Axe";
+ if (iRoll==3)sIName = "Broad Axe";
+ }
+ break;
+ case 3:
+ {
+ sType = "sdbaxe"; iRoll = d3();
+ if (iRoll==1)sIName = "Battleaxe";
+ if (iRoll==2)sIName = "Berserker Axe";
+ if (iRoll==3)sIName = "Siege Axe";
+ }
+ break;
+ case 4:
+ {
+ sType = "sdhaxe"; iRoll = d3();
+ if (iRoll==1)sIName = "Handaxe";
+ if (iRoll==2)sIName = "Cleaver";
+ if (iRoll==3)sIName = "Tomahawk";
+ }
+ break;
+
+ //:: Bladed
+ case 5:
+ {
+ sType = "sd_bastard"; iRoll = d3();
+ if (iRoll==1)sIName = "Bastard Sword";
+ if (iRoll==2)sIName = "War Sword";
+ if (iRoll==3)sIName = "Arming Sword";
+ }
+ break;
+ case 6:
+ {
+ sType = "sdlsword"; iRoll = d3();
+ if (iRoll==1)sIName = "Longsword";
+ if (iRoll==2)sIName = "Knight's Sword";
+ if (iRoll==3)sIName = "Broadsword ";
+ }
+ break;
+ case 7:
+ { //:: Falchion
+ sType = "prc_wswfa001"; iRoll = d3();
+ if (iRoll==1)sIName = "Falchion";
+ if (iRoll==2)sIName = "Nagamaki";
+ if (iRoll==3)sIName = "Chopper";
+ }
+ break;
+ case 8:
+ {
+ sType = "sdssword"; iRoll = d3();
+ if (iRoll==1)sIName = "Short Sword";
+ if (iRoll==2)sIName = "Gladius";
+ if (iRoll==3)sIName = "Xiphos";
+ }
+ break;
+ case 9:
+ {
+ sType = "sdgsword"; iRoll = d3();
+ if (iRoll==1)sIName = "Greatsword";
+ if (iRoll==2)sIName = "Claymore";
+ if (iRoll==3)sIName = "Linebreaker";
+ }
+ break;
+ case 10:
+ {
+ sType = "sdkatana"; iRoll = d3();
+ if (iRoll==1)sIName = "Katana";
+ if (iRoll==2)sIName = "Samurai Sword";
+ if (iRoll==3)sIName = "Nihonto";
+ }
+ break;
+ case 11:
+ {
+ sType = "sdscim"; iRoll = d3();
+ if (iRoll==1)sIName = "Scimitar";
+ if (iRoll==2)sIName = "Shamshir";
+ if (iRoll==3)sIName = "Talwar";
+ }
+ break;
+ case 12:
+ {
+ sType = "sdrapier"; iRoll = d3();
+ if (iRoll==1)sIName = "Rapier";
+ if (iRoll==2)sIName = "Sabre";
+ if (iRoll==3)sIName = "Court Sword";
+ }
+ break;
+ case 13:
+ {
+ sType = "sddagger"; iRoll = d6();
+ if (iRoll==1)sIName = "Dagger";
+ if (iRoll==2)sIName = "Dirk";
+ if (iRoll==3)sIName = "Knife";
+ if (iRoll==4)sIName = "Stiletto";
+ if (iRoll==5)sIName = "Poignard";
+ if (iRoll==6)sIName = "Main-gauche";
+ }
+ break;
+
+ //:: Exotic
+ case 14:
+ {
+ sType = "sdstaff3"; iRoll = d3();
+ iWType = 2;
+ if (iRoll==1)sIName = "Arcane Staff";
+ if (iRoll==2)sIName = "Runic Staff ";
+ if (iRoll==3)sIName = "Spellstaff ";
+ }
+ break;
+ case 15:
+ {
+ sType = "sdkama"; iRoll = d3();
+ if (iRoll==1)sIName = "Kama";
+ if (iRoll==2)sIName = "Monk Claw";
+ if (iRoll==3)sIName = "Ripper";}
+ break;
+ case 16:
+ {
+ sType = "sdkukri"; iRoll = d3();
+ if (iRoll==1)sIName = "Kukri";
+ if (iRoll==2)sIName = "Machete";
+ if (iRoll==3)sIName = "Scorpion Tail";
+ }
+ break;
+ case 17:
+ {
+ sType = "sdlbow"; iRoll = d3();
+ iWType = 1;
+ if (iRoll==1)sIName = "Longbow";
+ if (iRoll==2)sIName = "Warbow";
+ if (iRoll==3)sIName = "Greatbow";
+ }
+ break;
+
+ //:: Blunt
+ case 18:
+ {
+ sType = "sdclub"; iRoll = d3();
+ if (iRoll==1)sIName = "Club";
+ if (iRoll==2)sIName = "Baton";
+ if (iRoll==3)sIName = "Truncheon";
+ }
+ break;
+ case 19:
+ {
+ sType = "sdhflail"; iRoll = d3();
+ if (iRoll==1)sIName = "Heavy Flail";
+ if (iRoll==2)sIName = "War Flail";
+ if (iRoll==3)sIName = "Bastard Flail";
+ }
+ break;
+ case 20:
+ {
+ sType = "sdlflail"; iRoll = d3();
+ if (iRoll==1)sIName = "Light Flail";
+ if (iRoll==2)sIName = "Chain Mace";
+ if (iRoll==3)sIName = "Infanty Flail";
+ }
+ break;
+ case 21:
+ {
+ sType = "sdstaff1"; iRoll = d3();
+ iWType = 2;
+ if (iRoll==1)sIName = "Magestaff";
+ if (iRoll==2)sIName = "Mystic Staff";
+ if (iRoll==3)sIName = "Wyrdstaff ";
+ }
+ break;
+ case 22:
+ {
+ sType = "sdwhamm"; iRoll = d3();
+ if (iRoll==1)sIName = "Warhammer";
+ if (iRoll==2)sIName = "Battlehammer";
+ if (iRoll==3)sIName = "Earthshaker";
+ }
+ break;
+ case 23:
+ {
+ sType = "sdmace"; iRoll = d3();
+ if (iRoll==1)sIName = "Light Mace";
+ if (iRoll==2)sIName = "Flanged Mace";
+ if (iRoll==3)sIName = "Cudgel";
+ }
+ break;
+ case 24:
+ {
+ sType = "sdmstar"; iRoll = d3();
+ if (iRoll==1)sIName = "Morningstar ";
+ if (iRoll==2)sIName = "Ball-and-Chain";
+ if (iRoll==3)sIName = "Warstar";
+ }
+ break;
+
+ //:: Double Sided
+ case 25:
+ {
+ sType = "sddbsword"; iRoll = d3();
+ if (iRoll==1)sIName = "Two-Bladed Sword";
+ if (iRoll==2)sIName = "Doublesword";
+ if (iRoll==3)sIName = "Twinblade";
+ }
+ break;
+ case 26:
+ {
+ sType = "sddsmace"; iRoll = d3();
+ if (iRoll==1)sIName = "Dire Mace";
+ if (iRoll==2)sIName = "Double Mace";
+ if (iRoll==3)sIName = "Twin Basher";
+ }
+ break;
+ case 27:
+ {
+ sType = "sddsaxe"; iRoll = d3();
+ if (iRoll==1)sIName = "Double Axe";
+ if (iRoll==2)sIName = "Crowd Cutter";
+ if (iRoll==3)sIName = "Dervish";
+ }
+ break;
+ case 28:
+ {
+ sType = "sdqstaff"; iRoll = d3();
+ if (iRoll==1)sIName = "Quarterstaff";
+ if (iRoll==2)sIName = "Battlestaff";
+ if (iRoll==3)sIName = "Bo";
+ }
+ break;
+
+ //:: Polearms
+ case 29:
+ {
+ sType = "sdhalberd"; iRoll = d4();
+ if (iRoll==1)sIName = "Halberd";
+ if (iRoll==2)sIName = "Poleaxe";
+ if (iRoll==3)sIName = "Glaive";
+ if (iRoll==3)sIName = "Bardiche";
+ }
+ break;
+ case 30:
+ {
+ sType = "sdscythe"; iRoll = d3();
+ if (iRoll==1)sIName = "Scythe";
+ if (iRoll==2)sIName = "Reaper";
+ if (iRoll==3)sIName = "Harvester";
+ }
+ break;
+ case 31:
+ {
+ sType = "sdspear"; iRoll = d3();
+ if (iRoll==1)sIName = "Spear";
+ if (iRoll==2)sIName = "Pike";
+ if (iRoll==3)sIName = "Harpoon";
+ }
+ break;
+
+ //:: Whip
+ case 32:
+ {
+ sType = "sdwhip"; iRoll = d3();
+ if (iRoll==1)sIName = "Whip";
+ if (iRoll==2)sIName = "Bullwhip";
+ if (iRoll==3)sIName = "Lash";
+ }
+ break;
+
+ //:: Ranged
+ case 33:
+ {
+ sType = "sdsbow"; iRoll = d3();
+ iWType = 1;
+ if (iRoll==1)sIName = "Shortbow";
+ if (iRoll==2)sIName = "Hunting Bow";
+ if (iRoll==3)sIName = "Lightbow";
+ }
+ break;
+ case 34:
+ {
+ sType = "sdlcbow"; iRoll = d3();
+ iWType = 1;
+ if (iRoll==1)sIName = "Light Crossbow";
+ if (iRoll==2)sIName = "Crossbow";
+ if (iRoll==3)sIName = "Traveler’s Crossbow";
+ }
+ break;
+ case 35:
+ {
+ sType = "sdhcbow"; iRoll = d3();
+ iWType = 1;
+ if (iRoll==1)sIName = "Heavy Crossbow";
+ if (iRoll==2)sIName = "Siege Crossbow";
+ if (iRoll==3)sIName = "Arbalest";
+ }
+ break;
+
+ //:: Mage
+ case 36:
+ {
+ sType = "sdlhamm"; iRoll = d3();
+ if (iRoll==1)sIName = "Light Hammer";
+ if (iRoll==2)sIName = "Forge Hammer";
+ if (iRoll==3)sIName = "Hand Hammer";
+ }
+ break;
+ case 37:
+ {
+ sType = "sdstaff2"; iRoll = d3();
+ iWType = 2;
+ if (iRoll==1)sIName = "Mystic Cane";
+ if (iRoll==2)sIName = "Thaumic Conduit";
+ if (iRoll==3)sIName = "Leyline Channeler";
+ }
+ break;
+ case 38:
+ {
+ sType = "sdsickle"; iRoll = d3();
+ if (iRoll==1)sIName = "Sickle";
+ if (iRoll==2)sIName = "Moonblade";
+ if (iRoll==3)sIName = "Crescent Blade";
+ }
+ break;
+ case 39:
+ {
+ sType = "sdmgloves"; iRoll = d3();
+ iWType = 3;
+ if (iRoll==1)sIName = "Gloves";
+ if (iRoll==2)sIName = "Fistwraps";
+ if (iRoll==3)sIName = "Gauntlets";
+ }
+ break;
+ //:: PRC / CEP Weapons
+ case 40:
+ { //:: Trident
+ sType = "nw_wpltr001"; iRoll = d3();
+ if (iRoll==1)sIName = "Trident";
+ if (iRoll==2)sIName = "Fork";
+ if (iRoll==3)sIName = "Fuscina";
+ }
+ break;
+ case 41:
+ { //:: Heavy Pick
+ sType = "prc_wblph001"; iRoll = d3();
+ if (iRoll==1)sIName = "Heavy Pick";
+ if (iRoll==2)sIName = "War Pick";
+ if (iRoll==3)sIName = "Mattock";
+ }
+ break;
+ case 42:
+ { //:: Light Pick
+ sType = "prc_wblpl001"; iRoll = d3();
+ if (iRoll==1)sIName = "Light Pick";
+ if (iRoll==2)sIName = "Hand Pick";
+ if (iRoll==3)sIName = "Rock Hammer";
+ }
+ break;
+ case 43:
+ { //:: Goad
+ sType = "prc_wspgd001"; iRoll = d3();
+ if (iRoll==1)sIName = "Goad";
+ if (iRoll==2)sIName = "Prong";
+ if (iRoll==3)sIName = "Prod";
+ }
+ break;
+ case 44:
+ { //:: Katar
+ sType = "prc_wswdp001"; iRoll = d3();
+ if (iRoll==1)sIName = "Katar";
+ if (iRoll==2)sIName = "Punch-dagger";
+ if (iRoll==3)sIName = "Tekpi";
+ }
+ break;
+ case 45:
+ { //:: Sai
+ sType = "prc_wswsi001"; iRoll = d3();
+ if (iRoll==1)sIName = "Sai";
+ if (iRoll==2)sIName = "Jitte";
+ if (iRoll==3)sIName = "Defender";
+ }
+ break;
+ case 46:
+ { //:: Eagle Claw
+ sType = "bdd_eagle_claw"; iRoll = d3();
+ if (iRoll==1)sIName = "Eagle Claw";
+ if (iRoll==2)sIName = "Claw";
+ if (iRoll==3)sIName = "Talon";
+ }
+ break;
+ case 47:
+ { //:: Elven Courtblade
+ sType = "prc_wspec001"; iRoll = d3();
+ if (iRoll==1)sIName = "Elven Courtblade";
+ if (iRoll==2)sIName = "Courtblade";
+ if (iRoll==3)sIName = "Elven Greatsword";
+ }
+ break;
+ case 48:
+ { //:: Elven Lightblade
+ sType = "prc_wspel001"; iRoll = d3();
+ if (iRoll==1)sIName = "Elven Lightblade";
+ if (iRoll==2)sIName = "Lightblade";
+ if (iRoll==3)sIName = "Elven Gladius";
+ }
+ break;
+ case 49:
+ { //:: Elven Thinblade
+ sType = "prc_wspet001"; iRoll = d3();
+ if (iRoll==1)sIName = "Elven Thinblade";
+ if (iRoll==2)sIName = "Thinblade";
+ if (iRoll==3)sIName = "Elven Epee";
+ }
+ break;
+ case 50:
+ { //:: Maul
+ sType = "prc_wxblma001"; iRoll = d3();
+ if (iRoll==1)sIName = "Maul";
+ if (iRoll==2)sIName = "Great Hammer";
+ if (iRoll==3)sIName = "Slegehammer";
+ }
+ break;
+ case 51:
+ { //:: Heavy Mace
+ sType = "prc_wxblmh001"; iRoll = d3();
+ if (iRoll==1)sIName = "Heavy Mace";
+ if (iRoll==2)sIName = "Footman’s Mace";
+ if (iRoll==3)sIName = "Pernach";
+ }
+ break;
+ case 52:
+ { //:: Nunchaku
+ sType = "prc_wblnn001"; iRoll = d3();
+ if (iRoll==1)sIName = "Nunchaku";
+ if (iRoll==2)sIName = "Thresher";
+ if (iRoll==3)sIName = "Split-club";
+ }
+ break;
+ case 53:
+ { //:: Sap
+ sType = "prc_wspsp001"; iRoll = d3();
+ if (iRoll==1)sIName = "Sap";
+ if (iRoll==2)sIName = "Blackjack";
+ if (iRoll==3)sIName = "Shot-sack";
+ }
+ break;
+ case 54:
+ { //:: Double Scimitar
+ sType = "prc_wxdbsc001"; iRoll = d3();
+ if (iRoll==1)sIName = "Double Scimitar";
+ if (iRoll==2)sIName = "Twin Sabre";
+ if (iRoll==3)sIName = "Double Shamshir";
+ }
+ break;
+ }
+
+//:: Chance for socketed item
+ oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
+
+ SetName(oItem, sIName);
+
+ iRoll = d100();
+ if (iRoll < SockChance)
+ {
+ iRoll=d6();
+ SetLocalInt(oItem, "SOCKETS", iRoll);
+ sSocks = IntToString(iRoll);
+ ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
+ IPSafeAddItemProperty(oItem, ipAdd);
+
+ sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
+ SetName(oItem, sName);
+ return;
+ }
+
+ if (iWType==1) //:: Ranged Weapons
+ {
+ iQual=0;
+
+ //:: Ranged
+
+ //:: Chance for worn or broken item
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+//////////////////////////////////////////// Lvls 1-5 ::Ranged::
+
+ //:: Attack bonus
+
+ DelayCommand(0.2, BowEnhance(oItem, iRange));
+ ++iQual;
+
+////////////////////////////////////////// Lvls 6-10 ::Ranged::
+
+ if (iRange==2)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Mighty
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, MightyEnhance(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll==95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20 ::Ranged::
+
+ if (iRange==3)
+ {
+ //:: Mighty
+ iRoll = d100();
+ if (iRoll>65)
+ {
+ DelayCommand(0.2, MightyEnhance(oItem, iRange));
+ ++iQual;
+ }
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>65)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>65)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra range damage bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, RangedImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Ranged::
+
+ if (iRange==4)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>55)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Mighty
+ iRoll = d100();
+ if (iRoll>55)
+ {
+ DelayCommand(0.2, MightyEnhance(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra ranged damage bonus
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, RangedImbue(oItem));
+ iQual+=2;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=90)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Ranged::
+
+ if (iRange==5)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>65)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Mighty
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ DelayCommand(0.2, MightyEnhance(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, RangedImbue(oItem));
+ iQual+=2;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=85)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+ }
+ else if (iWType==2) //:: Mage "weapons"
+ {
+ //:: Mage
+ iQual=0;
+
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+//////////////////////////////////////////// Lvls 1-5 ::Mage::
+
+ //:: Enhancement bonus
+ DelayCommand(0.2, WeapEnhance(oItem, iRange));
+ ++iQual;
+
+////////////////////////////////////////// Lvls 6-10 ::Mage::
+
+ if (iRange==2)
+ {
+ //:: Extra Spell Slot 1-2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ iRoll = d3();if (iRoll==3)iRoll==2;
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ ++iQual;
+ }
+
+ //:: Spell Bonus
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20 ::Mage::
+
+ if (iRange==3)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra Spell Slot 1-4
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ iRoll = d4();
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ ++iQual;
+ }
+ //:: Spell Bonus x 2
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste bonus
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Mage::
+
+ if (iRange==4)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra Spell Slot 1-6
+ iRoll = d100();
+ if (iRoll==40)
+ {
+ iRoll = d6();
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ }
+ //:: Spell Bonus x 2
+ iRoll = d100();
+ if (iRoll>35)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste bonus
+ iRoll = d100();
+ if (iRoll>92)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, MeleeImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Mage::
+
+ if (iRange==5)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>35)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra Spell Slot 1-8
+ iRoll = d100();
+ if (iRoll>35)
+ {
+ iRoll = d8();
+ DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
+ ++iQual;
+ }
+
+ //:: Spell Bonus x 3
+ iRoll = d100();
+ if (iRoll>30)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, CastImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste bonus
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ ++iQual;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, MeleeImbue(oItem));
+ iQual+=2;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>55)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+ }
+ else if (iWType==3) //: Monk Gloves
+ {
+ //:: Monk
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+ //////////////////////////////////////////// Lvls 1-5 ::Monk::
+
+ //:: Attack bonus
+ DelayCommand(0.2, BowEnhance(oItem, iRange));
+ ++iQual;
+
+ ////////////////////////////////////////// Lvls 6-10 ::Monk::
+
+ if (iRange==2)
+ {
+ //:: Ability bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll==95)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+ ////////////////////////////////////////// Lvls 11-20 ::Monk::
+
+ if (iRange==3)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 2
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 2
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=90)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Monk::
+
+ if (iRange==4)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 3
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=85)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Monk::
+
+ if (iRange==5)
+ {
+ //:: Ability bonus x 2
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AbilityImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Damage Bonus x 3
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Haste
+ iRoll = d100();
+ if (iRoll>=80)
+ {
+ DelayCommand(0.2, HasteImbue(oItem));
+ iQual+=2;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+ }
+ else //::: Melee weapons
+ {
+
+ iRoll = d100();
+ if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ if (iRoll<=CHANCE_BROKEN&&iChest!=1) //:: Chance of being broken
+ {
+ DelayCommand(0.2, ACimbue(oItem, iRange, 1));
+ sName = ColorString("Broken "+sIName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+
+//////////////////////////////////////////// Lvls 1-5 ::Melee::
+
+ //:: Enhancement bonus
+ DelayCommand(0.2, WeapEnhance(oItem, iRange));
+ ++iQual;
+
+////////////////////////////////////////// Lvls 6-10 ::Melee::
+
+ if (iRange==1)
+ {
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>98)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+ if (iRange==2)
+ {
+ //: Damage bonus
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Keen bonus
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, KeenImbue(oItem));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll > 98)
+ {
+ DelayCommand(0.2, EchobladeImbue(oItem));
+ iQual+=2;
+ }
+ iRoll = d100();
+ if (iRoll > 98)
+ {
+ DelayCommand(0.2, WoundingImbue(oItem, iRange));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20 ::Melee::
+
+ if (iRange==3)
+ {
+ //:: Damage bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, MeleeImbue(oItem));
+ ++iQual;
+ }
+ //:: Keen bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, KeenImbue(oItem));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, EchobladeImbue(oItem));
+ iQual+=2;
+ }
+ iRoll = d100();
+ if (iRoll > 98)
+ {
+ DelayCommand(0.2, WoundingImbue(oItem, iRange));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Melee::
+
+ if (iRange==4)
+ {
+ //:: Damage bonus x 2
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, MeleeImbue(oItem));
+ ++iQual;
+ }
+ //:: Keen bonus
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, KeenImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, EchobladeImbue(oItem));
+ iQual+=2;
+ }
+ iRoll = d100();
+ if (iRoll > 98)
+ {
+ DelayCommand(0.2, WoundingImbue(oItem, iRange));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Melee::
+
+ if (iRange==5)
+ {
+ //:: Damage bonus x 3
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>75)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>96)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ if (iRoll>98)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Massive Crits
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, MassCritImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Extra melee damage bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, MeleeImbue(oItem));
+ ++iQual;
+ }
+ //:: Keen bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, KeenImbue(oItem));
+ ++iQual;
+ }
+ //:: Save
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, SaveImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>90)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, WeapOnHit(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>97)
+ {
+ DelayCommand(0.2, EchobladeImbue(oItem));
+ iQual+=2;
+ }
+ iRoll = d100();
+ if (iRoll > 96)
+ {
+ DelayCommand(0.2, WoundingImbue(oItem, iRange));
+ iQual+=2;
+ }
+ }
+ }
+
+ if (iQual>10)iQual=10;
+ if (iQual==0)iQual=1;
+
+ ////////////////////////////////////////////////////////
+ //: Debugging
+ //
+ /*
+ FloatingTextStringOnCreature("ResRef: "+sType, GetFirstPC());
+ FloatingTextStringOnCreature("Qual: "+IntToString(iQual), GetFirstPC());
+ FloatingTextStringOnCreature("Range: "+IntToString(iRange), GetFirstPC());
+ */
+
+ switch(iQual)
+ {
+ case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
+ case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
+ case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
+ case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
+ case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
+ case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
+ case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
+ case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
+ case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
+ case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
+ }
+ SetName(oItem, sName);
+ SetIdentified(oItem, FALSE);
+
+ if (GetBaseItemType(oItem) == BASE_ITEM_DOUBLEAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_TWOBLADEDSWORD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_SCYTHE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_GREATAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_HANDAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_KATANA)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_RAPIER)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_HEAVYFLAIL)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTHAMMER)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTMACE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_MORNINGSTAR)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_DIREMACE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_HALBERD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_SHORTSPEAR)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_TRIDENT)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_HEAVYCROSSBOW)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTCROSSBOW)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_THROWINGAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_DWARVENWARAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_BATTLEAXE)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_BASTARDSWORD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_DAGGER)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_SHORTSWORD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_CLUB)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_SHORTBOW)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_GREATSWORD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_WARHAMMER)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(6) + 1, Random(6) + 1, Random(6) + 1, iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_MAGICSTAFF)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(6) + 1, Random(6) + 1, Random(6) + 1, iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LONGSWORD)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d8(), d8(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LONGBOW)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d8(), d8(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_SCIMITAR)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTFLAIL)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+ if (GetBaseItemType(oItem) == BASE_ITEM_QUARTERSTAFF)
+ {
+ DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
+ }
+}
+
+void DropAmmo (object oMob, object oSack, int iRange)
+{
+ object oItem;
+ string sType, sName, sIName;
+ int iRoll = d4();
+ int iQual;
+ int iStack = d10()*9;
+
+ switch(iRoll)
+ {
+ //:: Ammo
+ case 1: {sType = "sdarrow"; iRoll = d3();
+ if (iRoll==1)sIName = "Arrow";
+ if (iRoll==2)sIName = "Steel Arrow";
+ if (iRoll==3)sIName = "Wind Cutter";}
+ break;
+ case 2: {sType = "sdbolt"; iRoll = d3();
+ if (iRoll==1)sIName = "Bolt";
+ if (iRoll==2)sIName = "Deathpin";
+ if (iRoll==3)sIName = "Air Lance";}
+ break;
+ case 3: {sType = "sdarrow"; iRoll = d3();
+ if (iRoll==1)sIName = "Air Assassin";
+ if (iRoll==2)sIName = "Pegasus Horn";
+ if (iRoll==3)sIName = "Blood Seeker";}
+ break;
+ case 4: {sType = "sdbolt"; iRoll = d3();
+ if (iRoll==1)sIName = "Steel Bolt";
+ if (iRoll==2)sIName = "Stinger";
+ if (iRoll==3)sIName = "Blood Sparrow";}
+ break;
+ }
+
+ oItem = CreateItemOnObject(sType, oSack, iStack);
+
+
+ //:: Ammo
+
+ iRoll = d100();
+ if (iRoll<=10) // 10% chance of worn item ::Ammo::
+ {
+ sName = ColorString("Worn "+sIName, 192, 192, 192);
+ SetName(oItem, sName);
+ return;
+ }
+
+ SetIdentified(oItem, FALSE);
+
+//////////////////////////////////////////// Lvls 1-5 ::Ammo::
+
+ //++iQual; // Debugging
+
+////////////////////////////////////////// Lvls 6-10 ::Ammo::
+
+ if (iRange==2)
+ {
+ //:: Damage bonus
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Vamp Regen bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ }
+
+////////////////////////////////////////// Lvls 11-20 ::Ammo::
+
+ if (iRange==3)
+ {
+ //:: Damage bonus x 2
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Vamp Regen bonus
+ iRoll = d100();
+ if (iRoll>70)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Unlim Ammo bonus
+ iRoll = d100();
+ if (iRoll>95)
+ {
+ DelayCommand(0.2, AmmoEnhance(oItem, iRange));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 20-30 ::Ammo::
+
+ if (iRange==4)
+ {
+ //:: Damage bonus x 3
+ iRoll = d100();
+ if (iRoll>30)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>45)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>65)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Vamp Regen bonus
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Unlim Ammo bonus
+ iRoll = d100();
+ if (iRoll>85)
+ {
+ DelayCommand(0.2, AmmoEnhance(oItem, iRange));
+ iQual+=2;
+ }
+ }
+
+////////////////////////////////////////// Lvls 30-40 ::Ammo::
+
+ if (iRange==5)
+ {
+ //:: Damage bonus x 4
+ iRoll = d100();
+ if (iRoll>20)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>30)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>40)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ iRoll = d100();
+ if (iRoll>60)
+ {
+ DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Vamp Regen bonus
+ iRoll = d100();
+ if (iRoll>50)
+ {
+ DelayCommand(0.2, VampRegenImbue(oItem, iRange));
+ ++iQual;
+ }
+ //:: Unlim Ammo bonus
+ iRoll = d100();
+ if (iRoll>80)
+ {
+ DelayCommand(0.2, AmmoEnhance(oItem, iRange));
+ iQual+=2;
+ }
+ }
+ switch(iQual)
+ {
+ case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
+ case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
+ case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
+ case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
+ case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
+ case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
+ case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
+ case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
+ case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
+ case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
+ }
+
+ SetName(oItem, sName);
+
+}
+
+void DropGem (object oMob, object oSack, int iRange)
+{
+ object oItem;
+
+ int iRoll;
+ int iVal1;
+ int iVal2;
+
+ string sType1;
+ string sType2;
+ string sType3;
+ string sName, pName;
+
+ iRoll=d100();
+ if (iRoll<32)
+ oItem = CreateItemOnObject("sd_rune", oSack, 1);
+ else if (iRoll>32&&iRoll<65)
+ oItem = CreateItemOnObject("sd_rune2", oSack, 1);
+ else if (iRoll>65)
+ oItem = CreateItemOnObject("sd_rune3", oSack, 1);
+
+ SetIdentified(oItem, FALSE);
+
+ iRoll = d10();
+ if (iRoll==1) //:: Mass Crits
+ {
+ switch(iRange)
+ {
+ case 1:iVal1 = d3(); break; //1-3
+ case 2:iVal1 = d3()+1; break; //2-4
+ case 3:iVal1 = d4()+2; break; //3-6
+ case 4:iVal1 = d4()+4; break; //5-8
+ case 5:iVal1 = d6()+4; break; //7-10
+ }
+ if (iVal1==0)iVal1=1;
+ sName = "+"+IntToString(iVal1)+" Brutal Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "MASSIVE_CRITICAL");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==2) //::: Ability rune
+ {
+ switch(iRange)
+ {
+ case 1: iVal1 = 1;break; //1
+ case 2: iVal1 = Random(2)+1;break; //1-2
+ case 3: iVal1 = d3();break; //1-3
+ case 4: iVal1 = d4();break; //1-4
+ case 5: iVal1 = d3()+1;break; //2-4
+ }
+ iRoll=d6();
+ switch(iRoll)
+ {
+ case 1: {sType2 = "STRENGTH_ABILITY_BONUS"; sType1=" Mighty"; break;}
+ case 2: {sType2 = "DEXTERITY_ABILITY_BONUS"; sType1=" Deft"; break;}
+ case 3: {sType2 = "WISDOM_ABILITY_BONUS"; sType1=" Wise"; break;}
+ case 4: {sType2 = "CONSTITUTION_ABILITY_BONUS"; sType1=" Hardy"; break;}
+ case 5: {sType2 = "INTELLEGENCE_ABILITY_BONUS"; sType1=" Clever"; break;}
+ case 6: {sType2 = "CHARISMA_ABILITY_BONUS"; sType1=" Charming"; break;}
+ }
+ if (iVal1==0)iVal1=2;
+ sName = "+"+IntToString(iVal1)+sType1+" Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", sType2);
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==3) //:: AC rune
+ {
+ switch(iRange)
+ {
+ case 1: iVal1 = 1;break; //1
+ case 2: iVal1 = Random(2)+1;break; //1-2
+ case 3: iVal1 = d3();break; //1-3
+ case 4: iVal1 = d3()+2;break; //3-5
+ case 5: iVal1 = d3()+3;break; //4-6
+ }
+
+ if (iVal1==0) iVal1=1;
+
+ sName = "+"+IntToString(iVal1)+" AC Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "AC_BONUS");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==4) //:: AB rune
+ {
+ switch(iRange)
+ {
+ case 1: iVal1 = Random(2)+1;break; //1-2
+ case 2: iVal1 = d3();break; //1-3
+ case 3: iVal1 = d3()+1;break; //2-4
+ case 4: iVal1 = d3()+2;break; //3-5
+ case 5: iVal1 = d4()+3;break; //4-6
+ }
+
+ if (iVal1==0) iVal1=2;
+
+ sName = "+"+IntToString(iVal1)+" Attack Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "ATTACK_BONUS");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==5) //:: Enhancement rune
+ {
+ switch(iRange)
+ {
+ case 1: iVal1 = Random(2)+1;break; //1-2
+ case 2: iVal1 = d3();break; //1-3
+ case 3: iVal1 = d3()+1;break; //2-4
+ case 4: iVal1 = d3()+2;break; //3-5
+ case 5: iVal1 = d3()+3;break; //4-6
+ }
+
+ if (iVal1==0)iVal1=2;
+
+ sName = "+"+IntToString(iVal1)+" Enhancement Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "ENHANCEMENT_BONUS");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==6) //:: Damage rune
+ {
+ switch(iRange)
+ {
+ case 1:
+ {
+ iRoll=d3();
+ if (iRoll==1)iVal1 = 1;
+ if (iRoll==2)iVal1 = 2;
+ if (iRoll==3)iVal1 = 3;
+ }
+ break;
+ case 2:
+ {
+ iRoll=d4();
+ if (iRoll==1)iVal1 = 1;
+ if (iRoll==2)iVal1 = 2;
+ if (iRoll==3)iVal1 = 3;
+ if (iRoll==4)iVal1 = 4;
+ }
+ break;
+ case 3:
+ {
+ iRoll=d6();
+ if (iRoll==1)iVal1 = 2;
+ if (iRoll==2)iVal1 = 2;
+ if (iRoll==3)iVal1 = 3;
+ if (iRoll==4)iVal1 = 4;
+ if (iRoll==5)iVal1 = 5;
+ if (iRoll==6)iVal1 = 6;
+ }
+ break;
+ case 4:
+ {
+ iRoll=d8();
+ if (iRoll==1)iVal1 = 3;
+ if (iRoll==2)iVal1 = 3;
+ if (iRoll==3)iVal1 = 4;
+ if (iRoll==4)iVal1 = 4;
+ if (iRoll==5)iVal1 = 5;
+ if (iRoll==6)iVal1 = 5;
+ if (iRoll==7)iVal1 = 6;
+ if (iRoll==8)iVal1 = 6;
+ }
+ break;
+ case 5:
+ {
+ iRoll=d10();
+ if (iRoll==1)iVal1 = 2;
+ if (iRoll==2)iVal1 = 2;
+ if (iRoll==3)iVal1 = 3;
+ if (iRoll==4)iVal1 = 4;
+ if (iRoll==5)iVal1 = 4;
+ if (iRoll==6)iVal1 = 5;
+ if (iRoll==7)iVal1 = 5;
+ if (iRoll==8)iVal1 = 6;
+ if (iRoll==9)iVal1 = 7;
+ if (iRoll==10)iVal1 = 8;
+ }
+ break;
+ }
+ iRoll = d12();
+ switch (iRoll)
+ {
+ case 1: {sType2 = "ACID_DAMAGE_BONUS"; sType1 = "Corrosive Gem"; break;}
+ case 2: {sType2 = "BLUDGEONING_DAMAGE_BONUS"; sType1 = "Thumping Gem"; break;}
+ case 3: {sType2 = "COLD_DAMAGE_BONUS"; sType1 = "Ice Gem"; break;}
+ case 4: {sType2 = "DIVINE_DAMAGE_BONUS";sType1 = "Holy Gem"; break;}
+ case 5: {sType2 = "ELECTIRCAL_DAMAGE_BONUS";sType1 = "Zapping Gem"; break;}
+ case 6: {sType2 = "FIRE_DAMAGE_BONUS"; sType1 = "Scorching Gem"; break;}
+ case 7: {sType2 = "MAGICAL_DAMAGE_BONUS"; sType1 = "Magical Gem"; break;}
+ case 8: {sType2 = "NEGATIVE_DAMAGE_BONUS"; sType1 = "Evil Gem"; break;}
+ case 9: {sType2 = "PIERCING_DAMAGE_BONUS"; sType1 = "Impaling Gem"; break;}
+ case 10: {sType2 = "POSITIVE_DAMAGE_BONUS"; sType1 = "Benevolent Gem"; break;}
+ case 11: {sType2 = "SLASHING_DAMAGE_BONUS"; sType1 = "Slicing Gem"; break;}
+ case 12: {sType2 = "SONIC_DAMAGE_BONUS"; sType1 = "Booming Gem"; break;}
+ }
+
+ if (iVal1==0)iVal1=2;
+
+ sName = "+"+IntToString(iVal1)+" "+sType1;
+ sName = ColorString(sName, 127, 255, 212 );
+
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", sType2);
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==7) //:: VampRegen
+ {
+ iRoll = d4();
+ sType1 = "VAMPIRIC_REGENERATION";
+ switch(iRange)
+ {
+ case 1: iVal1 = 1;break; //1
+ case 2: iVal1 = Random(2)+1;break; //1-2
+ case 3: iVal1 = d3();break; //1-3
+ case 4: iVal1 = d3()+1;break; //2-4
+ case 5: iVal1 = d3()+2;break; //3-5
+ }
+ sName = "+"+IntToString(iVal1)+" Vamp Regen Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "VAMPIRIC_REGENERATION");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+
+ }
+ else if (iRoll==8) //:: Misc
+ {
+ switch(iRange)
+ {
+ case 1:
+ {
+ iRoll = d6();
+ if (iRoll==1){sType1 = "Benign"; sType2 = "Cracked";}
+ if (iRoll==2){sType1 = "Benign"; sType2 = "Cracked";}
+ if (iRoll==3){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==4){sType1 = "HASTE"; sType2 = "Speedy";}
+ if (iRoll==5){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
+ if (iRoll==6){sType1 = "Benign"; sType2 = "Cracked";}
+ }
+ break;
+ case 2:
+ {
+ iRoll = d6();
+ if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
+ if (iRoll==2){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
+ if (iRoll==3){sType1 = "HASTE"; sType2 = "Speedy";}
+ if (iRoll==4){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==5){sType1 = "Benign"; sType2 = "Cracked";}
+ if (iRoll==6){sType1 = "Benign"; sType2 = "Cracked";}
+ }
+ break;
+ case 3:
+ {
+ iRoll = d6();
+ if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
+ if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
+ if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
+ if (iRoll==5){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
+ if (iRoll==6){sType1 = "HASTE"; sType2 = "Speedy";}
+ }
+ break;
+ case 4:
+ {
+ iRoll = d6();
+ if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
+ if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
+ if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
+ if (iRoll==5){sType1 = "HASTE"; sType2 = "Speedy";}
+ if (iRoll==6){sType1 = "HASTE"; sType2 = "Speedy";}
+ }
+ break;
+ case 5:
+ {
+ iRoll = d6();
+ if (iRoll==1){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
+ if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
+ if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
+ if (iRoll==5){sType1 = "HASTE"; sType2 = "Speedy";}
+ if (iRoll==6){sType1 = "TRUE_SEEING"; sType2 = "Ocular";}
+ }
+ break;
+ }
+
+ pName = sType2+" Gem";
+
+ if (sType2=="Cracked")
+ {
+ sName = ColorString(pName, 255, 0, 0);
+ SetName(oItem, sName);
+ SetIdentified(oItem, TRUE);
+ return;
+ }
+ else sName = ColorString(pName, 127, 255, 212 );
+
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", sType1);
+ }
+ else if (iRoll==9) //:: Regen
+ {
+ iRoll = d4();
+ sType1 = "REGENERATION";
+ switch(iRange)
+ {
+ case 1: iVal1 = 1;break; //1
+ case 2: iVal1 = Random(2)+1;break; //1-2
+ case 3: iVal1 = d3();break; //1-3
+ case 4: iVal1 = d3()+1;break; //2-4
+ case 5: iVal1 = d3()+2;break; //3-5
+ }
+ sName = "+"+IntToString(iVal1)+" Regeneration Gem";
+ sName = ColorString(sName, 127, 255, 212 );
+
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", "REGENERATION");
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+ }
+ else if (iRoll==10) //:: Damage rune
+ {
+ switch(iRange)
+ {
+ case 1: iVal1 = 5;break; // -/5 res
+ case 2: iVal1 = 5;break; // -/5 res
+ case 3: iVal1 = 10;break; // -/10 res
+ case 4: iVal1 = 15;break; // -/15 res
+ case 5: iVal1 = 20;break; // -/20 res
+ }
+ iRoll = d12();
+ switch (iRoll)
+ {
+ case 1: {sType2 = "ACID_DAMAGE_RESISTANCE"; sType1 = "Alkaline Gem"; break;}
+ case 2: {sType2 = "BLUDGEONING_DAMAGE_RESISTANCE"; sType1 = "Solid Gem"; break;}
+ case 3: {sType2 = "COLD_DAMAGE_RESISTANCE"; sType1 = "Warm Gem"; break;}
+ case 4: {sType2 = "DIVINE_DAMAGE_RESISTANCE";sType1 = "Absolution Gem"; break;}
+ case 5: {sType2 = "ELECTRICAL_DAMAGE_RESISTANCE";sType1 = "Grounding Gem"; break;}
+ case 6: {sType2 = "FIRE_DAMAGE_RESISTANCE"; sType1 = "Cool Gem"; break;}
+ case 7: {sType2 = "MAGICAL_DAMAGE_RESISTANCE"; sType1 = "Mantle Gem"; break;}
+ case 8: {sType2 = "NEGATIVE_DAMAGE_RESISTANCE"; sType1 = "Bright Gem"; break;}
+ case 9: {sType2 = "PIERCING_DAMAGE_RESISTANCE"; sType1 = "Shell Gem"; break;}
+ case 10: {sType2 = "POSITIVE_DAMAGE_RESISTANCE"; sType1 = "Malevolent Gem"; break;}
+ case 11: {sType2 = "SLASHING_DAMAGE_RESISTANCE"; sType1 = "Mesh Gem"; break;}
+ case 12: {sType2 = "SONIC_DAMAGE_RESISTANCE"; sType1 = "Dampening Gem"; break;}
+ }
+ if (iVal1==0)iVal1=2;
+ sName = "-/"+IntToString(iVal1)+" "+sType1;
+ sName = ColorString(sName, 127, 255, 212 );
+
+ SetName(oItem, sName);
+ SetLocalString(oItem, "GEM_TYPE", sType2);
+ SetLocalInt(oItem, "AMOUNT", iVal1);
+ }
+}
+
+void DropEpicSpellSeed(object oMob, object oSack)
+{//:: Start DropEpicSpellSeed()
+ int iEpic = GetIsEpicSpellcaster(oMob);
+
+ string sItem;
+
+ if(iEpic > 1)
+ return;
+
+ int nESS = Random(29)+1;
+ switch (nESS)
+ {
+ case 1: sItem = "epic_sp_unseenwa"; break; // Epic Spell Unseen Wanderer
+ case 2: sItem = "epic_sd_afflict"; break; // Epic Spell Seed Afflict
+ case 3: sItem = "epic_sd_animate"; break; // Epic Spell Seed Animate
+ case 4: sItem = "epic_sd_animdead"; break; // Epic Spell Seed Animate Dead
+ case 5: sItem = "epic_sd_armor"; break; // Epic Spell Seed Armor
+ case 6: sItem = "epic_sd_banish"; break; // Epic Spell Seed Banish
+ case 7: sItem = "epic_sd_compel"; break; // Epic Spell Seed Compel
+ case 8: sItem = "epic_sd_conceal"; break; // Epic Spell Seed Conceal
+ case 9: sItem = "epic_sd_conjure"; break; // Epic Spell Seed Conjure
+ case 10: sItem = "epic_sd_contact"; break; // Epic Spell Seed Contact
+ case 11: sItem = "epic_sd_delude"; break; // Epic Spell Seed Delude
+ case 12: sItem = "epic_sd_destroy"; break; // Epic Spell Seed Destroy
+ case 13: sItem = "epic_sd_dispel"; break; // Epic Spell Seed Dispel
+ case 14: sItem = "epic_sd_energy"; break; // Epic Spell Seed Energy
+ case 15: sItem = "epic_sd_foresee"; break; // Epic Spell Seed Foresee
+ case 16: sItem = "epic_sd_fortify"; break; // Epic Spell Seed Forify
+ case 17: sItem = "epic_sd_heal"; break; // Epic Spell Seed Heal
+ case 18: sItem = "epic_sd_life"; break; // Epic Spell Seed Life
+ case 19: sItem = "epic_sd_light"; break; // Epic Spell Seed Light
+ case 20: sItem = "epic_sd_oppos"; break; // Epic Spell Seed Opposition
+ case 21: sItem = "epic_sd_reflect"; break; // Epic Spell Seed Reflect
+ case 22: sItem = "epic_sd_reveal"; break; // Epic Spell Seed Reveal
+ case 23: sItem = "epic_sd_shadow"; break; // Epic Spell Seed Shadow
+ case 24: sItem = "epic_sd_slay"; break; // Epic Spell Seed Slay
+ case 25: sItem = "epic_sd_summon"; break; // Epic Spell Seed Summon
+ case 26: sItem = "epic_sd_time"; break; // Epic Spell Seed Time
+ case 27: sItem = "epic_sd_transfrm"; break; // Epic Spell Seed Transform
+ case 28: sItem = "epic_sd_transprt"; break; // Epic Spell Seed Transport
+ case 29: sItem = "epic_sd_ward"; break; // Epic Spell Seed Ward
+ }
+
+ if ((GetLocalInt(GetModule(), "LOOT_DEBUG") > 0 ))
+ {
+ SpeakString("DropEpicSpellSeed()");
+ SpeakString("Item rolled case "+IntToString(nESS)+" sItem "+sItem);
+ }
+
+ object oItem = CreateItemOnObject("sItem", oSack, 1);
+
+}
+
+void DropEpicSpellBook(object oMob, object oSack)
+{//:: Start DropEpicSpellBook()
+ int iEpic = GetIsEpicSpellcaster(oMob);
+
+ if(iEpic > 1)
+ return;
+
+ string sItem;
+
+ int nESB = Random(60)+1;
+ switch (nESB)
+ {
+ case 1: sItem = "epic_sp_audstone"; break; // Epic Spell Audience of Stone
+ case 2: sItem = "epic_sp_achilles"; break; // Epic Spell Achilles Heel
+ case 3: sItem = "epic_sp_allmart"; break; // Epic Spell Allied Martyr
+ case 4: sItem = "epic_sp_allhope"; break; // Epic Spell All Hope Lost
+ case 5: sItem = "epic_sp_anarchy"; break; // Epic Spell Anarchy's Call
+ case 6: sItem = "epic_sp_animblas"; break; // Epic Spell Animus Blast
+ case 7: sItem = "epic_sp_animbliz"; break; // Epic Spell Animus Blizzard
+ case 8: sItem = "epic_sp_armyunfa"; break; // Epic Spell Army Unfallen
+ case 9: sItem = "epic_sp_batbound"; break; // Epic Spell Battle Bounding
+ case 10: sItem = "epic_sp_champval"; break; // Epic Spell Champion's Valor
+ case 11: sItem = "epic_sp_contresu"; break; // Epic Spell Contingent Resurrection
+ case 12: sItem = "epic_sp_contreun"; break; // Epic Spell Contingent Reunion
+ case 13: sItem = "epic_sp_deadeyes"; break; // Epic Spell Deadeye Sense
+ case 14: sItem = "epic_sp_dreamscp"; break; // Epic Spell Dreamscape
+ case 15: sItem = "epic_sp_deathmrk"; break; // Epic Spell Deathmark
+ case 16: sItem = "epic_sp_dullblad"; break; // Epic Spell Dullblades
+ case 17: sItem = "epic_sp_dweomert"; break; // Epic Spell Dweomer Thief
+ case 18: sItem = "epic_sp_enslave"; break; // Epic Spell Enslave
+ case 19: sItem = "epic_sp_epmagarm"; break; // Epic Spell Epic Mage Armor
+ case 20: sItem = "epic_sp_eprepuls"; break; // Epic Spell Epic Repulsion
+ case 21: sItem = "epic_sp_epspellr"; break; // Epic Spell Epic Spell Reflection
+ case 22: sItem = "epic_sp_epwardin"; break; // Epic Spell Epic Warding
+ case 23: sItem = "epic_sp_eterfree"; break; // Epic Spell Eternal Freedom
+ case 24: sItem = "epic_sp_fleetnes"; break; // Epic Spell Fleetness of Foot
+ case 25: sItem = "epic_sp_greatrui"; break; // Epic Spell Greater Ruin
+ case 26: sItem = "epic_sp_grspellr"; break; // Epic Spell Greater Spell Resistance
+ case 27: sItem = "epic_sp_grtimest"; break; // Epic Spell Greater Timestop
+ case 28: sItem = "epic_sp_hellball"; break; // Epic Spell Hellball
+ case 29: sItem = "epic_sp_hellsend"; break; // Epic Spell Hell Send
+ case 30: sItem = "epic_sp_hercalli"; break; // Epic Spell Herculean Alliance
+ case 31: sItem = "epic_sp_hercempo"; break; // Epic Spell Herculean Empowerment
+ case 32: sItem = "epic_sp_impenetr"; break; // Epic Spell Impenetrability
+ case 33: sItem = "epic_sp_leechfie"; break; // Epic Spell Leech Field
+ case 34: sItem = "epic_sp_legendar"; break; // Epic Spell Legendary Artisan
+ case 35: sItem = "epic_sp_lifeforc"; break; // Epic Spell Life Force Transfer
+ case 36: sItem = "epic_sp_magmabur"; break; // Epic Spell Magma Burst
+ case 37: sItem = "epic_sp_momentom"; break; // Epic Spell Momento Mori
+ case 38: sItem = "epic_sp_mummdust"; break; // Epic Spell Mummy Dust
+ case 39: sItem = "epic_sp_nailedsk"; break; // Epic Spell Nailed to the Sky
+ case 40: sItem = "epic_sp_nightsun"; break; // Epic Spell Night's Undoing
+ case 41: sItem = "epic_sp_orderres"; break; // Epic Spell Order Restored
+ case 42: sItem = "epic_sp_pathsbec"; break; // Epic Spell Paths Become Known
+ case 43: sItem = "epic_sp_peerless"; break; // Epic Spell Peerless Penitence
+ case 44: sItem = "epic_sp_pestilen"; break; // Epic Spell Pestilence
+ case 45: sItem = "epic_sp_planarce"; break; // Epic Spell Planar Cell
+ case 46: sItem = "epic_sp_psionics"; break; // Epic Spell Psionic Salvo
+ case 47: sItem = "epic_sp_risenreu"; break; // Epic Spell Risen Reunited
+ case 48: sItem = "epic_sp_ruin"; break; // Epic Spell Ruin
+ case 49: sItem = "epic_sp_singsund"; break; // Epic Spell Singular Sunder
+ case 50: sItem = "epic_sp_spelworm"; break; // Epic Spell Spell Worm
+ case 51: sItem = "epic_sp_stormman"; break; // Epic Spell Storm Mantle
+ case 52: sItem = "epic_sp_summaber"; break; // Epic Spell Summon Aberration
+ case 53: sItem = "epic_sp_superbdi"; break; // Epic Spell Superb Dispelling
+ case 54: sItem = "epic_sp_symrusta"; break; // Epic Spell Symrustar's Spellbinding
+ case 55: sItem = "epic_sp_thewithe"; break; // Epic Spell The Withering
+ case 56: sItem = "epic_sp_tolodine"; break; // Epic Spell Tolodine's Killing Wind
+ case 57: sItem = "epic_sp_transvit"; break; // Epic Spell Transcendent Vitality
+ case 58: sItem = "epic_sp_twinfien"; break; // Epic Spell Twinfiend
+ case 59: sItem = "epic_sp_unholydi"; break; // Epic Spell Unholy Disciple
+ case 60: sItem = "epic_sp_unimping"; break; // Epic Spell Unimpinged
+ }
+
+ if ((GetLocalInt(GetModule(), "LOOT_DEBUG") > 0 ))
+ {
+ SpeakString("DropEpicSpellBook()");
+ SpeakString("Item rolled case "+IntToString(nESB)+" sItem "+sItem);
+ }
+
+ object oItem = CreateItemOnObject("sItem", oSack, 1);
+}
+
+void sd_droploot (object oMob, object oSack)
+{
+ object oPC = GetLastKiller();
+ effect eVFX = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION);
+ effect eDust = EffectVisualEffect(VFX_IMP_DUST_EXPLOSION);
+ effect eLink = EffectLinkEffects(eVFX, eDust);
+
+ // no loot if killed in stonewatch
+ // chances are it was an uber guard
+ // and not the PC that did the killing.
+ // This is to prevent easy looting higher mobs
+
+ if (GetTag(GetArea(oMob))=="Stonewatch")return;
+
+ // animals dont usually carry wares - but you can skin em!
+ // This is to prevent tiny rats dropping full plate mail - can't have that!
+
+
+ /////////////////////////////////////////
+ //::Droprate config::
+ //
+ int DamBroke = 0;
+ int lMod, mMod;
+
+ // adjust the droprate modifIer based on game difficulty
+ // if there is no game difficulty: Default to normal
+ int iDiff = GetLocalInt(GetModule(), "sd_game_diff");
+ if (iDiff==0)lMod = DROP_RATE; //default
+ if (iDiff==1)lMod = DROP_RATE;
+ if (iDiff==2)lMod = DROP_RATE;
+
+ // Make monk gloves a rare drop except when the player is a lvl 5+ monk
+ if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oPC)) mMod = 4;
+
+ if (GetLevelByClass(CLASS_TYPE_MONK, oPC)>5||
+ GetLevelByClass(CLASS_TYPE_MONK, GetMaster(oPC))>5)mMod = 8;
+
+ else mMod=lMod-1;
+
+//:: Bosses have high chance to drop loot (never broken or worn)
+ if (GetLocalInt(oMob, "BOSS")==1){lMod = 85; DamBroke = 1;}
+
+ int WeapChance = 1; // % chance to drop a weapon
+ int MonkChance = 1; // % chance to drop monk gloves
+ int SockChance = 1; // % chance to drop a socketed item
+ int ArmorChance = 1; // % chance to drop armor or a shield
+ int MItemChance = 1; // % chance to drop a magic item
+ int RodWandChance = 1; // % chance to drop a wand/rod item
+ int AmmoChance = 1; // % chance to drop a bolt or an arrow
+ int GoldChance = 8; // % chance to drop some gold
+ int PotChance = 1; // % chance to drop a potion
+ int ScrollChance = 1; // % chance to drop a magic scroll
+ int GemChance = lMod; // % chance to drop a socket gem
+ int MiscChance = 1; // % chance to drop a miscellaneous item
+ int SetItemChance = 1; // % chance to drop a class item setpiece
+ int AlchemyChance = 1;
+ int EpicSpellSeedChance = 1;
+ int EpicSpellBookChance = 1;
+ //
+ //
+ /////////////////////////////////////////////////
+ //::initiate variables:: //
+
+ int iDice;
+ int iHD = GetHitDice(oMob);
+ int iRange;
+ int iMage;
+
+ /////////////////////////////////////////////////
+
+ //:: only casters drop scrolls, wands and rods
+
+ if (GetLevelByClass(CLASS_TYPE_DRUID)>0||GetLevelByClass(CLASS_TYPE_BARD)>0
+ ||GetLevelByClass(CLASS_TYPE_CLERIC)>0||GetLevelByClass(CLASS_TYPE_SORCERER)>0
+ ||GetLevelByClass(CLASS_TYPE_WIZARD)>0) iMage=1;
+
+ /////////////////////////////////////////////////
+ //:: Quality range based on level of monster::
+
+ if (iHD > 0 && iHD < 11)iRange=1; // lvl 1-10
+ if (iHD > 10 && iHD < 19)iRange=2; // lvl 11-18
+ if (iHD > 18 && iHD < 28)iRange=3; // lvl 19-27
+ if (iHD > 27 && iHD < 36)iRange=4; // lvl 28-35
+ if (iHD > 35 /* && iHD < 61 */)iRange=5; // lvl 36-40
+
+//:: Chance of a more powerful item
+ if (LUCK_CHANCE>0)
+ {
+ iDice = Random(LUCK_CHANCE);
+ if (iDice==LUCK_CHANCE){++iRange; if (iRange==6)iRange=5;}
+ }
+
+///////////////////
+//:Debugging
+//:
+// FloatingTextStringOnCreature("* Luck has favoured you *", GetFirstPC());}
+
+////////////////////////////////////////////////
+
+//:: Gold Roll
+ iDice = d100();
+ if (iDice59)DropShield(oMob, oSack, iRange, SockChance, DamBroke);
+ else DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
+ if (iDice59) FloatingTextStringOnCreature("Your defeated foe has dropped armour!", oPC);
+ if (iDice>59) ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
+ }
+
+//:: Magic Item Roll
+ iDice = d100();
+ if (iDice < MItemChance + 1)
+ {
+ DropMagicItem(oMob, oSack, iRange, SockChance, DamBroke);
+ FloatingTextStringOnCreature("Your defeated foe has dropped a magic item!", oPC);
+ ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
+ }
+
+//:: Misc Item Roll
+ iDice = d100();
+ if (iDice < MiscChance + 1)
+ {
+ DropMisc(oMob, oSack);
+ FloatingTextStringOnCreature("Your defeated foe has dropped an artifact!", oPC);
+ ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
+ }
+
+//:: Ranged Ammo Roll
+ iDice = d100();
+ if (iDice < AmmoChance + 1)
+ {
+ DropAmmo(oMob, oSack, iRange);
+ FloatingTextStringOnCreature("Your defeated foe has dropped ranged ammunition!", oPC);
+ }
+
+//:: Potion Roll
+ iDice = d100();
+ if (iDice < PotChance + 1)
+ {
+ DropPotion(oMob, oSack);
+ FloatingTextStringOnCreature("Your defeated foe has dropped a potion!", oPC);
+ }
+
+//:: Scroll Roll
+ iDice = d100();
+ if (iDice < ScrollChance + 1)
+ {
+ DropScroll(oMob, oSack, iRange);
+ FloatingTextStringOnCreature("Your defeated foe has dropped a scroll!", oPC);
+ }
+
+//:: Alchemical Item Roll
+ iDice = d100();
+ if (iDice < AlchemyChance + 1)
+ {
+ DropAlchemy(oMob, oSack, iRange);
+ }
+
+//:: Epic Spell Seed Item Roll
+ iDice = d100();
+ if(iRange > 3)
+ {
+ if (iDice < EpicSpellSeedChance + 1)
+ {
+ DropEpicSpellSeed(oMob, oSack);
+ FloatingTextStringOnCreature("Your defeated foe has dropped an epic spell seed!", oPC);
+ }
+ }
+
+//:: Epic Book Book Item Roll
+ iDice = d100();
+ if(iRange > 4)
+ {
+ if (iDice < EpicSpellBookChance + 1)
+ {
+ DropEpicSpellBook(oMob, oSack);
+ FloatingTextStringOnCreature("Your defeated foe has dropped an epic spell book!", oPC);
+ }
+ }
+}
+
+void sd_dropboss(object oMob, object oSack)
+{
+ object oPC = GetLastKiller();
+
+//:: Early exit if mob is killed in Stonewatch to prevent looting high-end mobs easily
+ if (GetTag(GetArea(oMob)) == "Stonewatch") return;
+
+//:: Droprate configuration
+ int DamBroke = 0;
+ int lMod = DROP_RATE; // Default drop rate
+ int mMod; // Modifyer for monk gloves drop rareness
+
+//:: Determine the game difficulty modifier
+ int iDiff = GetLocalInt(GetModule(), "sd_game_diff");
+ if(iDiff > 0) lMod = DROP_RATE; // No change needed if not default because all set to same
+
+//:: Make monk gloves a rare drop unless the player/Master is a lvl 5+ monk
+ if (GetLevelByClass(CLASS_TYPE_MONK, oPC) > 5 || GetLevelByClass(CLASS_TYPE_MONK, GetMaster(oPC)) > 5)
+ mMod = 8;
+ else
+ mMod = lMod - 1;
+
+//:: Boss specific settings
+ if (GetLocalInt(oMob, "BOSS") == 1)
+ {
+ lMod = 85; // Higher chance for bosses
+ DamBroke = 1; // Boss items are never broken or worn
+ }
+
+//:: Droprate chances initialization
+ int WeapChance = 5;
+ int MonkChance = 3;
+ int SockChance = 1;
+ int ArmorChance = 5;
+ int MItemChance = 3;
+ int RodWandChance = 1;
+ int AmmoChance = 1;
+ int GoldChance = 100;
+ int PotChance = 65;
+ int ScrollChance = 45;
+ int GemChance = 1;
+ int MiscChance = 1;
+ int SetItemChance = 1;
+ int AlchemyChance = 1;
+ int EpicSpellSeedChance = 1;
+ int EpicSpellBookChance = 1;
+
+//:: Determine quality range based on monster level
+ int iHD = GetHitDice(oMob);
+ int iRange = (iHD + 9) / 10; // This formula directly computes the range from HD
+ if (iRange > 5) iRange = 5; // Cap the range at 5
+
+//:: Chance of a more powerful item based on luck
+ if (LUCK_CHANCE > 0 && Random(LUCK_CHANCE) == LUCK_CHANCE - 1)
+ iRange = iRange < 5 ? iRange + 1 : 5;
+
+//:: Only casters drop scrolls, wands, and rods
+ int iMage = GetLevelByClass(CLASS_TYPE_DRUID, oMob) > 0 || GetLevelByClass(CLASS_TYPE_BARD, oMob) > 0 ||
+ GetLevelByClass(CLASS_TYPE_CLERIC, oMob) > 0 || GetLevelByClass(CLASS_TYPE_SORCERER, oMob) > 0 ||
+ GetLevelByClass(CLASS_TYPE_WIZARD, oMob) > 0 ? 1 : 0;
+
+//:: Drop functions based on the outcome of random chances
+ int iDice;
+
+//:: Gold Drop
+ iDice = d20();
+ if (iDice < GoldChance + 1)
+ DropGold(oMob, oSack, DamBroke);
+
+//:: Rod/Wand Drop, only for casters
+ if (iMage)
+ {
+ iDice = d100();
+ if (iDice < RodWandChance + 1)
+ DropRodWand(oMob, oSack);
+ }
+
+//:: Weapon Drop
+ iDice = d10();
+ if (iDice < WeapChance + 1)
+ DropWeapon(oMob, oSack, iRange, SockChance, DamBroke);
+
+//:: Monk Gloves Drop
+ iDice = d20();
+ if (iDice < MonkChance + 1)
+ DropMonkGloves(oMob, oSack, iRange, SockChance, DamBroke);
+
+//:: Armor or Shield Drop
+ iDice = d20();
+ if (iDice < ArmorChance + 1)
+ {
+ iDice = d100();
+ if (iDice > 59)
+ DropShield(oMob, oSack, iRange, SockChance, DamBroke);
+ else
+ DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
+ }
+
+//:: Magic Item Drop
+ iDice = d20();
+ if (iDice < MItemChance + 1)
+ DropMagicItem(oMob, oSack, iRange, SockChance, DamBroke);
+
+//:: Misc Item Drop
+ iDice = d100();
+ if (iDice < MiscChance + 1)
+ DropMisc(oMob, oSack);
+
+//:: Ranged Ammo Drop
+ iDice = d100();
+ if (iDice < AmmoChance + 1)
+ DropAmmo(oMob, oSack, iRange);
+
+//:: Potion Drop
+ iDice = d100();
+ if (iDice < PotChance + 1)
+ DropPotion(oMob, oSack);
+
+//:: Scroll Drop
+ iDice = d100();
+ if (iDice < ScrollChance + 1)
+ DropScroll(oMob, oSack, iRange);
+
+//:: Alchemical Item Roll
+ iDice = d100();
+ if (iDice < AlchemyChance+1)
+ {
+ DropAlchemy(oMob, oSack, iRange);
+ }
+
+//:: Epic Spell Seed Item Roll
+ iDice = d100();
+ if (iDice < EpicSpellSeedChance + 1)
+ {
+ DropEpicSpellSeed(oMob, oSack);
+ }
+
+//:: Epic Book Book Item Roll
+ if (iMage)
+ {
+ iDice = d100();
+ if (iDice < EpicSpellBookChance + 1)
+ {
+ DropEpicSpellBook(oMob, oSack);
+ }
+ }
+}
+
+void wk_chestloot (object oSack)
+{
+ object oPC = GetLastUsedBy();
+ object oMob = GetLastUsedBy();
+ /////////////////////////////////////////
+ //::Droprate config::
+ //
+ int DamBroke = 0;
+ int lMod;
+
+ lMod = DROP_RATE; //default
+
+ /////////////////////////////////////////////////
+ //::initiate variables:: //
+ int iDice;
+ int iHD = GetLocalInt(OBJECT_SELF,"BossLoot");
+ int iRange = iHD;
+ int iMage;
+
+
+ // Bosses have high chance to drop loot (never broken or worn)
+ lMod = lMod + iHD;
+
+
+ int WeapChance = 3+lMod; // % chance to drop a weapon
+ int SockChance = 1; // % chance to drop a socketed item
+ int ArmorChance = 2+lMod; // % chance to drop armor or a shield
+ int MItemChance = 2+lMod; // % chance to drop a magic item
+ int RodWandChance = 1+lMod; // % chance to drop a wand/rod item
+ int AmmoChance = 1+lMod; // % chance to drop a bolt or an arrow
+ int GoldChance = 46+lMod; // % chance to drop some gold
+ int PotChance = 1+lMod; // % chance to drop a potion
+ int ScrollChance = 1+lMod; // % chance to drop a magic scroll
+ int GemChance = lMod; // % chance to drop a socket gem
+ int MiscChance = 1; // % chance to drop a miscellaneous item
+ int SetItemChance = 1; // % chance to drop a class item setpiece
+ int AlchemyChance = 1+lMod;
+
+ //:: Chance of a more powerful item
+
+ if (LUCK_CHANCE>0)
+ {
+ iDice = Random(LUCK_CHANCE);
+ if (iDice == 1) iRange++;
+ if (iRange > 5) iRange=5;
+ }
+
+ ////////////////////////////////////////////////
+ // Cycle through the various drops until the number of items for the boss are
+ // all dropped. This guarantees that each boss level will be distinct.
+ // Note that the luck chance to increase the value of the loot does not
+ // affect the number of items to drop.
+
+
+ // Rod/Wand Roll
+ iDice = d100();
+ if (iDice69)
+ {
+ DropShield(oMob, oSack, iRange, SockChance, DamBroke);
+ }
+ else
+ {
+ DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
+ }
+ }
+ // Magic Item Roll
+ iDice = d20();
+ if (iDice" + sText + "";
+}
+
+
+int GetIsEmpty() // empty chest check routine
+{
+ int iCount;
+ object oItem = GetFirstItemInInventory();
+ while (GetIsObjectValid(oItem))
+ {
+ ++iCount;
+ oItem = GetNextItemInInventory();
+ }
+ if (iCount==0)return TRUE;
+
+ return FALSE;
+}
+
+
+void SD_PURGE(string sCont, int iName = 0)
+{
+ int iCount;
+
+ object oItem;
+ object oArea = OBJECT_SELF;
+ object oCont = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oCont))
+ {
+ if (iName==1)
+ {
+ if (GetName(oCont)=="Remains")
+ {
+ oItem = GetFirstItemInInventory(oCont);
+ while (GetIsObjectValid(oItem))
+ {
+ DestroyObject(oItem);
+ oItem = GetNextItemInInventory(oCont);
+ }
+ DestroyObject(oCont);
+ }
+ oCont = GetNextObjectInArea(oArea);
+ }
+ else
+ {
+ if (GetTag(oCont)==sCont)
+ {
+ oItem = GetFirstItemInInventory(oCont);
+ while (GetIsObjectValid(oItem))
+ {
+ DestroyObject(oItem);
+ oItem = GetNextItemInInventory(oCont);
+ }
+ DestroyObject(oCont);
+ }
+ oCont = GetNextObjectInArea(oArea);
+ }
+ }
+}
+
+void SD_DESTROY(string sTag)
+{
+ object oArea = OBJECT_SELF;
+ object oPlc = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oPlc))
+ {
+ if (GetTag(oPlc)==sTag)
+ {
+ DestroyObject(oPlc);
+ }
+ oPlc =GetNextObjectInArea(oArea);
+ }
+}
+
+
+void SD_CLEAN(object oPC)
+{
+ object oItem;
+ object oArea = OBJECT_SELF;
+ object oCont = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oCont))
+ {
+ if (GetObjectType(oCont)==OBJECT_TYPE_CREATURE)
+ {
+ if (GetIsEnemy(oCont, oPC))
+ {
+ AssignCommand(oCont, SetIsDestroyable(TRUE));
+ DestroyObject(oCont);
+ }
+ }
+
+ if (GetTag(oCont)=="Bloodstain")DestroyObject(oCont);
+
+ oCont = GetNextObjectInArea(oArea);
+ }
+}
+
+void AREA_CLEAR(object oPC)
+{
+
+ effect eDeath = EffectDeath(TRUE);
+
+ object oMob, oArea, oTrig;
+ oArea = GetArea(OBJECT_SELF);
+ oMob = GetFirstObjectInArea(oArea);
+ while (GetIsObjectValid(oMob))
+ {
+ if (GetObjectType(oMob)== OBJECT_TYPE_CREATURE)
+ {
+ if (GetIsEnemy(oMob, oPC) && GetIsDead(oMob)==FALSE)
+ {
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oMob);
+ AssignCommand(oMob, SetIsDestroyable(TRUE));
+ DestroyObject(oMob, 60.0);
+ }
+ }
+ oMob = GetNextObjectInArea(oArea);
+ }
+
+ SD_PURGE("rr_sack");
+ SD_CLEAN(oPC);
+}
+
+
+//void main() {}
diff --git a/_module/nss/sd_set_item.nss b/_module/nss/sd_set_item.nss
new file mode 100644
index 00000000..1ff5446f
--- /dev/null
+++ b/_module/nss/sd_set_item.nss
@@ -0,0 +1,311 @@
+///////////////////////////////
+//: Set Script
+//:
+//: Universal
+//:
+//:
+//: === in onrespawn script ===
+//: #include "sd_set_item_inc"
+//: ApplySetBonus(oRespawner);
+//:
+#include "sd_set_item_inc"
+#include "sd_lootsystem"
+#include "x2_inc_switches"
+
+////////////////////////////////////////////////////////////////////////////////
+//:General Constants
+//:
+//:
+
+const int COLOR_R = 255;
+const int COLOR_G = 100; // Pink
+const int COLOR_B = 200;
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+//:General Utilities
+//:
+//:
+//:
+
+int SD_UNIQUE_CHECK(object oPC, object oSetPiece)
+{
+ int iFlag=0;
+ string sRes, sString, sIname;
+ object oItem;
+ sRes = GetResRef(oSetPiece);
+
+// check inventory
+
+ object oCheck = GetFirstItemInInventory(oPC);
+ while (GetIsObjectValid(oCheck))
+ {
+ if (GetResRef(oCheck)==sRes)++iFlag;
+ oCheck = GetNextItemInInventory(oPC);
+ }
+
+ // check equipped items
+
+ oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+ oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
+ if (GetResRef(oItem)==sRes) iFlag+=1;
+
+ if (iFlag>=2)
+ {
+ sIname = GetName(oSetPiece);
+ sString = ColorString("You can only have one of these at a time", 255, 0, 0);
+ FloatingTextStringOnCreature(sString, oPC);
+ DestroyObject(oSetPiece);
+
+ SendMessageToPC(oPC,"DM: "+sIname+" destroyed");
+ SendMessageToPC(oPC,"DM: Compensatory gold awarded");
+ GiveGoldToCreature(oPC, 3000);
+ AssignCommand(oPC, PlaySound("it_coins"));
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+void UpdateName(object oPC, object oItem, int iPieces, int iSetNum, string sNameOfSet)
+{
+ // Update Current Item
+ string sName, sIName;
+
+
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")",
+ COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+
+ // Update InventoryItems
+
+ oItem = GetFirstItemInInventory(oPC);
+ while (GetIsObjectValid(oItem))
+ {
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetNextItemInInventory(oPC);
+ }
+
+// Update Slotted Items
+
+ oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+ oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
+ if (GetTag(oItem)=="sd_set_item" && GetLocalString(oItem, "sSet")==sNameOfSet)
+ {
+ sIName = GetLocalString(oItem, "sName");
+ sName = ColorString(sIName+" ("+IntToString(iPieces)+"/"+IntToString(iSetNum)+")", COLOR_R, COLOR_G, COLOR_B);
+ SetName(oItem, sName);
+ }
+}
+////////////////////////////////////////////////////////////////////////////////
+//:End of General Utilities
+//
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+//: MAIN SCRIPT
+//:
+//:
+
+void main()
+{
+ int nEvent =GetUserDefinedItemEventNumber();
+
+ object oPC, oEquip, oUnEquip, oItem;
+ string sName, sIName, sID, sNameOfSet;
+ int iPieces, iLength, iSetNum;
+ effect eImbue, eVis, eFinal;
+
+
+
+ if (nEvent ==X2_ITEM_EVENT_EQUIP)
+ {
+ oPC = GetPCItemLastEquippedBy();
+ oEquip = GetPCItemLastEquipped();
+ sID = GetLocalString(oEquip, "sSet")+"_equ";
+ sNameOfSet = GetLocalString(oEquip, "sSet");
+
+ iPieces = GetLocalInt(oPC, sID);
+ ++iPieces;
+ SetLocalInt(oPC, sID, iPieces);
+
+ if (sNameOfSet=="Dorian's Battlegear")DoriansBattlegearEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Mystra's Rainment")MystrasRainmentEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Thera's Vestments")TherasVestmentsEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Shinobi's Garb")ShinobisGarbEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Benedict's Herald")BenedictsHeraldEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Armor of Divinity")ArmorOfDivinityEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Soothsayer's Regalia")SoothsayersRegaliaEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Robes of Enlightenment")RobesOfEnlightenmentEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Vestments of Rage")VestmentsofRageEquip(oPC, iPieces, 0);
+
+
+ ////////////////////////////////////
+ //: Debugging
+ //: FloatingTextStringOnCreature(IntToString(iPieces), oPC);
+ }
+else if (nEvent ==X2_ITEM_EVENT_UNEQUIP)
+ {
+ oPC = GetPCItemLastUnequippedBy();
+ oUnEquip = GetPCItemLastUnequipped();
+ sID = GetLocalString(oUnEquip, "sSet")+"_equ";
+ sNameOfSet = GetLocalString(oUnEquip, "sSet");
+
+ iPieces = GetLocalInt(oPC, sID);
+ --iPieces;
+ SetLocalInt(oPC, sID, iPieces);
+
+ if (sNameOfSet=="Dorian's Battlegear")DoriansBattlegearUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Mystra's Rainment")MystrasRainmentUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Thera's Vestments")TherasVestmentsUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Shinobi's Garb")ShinobisGarbUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Benedict's Herald")BenedictsHeraldUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Armor of Divinity")ArmorOfDivinityUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Soothsayer's Regalia")SoothsayersRegaliaUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Robes of Enlightenment")RobesOfEnlightenmentUnEquip(oPC, iPieces, 0);
+ if (sNameOfSet=="Vestments of Rage")VestmentsofRageUnEquip(oPC, iPieces, 0);
+
+ ////////////////////////////////////
+ //: Debugging
+ //: FloatingTextStringOnCreature(IntToString(iPieces), oPC);
+ }
+ else if (nEvent == X2_ITEM_EVENT_ACQUIRE)
+ {
+ oPC = GetModuleItemAcquiredBy();
+ oItem = GetModuleItemAcquired();
+
+ if (SD_UNIQUE_CHECK(oPC, oItem)==TRUE)return;
+
+ sID = GetLocalString(oItem, "sSet")+"_acq";
+ iSetNum = GetLocalInt(oItem, "iSetNum");
+ sNameOfSet = GetLocalString(oItem, "sSet");
+
+ iPieces = GetLocalInt(oPC, sID);
+ ++iPieces;
+ SetLocalInt(oPC, sID, iPieces);
+
+ UpdateName(oPC, oItem, iPieces, iSetNum, sNameOfSet);
+
+
+ ////////////////////////////////////
+ //: Debugging
+ //: FloatingTextStringOnCreature(IntToString(iPieces), oPC);
+
+ }
+else if (nEvent == X2_ITEM_EVENT_UNACQUIRE)
+ {
+ oPC = GetModuleItemLostBy();
+ oItem = GetModuleItemLost();
+ sID = GetLocalString(oItem, "sSet")+"_acq";
+ iSetNum = GetLocalInt(oItem, "iSetNum");
+ sNameOfSet = GetLocalString(oItem, "sSet");
+ iPieces = GetLocalInt(oPC, sID);
+ --iPieces;
+ SetLocalInt(oPC, sID, iPieces);
+
+ UpdateName(oPC, oItem, iPieces, iSetNum, sNameOfSet);
+
+
+ ////////////////////////////////////
+ //: Debugging
+ //: FloatingTextStringOnCreature(IntToString(iPieces), oPC);
+ }
+}
diff --git a/_module/nss/sd_set_item_inc.nss b/_module/nss/sd_set_item_inc.nss
new file mode 100644
index 00000000..487cf6a8
--- /dev/null
+++ b/_module/nss/sd_set_item_inc.nss
@@ -0,0 +1,1380 @@
+
+effect eVis;
+effect eFinal;
+
+// Removes Supernatural Bonuses when set-gear is unequipped
+void SD_REMOVE(object oSubraceCharacter);
+
+//Applies Damage Vulernability to Target
+//========================================
+// oPC = Target to apply the effect to
+// iType = DAMAGE_TYPE_*
+// iAmount = nPercentImmunity
+void BonusDamageVulnerability(object oPC, int iType, int iAmount);
+
+//Applies Miss Chance Effect to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = 1-100 inclusive
+void BonusCTM(object oPC, int iAmount);
+void m_BonusCTM(object oPC);
+
+//Applies Bonus Attacks/Round to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = maximum is 5, even with the effect stacked
+void BonusAPR(object oPC, int iAmount);
+void m_BonusAPR(object oPC);
+
+//Applies Regeneration to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = amount of damage to be regenerated per time interval
+void BonusRegen(object oPC, int iAmount);
+void m_BonusRegen(object oPC);
+
+//Applies Temporary Hit Points to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = # of Temporary HitPoints to award
+void BonusHP(object oPC, int iHP);
+
+//Applies Ability Bonus Target
+//========================================
+// oPC = Target to apply the effect to
+// iAbility = ABILITY_*
+// eg:
+// ABILITY_CHARISMA, ABILITY_CONSTITUTION, ABILITY_DEXTERITY
+// ABILITY_INTELLIGENCE, ABILITY_STRENGTH, ABILITY_WISDOM
+// iAmount = Amount to Increase
+void BonusAbility(object oPC, int iAbility, int iAmount);
+void m_BonusAbility(object oPC, int iAbility, int iAmount);
+
+//Applies AC Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = Amount to Increase
+// iType = AC_*_BONUS
+void BonusAC(object oPC, int iAmount, int iType);
+void m_BonusAC(object oPC, int iAmount);
+
+//Applies Bonus Movement Speed to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = range 0 through 99
+// eg.
+// 0 = no change in speed
+// 50 = 50% faster
+// 99 = almost twice as fast
+void BonusSpeed(object oPC, int iAmount);
+void m_BonusSpeed(object oPC, int iAmount);
+
+//Applies Attack Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = size of attack bonus
+void BonusAttack(object oPC, int iAmount);
+void m_BonusAttack(object oPC, int iAmount);
+
+//Applies Damage Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iType = DAMAGE_TYPE_*
+// iAmount = DAMAGE_BONUS_*
+void BonusDamage(object oPC, int iType, int iAmount);
+void m_BonusDamage(object oPC, int iType, int iAmount);
+
+//Applies Immunity Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iType = IMMUNITY_TYPE_*
+void BonusImmunity(object oPC, int iType);
+void m_BonusImmunity(object oPC, int iType);
+
+//Applies Save Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iType = SAVING_THROW_* (not SAVING_THROW_TYPE_*)
+// iAmount = size of the Saving Throw increase
+void BonusSave(object oPC, int iType, int iAmount);
+void m_BonusSave(object oPC, int iType, int iAmount);
+
+//Applies Save Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iSkill = SKILL_*
+// iAmount = size of the skill increase
+//* Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid.
+void BonusSkill(object oPC, int iSkill, int iAmount);
+void m_BonusSkill(object oPC, int iSkill, int iAmount);
+
+//Applies Damage Immunity Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iType = DAMAGE_TYPE_*
+// iAmount = Percentage of immunity
+void BonusDamageImmunity(object oPC, int iType, int iAmount);
+void m_BonusDamageImmunity(object oPC, int iType, int iAmount);
+
+//Applies Spell Immunity Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iSpell = SPELL_*
+// There is a known bug with this function. There *must* be a parameter specified
+// when this is called (even if the desired parameter is SPELL_ALL_SPELLS)
+void BonusSpellImmunity(object oPC, int iSpell);
+void m_BonusSpellImmunity(object oPC, int iSpell);
+
+//Applies Concealment Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+// iAmount = Percentage > 100
+// iType = MISS_CHANCE_TYPE_*
+void BonusConcealment(object oPC, int iAmount, int iType);
+void m_BonusConcealment(object oPC, int iAmount);
+
+//Applies Ultravision Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+void BonusUltravision(object oPC);
+void m_BonusUltravision(object oPC);
+
+//Applies Truseeing Bonus to Target
+//========================================
+// oPC = Target to apply the effect to
+void BonusTruseeing(object oPC);
+void m_BonusTruseeing(object oPC);
+
+//Applies Haste to Target
+//========================================
+// oPC = Target to apply the effect to
+void BonusHaste(object oPC);
+void m_BonusHaste(object oPC);
+
+//Applies Haste to Target
+//========================================
+// oPC = Target to send message to
+// sMessage = "Subrace Bonus: " + input
+void SubMessage(object oPC, string sMessage);
+
+//Applies Damage Reduction to Target
+//========================================
+// oPC = Target to send message to
+// iPwr = Damage Power
+// eg:
+// DAMAGE_POWER_PLUS_ONE to DAMAGE_POWER_PLUS_TWENTY
+// iAmount = Amount of Damage to Soak
+void BonusDR(object oPC, int iPwr, int iAmount);
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+void SubMessage(object oPC, string sMessage)
+{
+ SendMessageToPC(oPC, "Subrace Bonus: "+sMessage);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//:Ability Wrappers
+//:
+//:
+//:
+
+void BonusDamageVulnerability(object oPC, int iType, int iAmount)
+{
+ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+SupernaturalEffect(EffectDamageImmunityDecrease(iType, iAmount)), oPC);
+}
+
+void BonusDR(object oPC, int iPwr, int iAmount)
+{
+ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+SupernaturalEffect(EffectDamageReduction(iAmount, iPwr, 0)), oPC);
+}
+
+void BonusCTM(object oPC, int iAmount)
+{
+ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+SupernaturalEffect(EffectMissChance(iAmount)), oPC);
+}
+
+void m_BonusCTM(object oPC)
+{
+ SubMessage(oPC, "You can anticipate your enemy's next move with uncanny accuracy");
+}
+void BonusAPR(object oPC, int iAmount)
+{
+ if (iAmount>5)iAmount=5;
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectModifyAttacks(iAmount)), oPC);
+}
+void m_BonusAPR(object oPC)
+{
+ SubMessage(oPC, "You attack with more ferocity");
+}
+void BonusRegen(object oPC, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectRegenerate(iAmount, 6.0)), oPC);
+}
+void m_BonusRegen(object oPC)
+{
+ SubMessage(oPC, "Your wounds begin to heal themselves");
+}
+void BonusHP(object oPC, int iHP)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectTemporaryHitpoints(iHP)), oPC);
+}
+void BonusAbility(object oPC, int iAbility, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectAbilityIncrease(iAbility, iAmount)), oPC);
+}
+void m_BonusAbility(object oPC, int iAbility, int iAmount)
+{
+ switch (iAbility)
+ {
+ case ABILITY_CHARISMA: {SubMessage(oPC, "You feel more talented");}break;
+ case ABILITY_CONSTITUTION: {SubMessage(oPC, "You feel more stalwart");}break;
+ case ABILITY_DEXTERITY: {SubMessage(oPC, "You feel more agile");}break;
+ case ABILITY_INTELLIGENCE: {SubMessage(oPC, "You feel smarter");}break;
+ case ABILITY_STRENGTH: {SubMessage(oPC, "You feel stronger");}break;
+ case ABILITY_WISDOM: {SubMessage(oPC, "You feel wiser");}break;
+ }
+}
+void BonusAC(object oPC, int iAmount, int iType)
+{
+ if (iAmount<0)iAmount=1;
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectACIncrease(iAmount, iType)), oPC);
+}
+void m_BonusAC(object oPC, int iAmount)
+{
+ SubMessage(oPC, "AC increased");
+}
+void BonusSpeed(object oPC, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect
+ (EffectMovementSpeedIncrease(iAmount)), oPC);
+
+}
+void m_BonusSpeed(object oPC, int iAmount)
+{
+ SubMessage(oPC, "You feel faster");
+}
+void BonusAttackDecrease(object oPC, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectAttackDecrease(iAmount)), oPC);
+
+}
+void BonusAttack(object oPC, int iAmount)
+{
+ if (iAmount<0)iAmount=1;
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectAttackIncrease(iAmount)), oPC);
+
+}
+void m_BonusAttack(object oPC, int iAmount)
+{
+ SubMessage(oPC, "Your melee skill improves");
+}
+void BonusDamage(object oPC, int iType, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect
+ (EffectDamageIncrease(iAmount, iType)), oPC);
+
+}
+void m_BonusDamage(object oPC, int iType, int iAmount)
+{
+
+ SubMessage(oPC, "Your blows are more damaging");
+}
+void BonusImmunity(object oPC, int iType)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectImmunity(iType)), oPC);
+
+}
+void m_BonusImmunity(object oPC, int iType)
+{
+
+ switch (iType)
+ {
+ case IMMUNITY_TYPE_BLINDNESS: {SubMessage(oPC, "Immunity to blindness");}break;
+ case IMMUNITY_TYPE_DEATH: {SubMessage(oPC, "You no longer fear death ");}break;
+ case IMMUNITY_TYPE_DISEASE: {SubMessage(oPC, "You shrug off disease");}break;
+ case IMMUNITY_TYPE_FEAR: {SubMessage(oPC, "Your fear dissapears");}break;
+ case IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE: {SubMessage(oPC, "Immunity to speed decrease");}break;
+ case IMMUNITY_TYPE_PARALYSIS: {SubMessage(oPC, "Immunity to paralysis");}break;
+ case IMMUNITY_TYPE_POISON: {SubMessage(oPC, "You drink poison for breakfast");}break;
+ case IMMUNITY_TYPE_STUN: {SubMessage(oPC, "Immunity to stun");}break;
+ case IMMUNITY_TYPE_NEGATIVE_LEVEL: {SubMessage(oPC, "Immunity to level drain");}break;
+ case IMMUNITY_TYPE_ABILITY_DECREASE: {SubMessage(oPC, "Immunity to ability decrease");}break;
+ case IMMUNITY_TYPE_CURSED: {SubMessage(oPC, "You laugh at curses");}break;
+ }
+}
+void BonusSave(object oPC, int iType, int iAmount)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectSavingThrowIncrease(iType, iAmount, SAVING_THROW_TYPE_ALL)), oPC);
+
+}
+void m_BonusSave(object oPC, int iType, int iAmount)
+{
+ switch (iType)
+ {
+ case SAVING_THROW_FORT: {SubMessage(oPC, "You feel more fortuitous");}break;
+ case SAVING_THROW_REFLEX: {SubMessage(oPC, "Your reflexes improve");}break;
+ case SAVING_THROW_WILL: {SubMessage(oPC, "Your will strengthens");}break;
+ case SAVING_THROW_TYPE_FEAR: {SubMessage(oPC, "You are more fearless");}break;
+ case SAVING_THROW_TYPE_DEATH: {SubMessage(oPC, "You are less concerned about death");}break;
+ }
+}
+void BonusSkill(object oPC, int iSkill, int iAmount)
+{
+ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+SupernaturalEffect(EffectSkillIncrease(iSkill, iAmount)), oPC);
+
+}
+void m_BonusSkill(object oPC, int iSkill, int iAmount)
+{
+switch (iSkill)
+ {
+ case SKILL_CONCENTRATION: {SubMessage(oPC, "Your concentration improves");}break;
+ case SKILL_DISCIPLINE: {SubMessage(oPC, "You feel more disciplined");}break;
+ case SKILL_HEAL: {SubMessage(oPC, "Your healing skills improve");}break;
+ case SKILL_HIDE: {SubMessage(oPC, "You are able to hide better");}break;
+ case SKILL_LISTEN: {SubMessage(oPC, "Your hearing improves");}break;
+ case SKILL_MOVE_SILENTLY: {SubMessage(oPC, "Your footsteps become quieter");}break;
+ case SKILL_SPELLCRAFT: {SubMessage(oPC, "Your knowledge of magic improves");}break;
+ case SKILL_TUMBLE: {SubMessage(oPC, "You can tumble more proficiently");}break;
+ case SKILL_TAUNT: {SubMessage(oPC, "Your antagonistic abilities improve");}break;
+ case SKILL_USE_MAGIC_DEVICE: {SubMessage(oPC, "Your understanding of magic devices increases");}break;
+ }
+}
+void BonusDamageImmunity(object oPC, int iType, int iAmount)
+{
+ if (iAmount<0)iAmount=1;
+ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+SupernaturalEffect(EffectDamageImmunityIncrease(iType, iAmount)), oPC);
+
+}
+void m_BonusDamageImmunity(object oPC, int iType, int iAmount)
+{
+switch (iType)
+ {
+ case DAMAGE_TYPE_ACID: {SubMessage(oPC, IntToString(iAmount)+"% acid damage immunity increase");}break;
+ case DAMAGE_TYPE_BLUDGEONING: {SubMessage(oPC, IntToString(iAmount)+"% bludgeoning damage immunity increase");}break;
+ case DAMAGE_TYPE_COLD: {SubMessage(oPC, IntToString(iAmount)+"% cold immunity damage increase");}break;
+ case DAMAGE_TYPE_MAGICAL: {SubMessage(oPC, IntToString(iAmount)+"% magical damage immunity increase");}break;
+ case DAMAGE_TYPE_ELECTRICAL: {SubMessage(oPC, IntToString(iAmount)+"% electrical damage immunity increase");}break;
+ case DAMAGE_TYPE_SLASHING: {SubMessage(oPC, IntToString(iAmount)+"% slashing damage immunity increase");}break;
+ case DAMAGE_TYPE_PIERCING: {SubMessage(oPC, IntToString(iAmount)+"% piercing damage immunity increase");}break;
+ case DAMAGE_TYPE_FIRE: {SubMessage(oPC, IntToString(iAmount)+"% fire damage immunity increase");}break;
+ case DAMAGE_TYPE_NEGATIVE: {SubMessage(oPC, IntToString(iAmount)+"% negative damage immunity increase");}break;
+ }
+}
+
+void BonusSpellImmunity(object oPC, int iSpell)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectSpellImmunity(iSpell)), oPC);
+
+}
+void m_BonusSpellImmunity(object oPC, int iSpell)
+{
+ switch (iSpell)
+ {
+ case SPELL_DOOM: {SubMessage(oPC, "Immune to spell: Doom");}break;
+ case SPELL_DAZE: {SubMessage(oPC, "Immune to spell: Daze");}break;
+ case SPELL_STORM_OF_VENGEANCE: {SubMessage(oPC, "Immune to spell: Storm of Vengeance");}break;
+ case SPELL_HARM: {SubMessage(oPC, "Immune to spell: Harm");}break;
+ }
+}
+void BonusConcealment(object oPC, int iAmount, int iType)
+{
+ int eVis;
+ if (iAmount>50)eVis = VFX_DUR_ETHEREAL_VISAGE;
+ else eVis = VFX_DUR_GHOSTLY_VISAGE_NO_SOUND;
+
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectConcealment(iAmount, iType)), oPC);
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectVisualEffect(eVis)), oPC);
+}
+void m_BonusConcealment(object oPC, int iAmount)
+{
+ SubMessage(oPC, "You partially fade from sight");
+}
+void BonusUltravision(object oPC)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectUltravision()), oPC);
+
+}
+void m_BonusUltravision(object oPC)
+{
+ SubMessage(oPC, "Your vision becomes all penetrating");
+}
+void BonusTruseeing(object oPC)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectTrueSeeing()), oPC);
+
+}
+void m_BonusTruseeing(object oPC)
+{
+ SubMessage(oPC, "Your vision penetrates even the thickest of vales");
+}
+void BonusHaste(object oPC)
+{
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT,
+ SupernaturalEffect(EffectHaste()), oPC);
+}
+void m_BonusHaste(object oPC)
+{
+ SubMessage(oPC, "The world around you somehow seems slower");
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//:General Utilities
+//:
+//:
+//:
+
+void UnSet(object oPC, effect eSubraceEffect)
+{
+ if((GetEffectCreator(eSubraceEffect) == GetModule()) &&
+ (GetEffectSubType(eSubraceEffect) == SUBTYPE_SUPERNATURAL))
+ {
+ RemoveEffect(oPC, eSubraceEffect);
+ }
+}
+void SD_REMOVE(object oPC)
+{
+ effect eSpeed = SupernaturalEffect(EffectMovementSpeedIncrease(80));
+ effect eFX = GetFirstEffect(oPC);
+ while(GetIsEffectValid(eFX))
+ {
+ UnSet(oPC, eFX);
+ eFX = GetNextEffect(oPC);
+ }
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeed, oPC);
+}
+////////////////////////////////////////////////////////////////////////////////
+//:Set Specifics
+//:
+//:
+//:
+//:
+
+///////////////////////////////
+//:Dorian's Battlegear
+//:
+
+void DoriansBattlegearEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_IMP_EVIL_HELP);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_STRENGTH, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Dorian's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_STRENGTH, 4));
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_STRENGTH, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_FIRE, DAMAGE_BONUS_1d4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Dorian's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_STRENGTH, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_FIRE, DAMAGE_BONUS_1d4));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_STRENGTH, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_FIRE, DAMAGE_BONUS_1d4));
+ DelayCommand(0.1, BonusAPR(oPC, 2));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Dorian's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void DoriansBattlegearUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Set Dorian's Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ FloatingTextStringOnCreature("* Dorian's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ BonusDamage(oPC, DAMAGE_TYPE_FIRE, DAMAGE_BONUS_1d4);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ BonusDamage(oPC, DAMAGE_TYPE_FIRE, DAMAGE_BONUS_1d4);
+ FloatingTextStringOnCreature("* Dorian's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+
+///////////////////////////////
+//:Mystra's Rainment
+//:
+
+void MystrasRainmentEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_FNF_PWKILL);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_INTELLIGENCE, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Mystra's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_INTELLIGENCE, 4));
+ } break;
+
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_INTELLIGENCE, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ if (iFlag==0)FloatingTextStringOnCreature("* Mystra's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_INTELLIGENCE, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_INTELLIGENCE, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ DelayCommand(0.1, BonusHaste(oPC));
+ DelayCommand(0.1, BonusImmunity(oPC, IMMUNITY_TYPE_CRITICAL_HIT));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Mystra's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void MystrasRainmentUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Mystra's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_INTELLIGENCE, 4);
+ }; break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_INTELLIGENCE, 4);
+ FloatingTextStringOnCreature("* Mystra's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_INTELLIGENCE, 4);
+ BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL);
+ }; break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_INTELLIGENCE, 4);
+ BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL);
+ FloatingTextStringOnCreature("* Mystra's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ }
+
+}
+
+///////////////////////////////
+//:Thera's Vestments
+//:
+
+void TherasVestmentsEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_IMP_CHARM);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Thera's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ } break;
+
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ if (iFlag==0)FloatingTextStringOnCreature("* Thera's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL));
+ DelayCommand(0.1, BonusHaste(oPC));
+ DelayCommand(0.1, BonusImmunity(oPC, IMMUNITY_TYPE_CRITICAL_HIT));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Thera's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void TherasVestmentsUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Thera's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_CHARISMA, 4);
+ }; break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_CHARISMA, 4);
+ FloatingTextStringOnCreature("* Thera's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_CHARISMA, 4);
+ BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL);
+ }; break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_INTELLIGENCE, 4);
+ BonusConcealment(oPC, 30, MISS_CHANCE_TYPE_NORMAL);
+ FloatingTextStringOnCreature("* Thera's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ }
+
+}
+
+///////////////////////////////
+//:Shinobi's Garb
+//:
+
+void ShinobisGarbEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_IMP_DEATH_WARD);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ if (iFlag==0)FloatingTextStringOnCreature("* Shinobi's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_DEXTERITY, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Shinobi's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_DEXTERITY, 4));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_DEXTERITY, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_PIERCING, DAMAGE_BONUS_1d4));
+ DelayCommand(0.1, BonusConcealment(oPC, 60, MISS_CHANCE_TYPE_NORMAL));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Shinobi's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void ShinobisGarbUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Shinobi's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ FloatingTextStringOnCreature("* Shinobi's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_DEXTERITY, 4));
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusSpeed(oPC, 50));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_DEXTERITY, 4));
+ FloatingTextStringOnCreature("* Shinobi's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+}
+///////////////////////////////
+//:Benedict's Herald
+//:
+
+void BenedictsHeraldEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Benedict's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_DIVINE, DAMAGE_BONUS_1d4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Benedict's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_DIVINE, DAMAGE_BONUS_1d4));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_DIVINE, DAMAGE_BONUS_1d4));
+ DelayCommand(0.1, BonusImmunity(oPC, IMMUNITY_TYPE_NEGATIVE_LEVEL));
+ DelayCommand(0.1, BonusHaste(oPC));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Benedict's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void BenedictsHeraldUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Benedict's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ FloatingTextStringOnCreature("* Benedict's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_DIVINE, DAMAGE_BONUS_1d4));
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_DIVINE, DAMAGE_BONUS_1d4));
+ FloatingTextStringOnCreature("* Benedict's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+
+///////////////////////////////
+//:Armor of Divinity
+//:
+
+void ArmorOfDivinityEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_IMP_GOOD_HELP);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Zealot's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_SLASHING, DAMAGE_BONUS_1d4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Zealot's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_SLASHING, DAMAGE_BONUS_1d4));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CHARISMA, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_SLASHING, DAMAGE_BONUS_1d4));
+ DelayCommand(0.1, BonusAPR(oPC, 1));
+ DelayCommand(0.1, BonusAttack(oPC, 2));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Zealot's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void ArmorOfDivinityUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Set Zealot's Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ FloatingTextStringOnCreature("* Zealot's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ BonusDamage(oPC, DAMAGE_TYPE_SLASHING, DAMAGE_BONUS_1d4);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_STRENGTH, 4);
+ BonusDamage(oPC, DAMAGE_TYPE_SLASHING, DAMAGE_BONUS_1d4);
+ FloatingTextStringOnCreature("* Zealot's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+}
+
+///////////////////////////////
+//:Soothsayer's Regalia
+//:
+
+void SoothsayersRegaliaEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Oracle's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ } break;
+
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusSpeed(oPC, 40));
+ if (iFlag==0)FloatingTextStringOnCreature("* Oracle's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusSpeed(oPC, 40));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusSpeed(oPC, 40));
+ DelayCommand(0.1, BonusHaste(oPC));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_ELECTRICAL, DAMAGE_BONUS_1d4));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Oracle's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void SoothsayersRegaliaUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Oracle's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_WISDOM, 4);
+ }; break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_WISDOM, 4);
+ FloatingTextStringOnCreature("* Oracle's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_WISDOM, 4);
+ DelayCommand(0.1, BonusSpeed(oPC, 40));
+ }; break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ BonusAbility(oPC, ABILITY_WISDOM, 4);
+ DelayCommand(0.1, BonusSpeed(oPC, 40));
+ FloatingTextStringOnCreature("* Oracle's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ }
+
+}
+///////////////////////////////
+//:Robes of Enlightenment
+//:
+
+void RobesOfEnlightenmentEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Trancendent Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ if (iFlag==0)FloatingTextStringOnCreature("* Trancendent Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ DelayCommand(0.1, BonusDamage(oPC, DAMAGE_TYPE_SONIC, DAMAGE_BONUS_1d4));
+ DelayCommand(0.1, BonusRegen(oPC, 4));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Trancendent Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void RobesOfEnlightenmentUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Trancendent Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ FloatingTextStringOnCreature("* Trancendent Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusDR(oPC, 5, DAMAGE_POWER_PLUS_TEN));
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_WISDOM, 4));
+ FloatingTextStringOnCreature("* Trancendent Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+}
+
+///////////////////////////////
+//:Vestments of Rage
+//:barbarian set
+
+void VestmentsofRageEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
+ eFinal = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY);
+
+ switch (iPieces)
+ {
+ case 1: {} break;
+
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ if (iFlag==0)FloatingTextStringOnCreature("* Conan's Set Bonus I Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ } break;
+
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ DelayCommand(0.1, BonusDR(oPC, DAMAGE_POWER_PLUS_TEN, 10));
+ if (iFlag==0)FloatingTextStringOnCreature("* Conan's Set Bonus II Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ DelayCommand(0.1, BonusDR(oPC, DAMAGE_POWER_PLUS_TEN, 10));
+ } break;
+ case 6:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ DelayCommand(0.1, BonusDR(oPC, DAMAGE_POWER_PLUS_TEN, 10));
+ DelayCommand(0.1, BonusHaste(oPC));
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eFinal, oPC);
+ if (iFlag==0)FloatingTextStringOnCreature("* Conan's Set Completion Bonus Applied *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ } break;
+ }
+
+}
+//////////////////////////////////////////////////////
+void VestmentsofRageUnEquip(object oPC, int iPieces, int iFlag)
+{
+ eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
+
+ switch (iPieces)
+ {
+ case 1:
+ {
+ SD_REMOVE(oPC);
+ FloatingTextStringOnCreature("* Conan's Set Bonus I Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 2:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ }; break;
+ case 3:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ FloatingTextStringOnCreature("* Conan's Set Bonus II Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ case 4:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ DelayCommand(0.1, BonusDR(oPC, DAMAGE_POWER_PLUS_TEN, 10));
+ }; break;
+ case 5:
+ {
+ SD_REMOVE(oPC);
+ DelayCommand(0.1, BonusAbility(oPC, ABILITY_CONSTITUTION, 6));
+ DelayCommand(0.1, BonusDR(oPC, DAMAGE_POWER_PLUS_TEN, 10));
+ FloatingTextStringOnCreature("* Conan's Set Completion Bonus Lost *", oPC);
+ if (iFlag==0)ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
+ }; break;
+ }
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//:Reapply set bonuses after death
+//:
+//:
+//:
+
+void ApplySetBonus(object oPC)
+{
+ string sID, sSetName;
+ int iPieces;
+ object oItem;
+
+ sID = "Dorian's Battlegear_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)DoriansBattlegearEquip(oPC, iPieces, 1);
+ sID = "Mystra's Rainment_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)MystrasRainmentEquip(oPC, iPieces, 1);
+ sID = "Thera's Vestments_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)TherasVestmentsEquip(oPC, iPieces, 1);
+ sID = "Shinobi's Garb_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)ShinobisGarbEquip(oPC, iPieces, 1);
+ sID = "Benedict's Herald_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)BenedictsHeraldEquip(oPC, iPieces, 1);
+ sID = "Armor of Divinity_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)ArmorOfDivinityEquip(oPC, iPieces, 1);
+ sID = "Soothsayer's Regalia_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)SoothsayersRegaliaEquip(oPC, iPieces, 1);
+ sID = "Robes of Enlightenment_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)RobesOfEnlightenmentEquip(oPC, iPieces, 1);
+ sID = "Vestments of Rage_equ";
+ iPieces = GetLocalInt(oPC, sID);
+ if (iPieces>0)VestmentsofRageEquip(oPC, iPieces, 1);
+}
+
+
+///////////////////////
+//: For Test Compiling
+//: void main(){}
+
+
diff --git a/_module/nss/sd_setdrop.nss b/_module/nss/sd_setdrop.nss
new file mode 100644
index 00000000..944d9aa5
--- /dev/null
+++ b/_module/nss/sd_setdrop.nss
@@ -0,0 +1,17 @@
+#include "sd_lootsystem"
+
+void main()
+{
+ object oPC = GetLastOpenedBy();
+
+ DropSetItem(oPC, OBJECT_SELF);
+
+
+object oItem = GetFirstItemInInventory(OBJECT_SELF);
+while (GetIsObjectValid(oItem))
+ {
+ if (GetIdentified(oItem)==FALSE)SetIdentified(oItem, TRUE);
+ oItem = GetNextItemInInventory(OBJECT_SELF);
+ }
+
+}
diff --git a/_module/nss/sd_setplot.nss b/_module/nss/sd_setplot.nss
new file mode 100644
index 00000000..37412270
--- /dev/null
+++ b/_module/nss/sd_setplot.nss
@@ -0,0 +1,4 @@
+void main()
+{
+SetPlotFlag(OBJECT_SELF, 1);
+}
diff --git a/_module/nss/sd_soc_install.nss b/_module/nss/sd_soc_install.nss
new file mode 100644
index 00000000..3a70d139
--- /dev/null
+++ b/_module/nss/sd_soc_install.nss
@@ -0,0 +1,224 @@
+const string COLORTOKEN = " ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¡¢£¤¥¦§¨©ª«¬¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþþ";
+
+string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255)
+{
+ return "" + sText + "";
+}
+
+
+void RE_SOCKET(object oPC, object oItem)
+{
+int iLength, iStart, iVal, iAmt;
+string sSocks, sGem, i1, i2, i3, i4, i5, i6, i7, i8;
+string sName = GetName(oItem);
+
+iLength = GetStringLength(sName);
+sSocks = GetSubString(sName, iLength-6, 1);
+//SendMessageToPC(oPC, sName + " has " + sSocks + " sockets");
+iVal = StringToInt(sSocks);
+SetLocalInt(oItem, "SOCKETS",iVal);
+}
+
+void RE_GEM(object oPC, object oItem)
+{
+ string sName, sType1;
+ int rVal;
+
+ sName = GetName(oItem);
+
+ // Misc ability gems
+
+ if (FindSubString(sName, "Vengeful")>=0) sType1 = "HOLY_AVENGER";
+ if (FindSubString(sName, "Deadly")>=0) sType1 = "KEEN";
+ if (FindSubString(sName, "Unstoppable")>=0) sType1 = "FREEDOM";
+ if (FindSubString(sName, "Slippery")>=0) sType1 = "IMPROVED_EVASION";
+ if (FindSubString(sName, "Speedy")>=0) sType1 = "HASTE";
+ if (FindSubString(sName, "Ocular")>=0) sType1 = "TRUE_SEEING";
+
+
+ // Attack Gems
+
+ if (FindSubString(sName,"Enhancement")>=0){sType1 = "ENHANCEMENT_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Attack")>=0){sType1 = "ATTACK_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"AC")>=0){sType1 = "AC_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Brutal")>=0){sType1 = "MASSIVE_CRITICAL";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+
+ // Ability bonus gems
+
+ if (FindSubString(sName,"Mighty")>=0){sType1 = "STRENGTH_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Deft")>=0){sType1 = "DEXTERITY_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Wise")>=0){sType1 = "WISDOM_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Hardy")>=0){sType1 = "CONSTITUTION_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Clever")>=0){sType1 = "INTELLIGENCE_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Charming")>=0){sType1 = "CHARISMA_ABILITY_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+
+
+ // Damage bonus gems
+
+ if (FindSubString(sName,"Corrosive")>=0){sType1 = "ACID_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Thumping")>=0){sType1 = "BLUDGEONING_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Ice")>=0){sType1 = "COLD_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Holy")>=0){sType1 = "DIVINE_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Zapping")>=0){sType1 = "ELECTIRCAL_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Scorching")>=0){sType1 = "FIRE_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Magical")>=0){sType1 = "MAGICAL_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Evil")>=0){sType1 = "NEGATIVE_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Impaling")>=0){sType1 = "PIERCING_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Benevolent")>=0){sType1 = "POSITIVE_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Slicing")>=0){sType1 = "SLASHING_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Booming")>=0){sType1 = "SONIC_DAMAGE_BONUS";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Regeneration")>=0){sType1 = "REGENERATION";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+ if (FindSubString(sName,"Vamp Regen")>=0){sType1 = "VAMPIRIC_REGENERATION";
+ rVal = StringToInt(GetSubString(sName, 7, 1));}
+
+ // Damage Res Gems
+
+ if (FindSubString(sName, "Alkaline")>=0)
+ {sType1 = "ACID_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Solid")>=0)
+ {sType1 = "BLUDGEONING_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Warm")>=0)
+ {sType1 = "COLD_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Absolvsion")>=0)
+ {sType1 = "DIVINE_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Grounding")>=0)
+ {sType1 = "ELECTRICAL_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Cool")>=0)
+ {sType1 = "FIRE_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Mantle")>=0)
+ {sType1 = "MAGICAL_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Bright")>=0)
+ {sType1 = "NEGATIVE_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Shell")>=0)
+ {sType1 = "PIERCING_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Malevolent")>=0)
+ {sType1 = "POSITIVE_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Mesh")>=0)
+ {sType1 = "SLASHING_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+ if (FindSubString(sName, "Dampening")>=0)
+ {sType1 = "SONIC_DAMAGE_RESISTANCE";
+ if (GetSubString(sName, 9, 1)==" ")rVal = StringToInt(GetSubString(sName, 8, 1));
+ else rVal = StringToInt(GetSubString(sName, 8, 2));}
+
+
+ SetLocalString(oItem, "GEM_TYPE", sType1);
+ SetLocalInt(oItem, "AMOUNT", rVal);
+}
+
+
+void main()
+{
+object oPC = OBJECT_SELF;
+object oItem;
+int iLength, iStart, iVal, iAmt;
+string sSocks, sName;
+
+// check item slots for socketed items
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_NECK, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_BELT, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_BELT, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC));
+
+if (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC))== "sf_socket_item")
+ RE_SOCKET(oPC, GetItemInSlot(INVENTORY_SLOT_ARMS, oPC));
+
+// check inventory for socketed items
+oItem = GetFirstItemInInventory(oPC);
+while (GetIsObjectValid(oItem))
+ {
+ if (GetTag(oItem)=="sf_socket_item")
+ {
+ RE_SOCKET(oPC, oItem);
+ }
+ if (GetResRef(oItem)=="sd_rune"||
+ GetResRef(oItem)=="sd_rune2"||
+ GetResRef(oItem)=="sd_rune3")
+ {
+ RE_GEM(oPC, oItem);
+ }
+ oItem = GetNextItemInInventory(oPC);
+ }
+string sMess = ColorString("Socketed items system ", 255, 215, 0);
+sMess += ColorString("[loaded successfully]", 0, 255, 255);
+
+SendMessageToPC(oPC, sMess);
+return;
+}
+
diff --git a/_module/nss/x2_def_spawn.nss b/_module/nss/x2_def_spawn.nss
index 9e01129b..df44db10 100644
--- a/_module/nss/x2_def_spawn.nss
+++ b/_module/nss/x2_def_spawn.nss
@@ -570,7 +570,7 @@ void main()
//:: Set or Randomize name
ms_Nomenclature(OBJECT_SELF);
-
+
//:: Post Spawn event requested
if (nSpecEvent == 2 || nSpecEvent == 3)
{
diff --git a/_module/uti/sd_barb_s1.uti.json b/_module/uti/sd_barb_s1.uti.json
new file mode 100644
index 00000000..5001bcab
--- /dev/null
+++ b/_module/uti/sd_barb_s1.uti.json
@@ -0,0 +1,282 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 152155
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Crown",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 26
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Crown"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_barb_s2.uti.json b/_module/uti/sd_barb_s2.uti.json
new file mode 100644
index 00000000..d22ce0f6
--- /dev/null
+++ b/_module/uti/sd_barb_s2.uti.json
@@ -0,0 +1,384 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 36
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 7
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 3
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 120
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 187280
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 3
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 131
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Loincloth",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 76
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 21
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Loincloth"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_barb_s3.uti.json b/_module/uti/sd_barb_s3.uti.json
new file mode 100644
index 00000000..c3fdf216
--- /dev/null
+++ b/_module/uti/sd_barb_s3.uti.json
@@ -0,0 +1,320 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 110776
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Belt",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 13
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Belt"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_barb_s4.uti.json b/_module/uti/sd_barb_s4.uti.json
new file mode 100644
index 00000000..757012a9
--- /dev/null
+++ b/_module/uti/sd_barb_s4.uti.json
@@ -0,0 +1,313 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 3
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 2
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 199093
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 120
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 3
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Bearskin Cloak",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 116
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 4
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Bearskin Cloak"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_barb_s5.uti.json b/_module/uti/sd_barb_s5.uti.json
new file mode 100644
index 00000000..75cc5d06
--- /dev/null
+++ b/_module/uti/sd_barb_s5.uti.json
@@ -0,0 +1,297 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 171218
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Footstraps/c>",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 22
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Footstraps"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_barb_s6.uti.json b/_module/uti/sd_barb_s6.uti.json
new file mode 100644
index 00000000..5dedb765
--- /dev/null
+++ b/_module/uti/sd_barb_s6.uti.json
@@ -0,0 +1,289 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 52346
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Vestments of Rage\n\nConan was a famed barbarian who, through his many great deeds, raised the reputation of barbarians from that of wildmen to that of heroes. His vestments became a well known symbol of his skill and prowess in battle and to this day still strike fear into the enemies of the wearer.\n\nClass: Barbarian\nClass: Dwarven Defender\n\nBonuses\n--------------\n2 Pieces +6 Con\n4 Pieces: +10 Soak 10 Dam\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Bludegoning Damage\nHaste",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Conan's Wriststrap",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_barb_s6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Conan's Wriststrap"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Vestments of Rage"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_bastard.uti.json b/_module/uti/sd_bastard.uti.json
new file mode 100644
index 00000000..724c8b53
--- /dev/null
+++ b/_module/uti/sd_bastard.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 3
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 70
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Bastard Sword"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 64
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_bastard"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_bastard"
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_1.uti.json b/_module/uti/sd_cleric_s1_1.uti.json
new file mode 100644
index 00000000..717e970a
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_1.uti.json
@@ -0,0 +1,258 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 36422
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Grips",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 8
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 15
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Grips"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_2.uti.json b/_module/uti/sd_cleric_s1_2.uti.json
new file mode 100644
index 00000000..dbf605b4
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_2.uti.json
@@ -0,0 +1,297 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 61780
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Sandals",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 41
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 44
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Sandals"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_3.uti.json b/_module/uti/sd_cleric_s1_3.uti.json
new file mode 100644
index 00000000..721b8f06
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_3.uti.json
@@ -0,0 +1,313 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 50058
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 74
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Mitre",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 166
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 27
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 11
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 12
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Mitre"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_4.uti.json b/_module/uti/sd_cleric_s1_4.uti.json
new file mode 100644
index 00000000..29eec168
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_4.uti.json
@@ -0,0 +1,384 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 33
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 61
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 124377
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Plate",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 166
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Robe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_5.uti.json b/_module/uti/sd_cleric_s1_5.uti.json
new file mode 100644
index 00000000..794fdaa0
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_5.uti.json
@@ -0,0 +1,282 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 62
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 62
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 143569
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 62
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 166
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Ephod",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 62
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 4
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 183
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Ephod"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_cleric_s1_6.uti.json b/_module/uti/sd_cleric_s1_6.uti.json
new file mode 100644
index 00000000..9fbc4d72
--- /dev/null
+++ b/_module/uti/sd_cleric_s1_6.uti.json
@@ -0,0 +1,382 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 268960
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benedict's Herald\n\nBenedictus was a Roman noble, who studied in Rome, but was dismayed by the lack of discipline and the lackadasical attitude of his fellow students. He fled to the mountains, living as a hermit in a cave for three years and was reported to have been fed by a raven. He later emerged a powerful clerical infulence and became famous for his ability to drive evil back from whence it came.\n\nClass: Cleric\n\nBonuses\n--------------\n2 Pieces: +4 Wis\n4 Pieces: 1d4 Divine Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune Lvl Drain\nHaste",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Benevolent Cord",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 8
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 6
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_cleric_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benevolent Cord"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Benedict's Herald"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_1.uti.json b/_module/uti/sd_druid_s1_1.uti.json
new file mode 100644
index 00000000..feadd47b
--- /dev/null
+++ b/_module/uti/sd_druid_s1_1.uti.json
@@ -0,0 +1,344 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 123
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 63471
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Headdress",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 8
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 515
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Headdress"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_2.uti.json b/_module/uti/sd_druid_s1_2.uti.json
new file mode 100644
index 00000000..c975c43a
--- /dev/null
+++ b/_module/uti/sd_druid_s1_2.uti.json
@@ -0,0 +1,415 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 6
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 13
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 234856
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Covering",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 6
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Covering"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_3.uti.json b/_module/uti/sd_druid_s1_3.uti.json
new file mode 100644
index 00000000..f84f9bf3
--- /dev/null
+++ b/_module/uti/sd_druid_s1_3.uti.json
@@ -0,0 +1,297 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 114170
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Shinwraps",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 43
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Shinwraps"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_4.uti.json b/_module/uti/sd_druid_s1_4.uti.json
new file mode 100644
index 00000000..eef1516b
--- /dev/null
+++ b/_module/uti/sd_druid_s1_4.uti.json
@@ -0,0 +1,444 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 660491
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Cord",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 7
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Cord"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_5.uti.json b/_module/uti/sd_druid_s1_5.uti.json
new file mode 100644
index 00000000..1022f32f
--- /dev/null
+++ b/_module/uti/sd_druid_s1_5.uti.json
@@ -0,0 +1,313 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 134793
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 15
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Mantle",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 152
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Mantle"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_druid_s1_6.uti.json b/_module/uti/sd_druid_s1_6.uti.json
new file mode 100644
index 00000000..54cbbe3f
--- /dev/null
+++ b/_module/uti/sd_druid_s1_6.uti.json
@@ -0,0 +1,289 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 125441
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Soothsayer's Regalia\n\nLong ago, in a place called Wales, druids plunged golden gutting knives into human sacrifices. Or they stabbed a slave or criminal in the back. Surrounding him, the druids studied his convulsions. They intently listened to the volume and intensity of his groans. From his manner of dying, and after carefully comparing their observations, the druids foretold the future: and thus began the art of soothsaying.\n\nClass: Druid\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n +40% Movement Increase\n4 Pieces: +4 Attack Bonus\n\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1d4 Electrical Damage\nHaste",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Oracle's Stanchions",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 5
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 36
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_druid_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Oracle's Stanchions"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Soothsayer's Regalia"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_1.uti.json b/_module/uti/sd_fighter_s1_1.uti.json
new file mode 100644
index 00000000..daabb957
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_1.uti.json
@@ -0,0 +1,415 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 53
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 91
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 91
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 188779
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 91
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Vestguard",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 7
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 29
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Vestguard"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_2.uti.json b/_module/uti/sd_fighter_s1_2.uti.json
new file mode 100644
index 00000000..7beb87d6
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_2.uti.json
@@ -0,0 +1,317 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 57
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 63790
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Crest",
+ "id": 1551
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 31
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Crest"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_3.uti.json b/_module/uti/sd_fighter_s1_3.uti.json
new file mode 100644
index 00000000..d0399a82
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_3.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 84827
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 88
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Helm",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 16
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 255
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Helm"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_4.uti.json b/_module/uti/sd_fighter_s1_4.uti.json
new file mode 100644
index 00000000..d582a0a2
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_4.uti.json
@@ -0,0 +1,349 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 319874
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Waistband",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 75
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Waistband"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_5.uti.json b/_module/uti/sd_fighter_s1_5.uti.json
new file mode 100644
index 00000000..fea39745
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_5.uti.json
@@ -0,0 +1,289 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 23378
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Gauntlets",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 3
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Gauntlets"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s1_6.uti.json b/_module/uti/sd_fighter_s1_6.uti.json
new file mode 100644
index 00000000..56863785
--- /dev/null
+++ b/_module/uti/sd_fighter_s1_6.uti.json
@@ -0,0 +1,390 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 282577
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Battlegear \n\nKnown as 'Dorian the Red', Dorian was a dwarven hero reknown for his penchant for setting fire to his weapons before charging into battle. He was also famous for his uncanny speed with an axe.\n\nClass: Fighter\nClass: Ranger\n\nBonuses\n--------------\n2 Pieces: +4 STR\n4 Pieces: 1d4 Fire Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+2 Attacks/Round",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Dorian's Greaves",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 75
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 35
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Greaves"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Dorian's Battlegear"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_1.uti.json b/_module/uti/sd_fighter_s2_1.uti.json
new file mode 100644
index 00000000..4ebce0c2
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_1.uti.json
@@ -0,0 +1,382 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 126226
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Tekou",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 4
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 36
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Teku"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_2.uti.json b/_module/uti/sd_fighter_s2_2.uti.json
new file mode 100644
index 00000000..62709472
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_2.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 32607
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 85
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Kabuto",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 57
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 29
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 255
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Kabuto"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_3.uti.json b/_module/uti/sd_fighter_s2_3.uti.json
new file mode 100644
index 00000000..96241536
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_3.uti.json
@@ -0,0 +1,446 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 6
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 45
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 187280
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 45
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Kimono",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 164
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 21
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Kimono"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_4.uti.json b/_module/uti/sd_fighter_s2_4.uti.json
new file mode 100644
index 00000000..6e95d04a
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_4.uti.json
@@ -0,0 +1,328 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 69057
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Tabi",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 41
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Tabi"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_5.uti.json b/_module/uti/sd_fighter_s2_5.uti.json
new file mode 100644
index 00000000..7d437436
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_5.uti.json
@@ -0,0 +1,382 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 66016
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Obi",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 4
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 13
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Obi"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_fighter_s2_6.uti.json b/_module/uti/sd_fighter_s2_6.uti.json
new file mode 100644
index 00000000..14917267
--- /dev/null
+++ b/_module/uti/sd_fighter_s2_6.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 175166
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Garb\n\nThe Shinobi were a clan of ninja, famed for their formidible warriors and stealthy assassins. They were masters of the art of ninjutsu. The underlying connotation of shinobi (pronounced nin in Sino-Japanese compounds) is \"to do quietly\". The nin of ninjutsu is the same as that in ninja, whereas jutsu means skill or art, so ninjutsu means \"the skill of going unperceived\" or \"the art of stealth\"\n\nClass: Rogue\nClass: Ranger\nClass: Fighter\n\nBonuses\n--------------\n2 Pieces +50% Move Spd\n4 Pieces: +6 Dex\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Piercing Damage\n60% Concealment",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Shinobi's Oyoroi",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 166
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 5
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 12
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 7
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 8
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_fighter_s2_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Oyoroi"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Shinobi's Garb"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_mgloves.uti.json b/_module/uti/sd_mgloves.uti.json
new file mode 100644
index 00000000..f69253c5
--- /dev/null
+++ b/_module/uti/sd_mgloves.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves"
+ }
+}
diff --git a/_module/uti/sd_mgloves1.uti.json b/_module/uti/sd_mgloves1.uti.json
new file mode 100644
index 00000000..72b525e3
--- /dev/null
+++ b/_module/uti/sd_mgloves1.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves1"
+ }
+}
diff --git a/_module/uti/sd_mgloves2.uti.json b/_module/uti/sd_mgloves2.uti.json
new file mode 100644
index 00000000..a2cecf16
--- /dev/null
+++ b/_module/uti/sd_mgloves2.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves2"
+ }
+}
diff --git a/_module/uti/sd_mgloves3.uti.json b/_module/uti/sd_mgloves3.uti.json
new file mode 100644
index 00000000..2fb414e7
--- /dev/null
+++ b/_module/uti/sd_mgloves3.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 6
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves3"
+ }
+}
diff --git a/_module/uti/sd_mgloves4.uti.json b/_module/uti/sd_mgloves4.uti.json
new file mode 100644
index 00000000..d18785f1
--- /dev/null
+++ b/_module/uti/sd_mgloves4.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 5
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves4"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves4"
+ }
+}
diff --git a/_module/uti/sd_mgloves5.uti.json b/_module/uti/sd_mgloves5.uti.json
new file mode 100644
index 00000000..cf91d837
--- /dev/null
+++ b/_module/uti/sd_mgloves5.uti.json
@@ -0,0 +1,111 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Monk Gloves"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 3
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_mgloves5"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_mgloves5"
+ }
+}
diff --git a/_module/uti/sd_monk_s1_1.uti.json b/_module/uti/sd_monk_s1_1.uti.json
new file mode 100644
index 00000000..d4189857
--- /dev/null
+++ b/_module/uti/sd_monk_s1_1.uti.json
@@ -0,0 +1,313 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 47268
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 75
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Cap",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 84
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 28
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 255
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Cap"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_monk_s1_2.uti.json b/_module/uti/sd_monk_s1_2.uti.json
new file mode 100644
index 00000000..39d93ea7
--- /dev/null
+++ b/_module/uti/sd_monk_s1_2.uti.json
@@ -0,0 +1,415 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 31
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 6
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 107849
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 132
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Harness",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 1
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 0
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 18
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 9
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 6
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 44
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Harness"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_monk_s1_3.uti.json b/_module/uti/sd_monk_s1_3.uti.json
new file mode 100644
index 00000000..fcf7758d
--- /dev/null
+++ b/_module/uti/sd_monk_s1_3.uti.json
@@ -0,0 +1,320 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 73531
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Sequin Belt",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 9
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 16
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 69
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 53
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Sequin Belt"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_monk_s1_4.uti.json b/_module/uti/sd_monk_s1_4.uti.json
new file mode 100644
index 00000000..e332150f
--- /dev/null
+++ b/_module/uti/sd_monk_s1_4.uti.json
@@ -0,0 +1,344 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 180500
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Windcatcher",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 166
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 8
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 12
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Windcatcher"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_monk_s1_5.uti.json b/_module/uti/sd_monk_s1_5.uti.json
new file mode 100644
index 00000000..a4e34148
--- /dev/null
+++ b/_module/uti/sd_monk_s1_5.uti.json
@@ -0,0 +1,297 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 177157
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Clogs",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 42
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 22
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 29
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Clogs"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_monk_s1_6.uti.json b/_module/uti/sd_monk_s1_6.uti.json
new file mode 100644
index 00000000..cce0339b
--- /dev/null
+++ b/_module/uti/sd_monk_s1_6.uti.json
@@ -0,0 +1,318 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 19
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 143163
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Robes of Enlightenment\n\nEnlightenment means \"the acquisition of new wisdom or understanding\". \n\nThe lotus has its roots in the mud,\nGrows up through the deep water,\nAnd rises to the surface.\nIt blooms into perfect beauty and purity in the sunlight.\nIt is like the mind unfolding to perfect wisdom.\n\n\nClass: Monk\n\nBonuses\n--------------\n\n2 Pieces: +4 Wis\n4 Pieces: +10 Soak 5 Dmg\n\nSet Bonus (6 Pieces)\n---------------------------------\n1d4 Sonic Damage\n+4 Regeneration"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Trancendent Amulet"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 127
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_monk_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Trancendent Amulet"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Robes of Enlightenment"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_1.uti.json b/_module/uti/sd_paladin_s1_1.uti.json
new file mode 100644
index 00000000..7b09e513
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_1.uti.json
@@ -0,0 +1,320 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 71403
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Gloves",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Gloves"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_2.uti.json b/_module/uti/sd_paladin_s1_2.uti.json
new file mode 100644
index 00000000..4042f30c
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_2.uti.json
@@ -0,0 +1,328 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 114705
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Sabatons",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 23
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Sabatons"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_3.uti.json b/_module/uti/sd_paladin_s1_3.uti.json
new file mode 100644
index 00000000..7606c24b
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_3.uti.json
@@ -0,0 +1,319 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 57
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 72876
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Targe",
+ "id": 1551
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 41
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Targe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_4.uti.json b/_module/uti/sd_paladin_s1_4.uti.json
new file mode 100644
index 00000000..6496bf47
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_4.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 65208
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 88
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Vanguard",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 31
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 11
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 255
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 39
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Vanguard"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_5.uti.json b/_module/uti/sd_paladin_s1_5.uti.json
new file mode 100644
index 00000000..600c2b71
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_5.uti.json
@@ -0,0 +1,446 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 20
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 7
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 20
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 23
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 183345
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Plate",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 0
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Plate"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_paladin_s1_6.uti.json b/_module/uti/sd_paladin_s1_6.uti.json
new file mode 100644
index 00000000..a6e78a2f
--- /dev/null
+++ b/_module/uti/sd_paladin_s1_6.uti.json
@@ -0,0 +1,506 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 228011
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Armor of Divinity\n\nA paladins gain strength from faith in their deity. This uneavering faith empowers them to perform holy blessings on their friends and also to werak cruel vengeance on their enemies. The armor of divinity was a gift to the ancient paladin, Paledeus from his deity, Isis. It is roumoured that any who wear this armor and have true faith in their deity will unlock the formidible divine power sealed within.\n\nClass: Paladin\nClass: Champion of Torm\n\nBonuses\n--------------\n2 Pieces: +4 CHA\n4 Pieces: 1d4 Slashing Damage\n\nSet Bonus (6 Pieces)\n---------------------------------\n+1 Attacks/Round\n+2 Attack Bonus",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Zealot's Waistguard",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 6
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 4
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 3
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 3
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 32
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_paladin_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Zealot's Waistguard"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Armor of Divinity"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_rune.uti.json b/_module/uti/sd_rune.uti.json
new file mode 100644
index 00000000..fed47581
--- /dev/null
+++ b/_module/uti/sd_rune.uti.json
@@ -0,0 +1,81 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 24
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "When added to a socketed weapon, this gem imbues the weapon with runic power"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Socket Gem"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 49
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_rune"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_rune"
+ }
+}
diff --git a/_module/uti/sd_rune2.uti.json b/_module/uti/sd_rune2.uti.json
new file mode 100644
index 00000000..8be0f710
--- /dev/null
+++ b/_module/uti/sd_rune2.uti.json
@@ -0,0 +1,81 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 24
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "When added to a socketed weapon, this gem imbues the weapon with runic power"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Socket Gem"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 68
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_rune"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_rune2"
+ }
+}
diff --git a/_module/uti/sd_rune3.uti.json b/_module/uti/sd_rune3.uti.json
new file mode 100644
index 00000000..4841e13b
--- /dev/null
+++ b/_module/uti/sd_rune3.uti.json
@@ -0,0 +1,81 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 24
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "When added to a socketed weapon, this gem imbues the weapon with runic power"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Socket Gem"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 73
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_rune"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_rune3"
+ }
+}
diff --git a/_module/uti/sd_skin.uti.json b/_module/uti/sd_skin.uti.json
new file mode 100644
index 00000000..9f8036b6
--- /dev/null
+++ b/_module/uti/sd_skin.uti.json
@@ -0,0 +1,81 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 24
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 0
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "It seemed like more trouble than its worth, but you managed to tear the skin off this dead creature with your cumbersome weapon..."
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "It seemed like more trouble than its worth, but you managed to tear the skin off this dead creature with your cumbersome weapon..."
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Critter skin"
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 89
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_skin"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_skin"
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_1.uti.json b/_module/uti/sd_sorc_s1_1.uti.json
new file mode 100644
index 00000000..1e5d3bea
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_1.uti.json
@@ -0,0 +1,446 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 6
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 82
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 78
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 260016
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 82
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 82
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Robe",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 0
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 82
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 6
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 38
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Robe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_2.uti.json b/_module/uti/sd_sorc_s1_2.uti.json
new file mode 100644
index 00000000..5410dd0e
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_2.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 94967
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 83
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 82
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Cape",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 32
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 9
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 151
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 12
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Cape"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_3.uti.json b/_module/uti/sd_sorc_s1_3.uti.json
new file mode 100644
index 00000000..bffee1fc
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_3.uti.json
@@ -0,0 +1,413 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 237161
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Sash",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 6
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Sash"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_4.uti.json b/_module/uti/sd_sorc_s1_4.uti.json
new file mode 100644
index 00000000..f1c3741b
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_4.uti.json
@@ -0,0 +1,328 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 89966
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Slippers",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 42
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 32
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Slippers"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_5.uti.json b/_module/uti/sd_sorc_s1_5.uti.json
new file mode 100644
index 00000000..518382ec
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_5.uti.json
@@ -0,0 +1,375 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 58831
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "<Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 88
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Tiara",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 33
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 13
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Tiara"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_sorc_s1_6.uti.json b/_module/uti/sd_sorc_s1_6.uti.json
new file mode 100644
index 00000000..6e3420ec
--- /dev/null
+++ b/_module/uti/sd_sorc_s1_6.uti.json
@@ -0,0 +1,351 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 121772
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Vestments\n\nKnown as 'Thera Starseeker', Thera is famous for her cunning and power. She liked dominating dragons and setting them lose in town just for kicks.\n\nClass: Sorcerer\nClass: Bard\n\nBonuses\n--------------\n2 Pieces: +4 Cha\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Thera's Wraps",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 9
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 30
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 16
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_sorc_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Wraps"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Thera's Vestments"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_1.uti.json b/_module/uti/sd_wizard_s1_1.uti.json
new file mode 100644
index 00000000..ab457156
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_1.uti.json
@@ -0,0 +1,320 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 36
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 121772
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 48882
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Wraps",
+ "id": 48881
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 10
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 30
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 10
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 16
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_1"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Wraps"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_2.uti.json b/_module/uti/sd_wizard_s1_2.uti.json
new file mode 100644
index 00000000..735cc77c
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_2.uti.json
@@ -0,0 +1,415 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 6
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 68
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 49
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 260016
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste"
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 49
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 68
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Robe",
+ "id": 181
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 155
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 68
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 6
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 38
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_2"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Robe"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_3.uti.json b/_module/uti/sd_wizard_s1_3.uti.json
new file mode 100644
index 00000000..2282b691
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_3.uti.json
@@ -0,0 +1,344 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 58831
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 12861
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 88
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Tiara",
+ "id": 12860
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 13
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 7
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 23
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 41
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 25
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 52
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 1
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_3"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Tiara"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_4.uti.json b/_module/uti/sd_wizard_s1_4.uti.json
new file mode 100644
index 00000000..3f599aa2
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_4.uti.json
@@ -0,0 +1,382 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 237161
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Sash",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 8
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 13
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 13
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 51
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_4"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Sash"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_5.uti.json b/_module/uti/sd_wizard_s1_5.uti.json
new file mode 100644
index 00000000..e4ed3f5b
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_5.uti.json
@@ -0,0 +1,344 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 8
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 94967
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 66564
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 85
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 49
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Cape",
+ "id": 66563
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 41
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 41
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 9
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 9
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 151
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 37
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 5
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 12
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_5"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Cape"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sd_wizard_s1_6.uti.json b/_module/uti/sd_wizard_s1_6.uti.json
new file mode 100644
index 00000000..96ef17e4
--- /dev/null
+++ b/_module/uti/sd_wizard_s1_6.uti.json
@@ -0,0 +1,297 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 89966
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Rainment\n\nKnown as 'The Godess of Magic', Mystra is a common deity for those seeking arcane knowledge and power. She created this rainment for a devout follower who fell defending her name.\n\nClass: Wizard\n\nBonuses\n--------------\n2 Pieces: +4 Int\n4 Pieces: 30% Concealment\n\n\nSet Bonus (6 Pieces)\n---------------------------------\nImmune to Critical Hits\nHaste",
+ "id": 67778
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Mystra's Slippers",
+ "id": 67780
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 43
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 4
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 2
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 1
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 1
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 0
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 4
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 1
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 2
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 2
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 40
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sd_set_item"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sd_wizard_s1_6"
+ },
+ "VarTable": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "iSetNum"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 1
+ },
+ "Value": {
+ "type": "int",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sName"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Slippers"
+ }
+ },
+ {
+ "__struct_id": 0,
+ "Name": {
+ "type": "cexostring",
+ "value": "sSet"
+ },
+ "Type": {
+ "type": "dword",
+ "value": 3
+ },
+ "Value": {
+ "type": "cexostring",
+ "value": "Mystra's Rainment"
+ }
+ }
+ ]
+ }
+}
diff --git a/_module/uti/sdammy1.uti.json b/_module/uti/sdammy1.uti.json
new file mode 100644
index 00000000..d12be365
--- /dev/null
+++ b/_module/uti/sdammy1.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 19
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 67520
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Amulet 1",
+ "id": 67521
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdammy1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdammy1"
+ }
+}
diff --git a/_module/uti/sdammy2.uti.json b/_module/uti/sdammy2.uti.json
new file mode 100644
index 00000000..ed6d8ff4
--- /dev/null
+++ b/_module/uti/sdammy2.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 19
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 67520
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Amulet 2",
+ "id": 67521
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 3
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdammy2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdammy2"
+ }
+}
diff --git a/_module/uti/sdammy3.uti.json b/_module/uti/sdammy3.uti.json
new file mode 100644
index 00000000..3dae3a23
--- /dev/null
+++ b/_module/uti/sdammy3.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 19
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 67520
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Amulet 3",
+ "id": 67521
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 8
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdammy3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdammy3"
+ }
+}
diff --git a/_module/uti/sdarmor0.uti.json b/_module/uti/sdarmor0.uti.json
new file mode 100644
index 00000000..31335071
--- /dev/null
+++ b/_module/uti/sdarmor0.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 37
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 12
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 118
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Garb",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 103
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor0"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor0"
+ }
+}
diff --git a/_module/uti/sdarmor1.uti.json b/_module/uti/sdarmor1.uti.json
new file mode 100644
index 00000000..ac4a60bc
--- /dev/null
+++ b/_module/uti/sdarmor1.uti.json
@@ -0,0 +1,176 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 9
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 20
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 28
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 123
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 123
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 5
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13776
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 86
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Cover",
+ "id": 13824
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 11
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 93
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor1"
+ }
+}
diff --git a/_module/uti/sdarmor2.uti.json b/_module/uti/sdarmor2.uti.json
new file mode 100644
index 00000000..7cc880ec
--- /dev/null
+++ b/_module/uti/sdarmor2.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 37
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 27
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 57
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 57
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 10
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 171
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 171
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Toughened Leather",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 7
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 7
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor2"
+ }
+}
diff --git a/_module/uti/sdarmor3.uti.json b/_module/uti/sdarmor3.uti.json
new file mode 100644
index 00000000..0ece0304
--- /dev/null
+++ b/_module/uti/sdarmor3.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 18
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 23
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 18
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 29
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 173
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 172
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 15
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 11
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 11
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Studded Leather",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 172
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 172
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor3"
+ }
+}
diff --git a/_module/uti/sdarmor4.uti.json b/_module/uti/sdarmor4.uti.json
new file mode 100644
index 00000000..002f94ed
--- /dev/null
+++ b/_module/uti/sdarmor4.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 37
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 38
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 167
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 100
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Banded",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 5
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor4"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor4"
+ }
+}
diff --git a/_module/uti/sdarmor5.uti.json b/_module/uti/sdarmor5.uti.json
new file mode 100644
index 00000000..c51d6c20
--- /dev/null
+++ b/_module/uti/sdarmor5.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 37
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 15
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 8
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 11
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 19
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 26
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 83
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 115
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 150
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 83
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 83
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Breastplate",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 1
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 3
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor5"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor5"
+ }
+}
diff --git a/_module/uti/sdarmor6.uti.json b/_module/uti/sdarmor6.uti.json
new file mode 100644
index 00000000..1097006a
--- /dev/null
+++ b/_module/uti/sdarmor6.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 35
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 16
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 15
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 139
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 100
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 135
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Chain",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 57
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor6"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor6"
+ }
+}
diff --git a/_module/uti/sdarmor7.uti.json b/_module/uti/sdarmor7.uti.json
new file mode 100644
index 00000000..fc0858d4
--- /dev/null
+++ b/_module/uti/sdarmor7.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 3
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 35
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 14
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 6
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 47
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 21
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 600
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 21
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Half-plate",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 83
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor7"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor7"
+ }
+}
diff --git a/_module/uti/sdarmor8.uti.json b/_module/uti/sdarmor8.uti.json
new file mode 100644
index 00000000..0d616440
--- /dev/null
+++ b/_module/uti/sdarmor8.uti.json
@@ -0,0 +1,174 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "ArmorPart_Belt": {
+ "type": "byte",
+ "value": 10
+ },
+ "ArmorPart_LBicep": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_LFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_LFoot": {
+ "type": "byte",
+ "value": 186
+ },
+ "ArmorPart_LHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_LShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_LShoul": {
+ "type": "byte",
+ "value": 20
+ },
+ "ArmorPart_LThigh": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_Neck": {
+ "type": "byte",
+ "value": 1
+ },
+ "ArmorPart_Pelvis": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RBicep": {
+ "type": "byte",
+ "value": 5
+ },
+ "ArmorPart_RFArm": {
+ "type": "byte",
+ "value": 13
+ },
+ "ArmorPart_RFoot": {
+ "type": "byte",
+ "value": 186
+ },
+ "ArmorPart_RHand": {
+ "type": "byte",
+ "value": 4
+ },
+ "ArmorPart_Robe": {
+ "type": "byte",
+ "value": 0
+ },
+ "ArmorPart_RShin": {
+ "type": "byte",
+ "value": 17
+ },
+ "ArmorPart_RShoul": {
+ "type": "byte",
+ "value": 20
+ },
+ "ArmorPart_RThigh": {
+ "type": "byte",
+ "value": 12
+ },
+ "ArmorPart_Torso": {
+ "type": "byte",
+ "value": 23
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 16
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 45
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1500
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 119
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Plate",
+ "id": 12928
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 54
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 0
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdArmor8"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarmor8"
+ }
+}
diff --git a/_module/uti/sdarrow.uti.json b/_module/uti/sdarrow.uti.json
new file mode 100644
index 00000000..d05e34e1
--- /dev/null
+++ b/_module/uti/sdarrow.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 20
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 0
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1517
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 99
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdarrow"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdarrow"
+ }
+}
diff --git a/_module/uti/sdbaxe.uti.json b/_module/uti/sdbaxe.uti.json
new file mode 100644
index 00000000..966ae56c
--- /dev/null
+++ b/_module/uti/sdbaxe.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 2
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 169
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 52
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 44
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbaxe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbaxe"
+ }
+}
diff --git a/_module/uti/sdbelt1.uti.json b/_module/uti/sdbelt1.uti.json
new file mode 100644
index 00000000..dbae06d2
--- /dev/null
+++ b/_module/uti/sdbelt1.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Belt 1",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbelt1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbelt1"
+ }
+}
diff --git a/_module/uti/sdbelt2.uti.json b/_module/uti/sdbelt2.uti.json
new file mode 100644
index 00000000..65a8468b
--- /dev/null
+++ b/_module/uti/sdbelt2.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 21
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 67773
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Belt 2",
+ "id": 67772
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbelt2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbelt2"
+ }
+}
diff --git a/_module/uti/sdbolt.uti.json b/_module/uti/sdbolt.uti.json
new file mode 100644
index 00000000..52b3d58b
--- /dev/null
+++ b/_module/uti/sdbolt.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 25
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 0
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1519
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 99
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbolt"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbolt"
+ }
+}
diff --git a/_module/uti/sdboots1.uti.json b/_module/uti/sdboots1.uti.json
new file mode 100644
index 00000000..f92f7d56
--- /dev/null
+++ b/_module/uti/sdboots1.uti.json
@@ -0,0 +1,88 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 7749
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 7750
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13342
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Boots 1",
+ "id": 13343
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 13
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 33
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 32
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdboots1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdboots1"
+ }
+}
diff --git a/_module/uti/sdboots2.uti.json b/_module/uti/sdboots2.uti.json
new file mode 100644
index 00000000..1e738ee7
--- /dev/null
+++ b/_module/uti/sdboots2.uti.json
@@ -0,0 +1,88 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 7749
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 7750
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13342
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Boots 2",
+ "id": 13343
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 43
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 32
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdboots2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdboots2"
+ }
+}
diff --git a/_module/uti/sdboots3.uti.json b/_module/uti/sdboots3.uti.json
new file mode 100644
index 00000000..43d6ab1c
--- /dev/null
+++ b/_module/uti/sdboots3.uti.json
@@ -0,0 +1,88 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 7749
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 26
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 7750
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13342
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Boots 3",
+ "id": 13343
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 23
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 43
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdboots3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdboots3"
+ }
+}
diff --git a/_module/uti/sdbracers1.uti.json b/_module/uti/sdbracers1.uti.json
new file mode 100644
index 00000000..78916c5d
--- /dev/null
+++ b/_module/uti/sdbracers1.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 78
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13351
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Bracers 1",
+ "id": 13350
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbracers1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbracers1"
+ }
+}
diff --git a/_module/uti/sdbracers2.uti.json b/_module/uti/sdbracers2.uti.json
new file mode 100644
index 00000000..1b2cf0c6
--- /dev/null
+++ b/_module/uti/sdbracers2.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 78
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13351
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Bracers 2",
+ "id": 13350
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbracers2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbracers2"
+ }
+}
diff --git a/_module/uti/sdbracers3.uti.json b/_module/uti/sdbracers3.uti.json
new file mode 100644
index 00000000..737bad20
--- /dev/null
+++ b/_module/uti/sdbracers3.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 78
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 13351
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Bracers 3",
+ "id": 13350
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 9
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdbracers3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdbracers3"
+ }
+}
diff --git a/_module/uti/sdcloak1.uti.json b/_module/uti/sdcloak1.uti.json
new file mode 100644
index 00000000..3fe915e8
--- /dev/null
+++ b/_module/uti/sdcloak1.uti.json
@@ -0,0 +1,104 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 66562
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 92
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 22
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Cloak 1",
+ "id": 66561
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 57
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdcloak1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdcloak1"
+ }
+}
diff --git a/_module/uti/sdcloak2.uti.json b/_module/uti/sdcloak2.uti.json
new file mode 100644
index 00000000..7f86b21b
--- /dev/null
+++ b/_module/uti/sdcloak2.uti.json
@@ -0,0 +1,104 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 46
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 21
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 66562
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 46
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 89
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Cloak 2",
+ "id": 66561
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 56
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 2
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdcloak2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdcloak2"
+ }
+}
diff --git a/_module/uti/sdcloak3.uti.json b/_module/uti/sdcloak3.uti.json
new file mode 100644
index 00000000..6a4d130c
--- /dev/null
+++ b/_module/uti/sdcloak3.uti.json
@@ -0,0 +1,104 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 80
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 134
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 134
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 1
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 66562
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 44
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 52
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Cloak 3",
+ "id": 66561
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 8
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 8
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 3
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdcloak3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdcloak3"
+ }
+}
diff --git a/_module/uti/sdclub.uti.json b/_module/uti/sdclub.uti.json
new file mode 100644
index 00000000..7cc73809
--- /dev/null
+++ b/_module/uti/sdclub.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 28
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 2
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1522
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 21
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 24
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdclub"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdclub"
+ }
+}
diff --git a/_module/uti/sddagger.uti.json b/_module/uti/sddagger.uti.json
new file mode 100644
index 00000000..9bb1fc56
--- /dev/null
+++ b/_module/uti/sddagger.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 22
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 4
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 191
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 42
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sddagger"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sddagger"
+ }
+}
diff --git a/_module/uti/sddbsword.uti.json b/_module/uti/sddbsword.uti.json
new file mode 100644
index 00000000..796b8854
--- /dev/null
+++ b/_module/uti/sddbsword.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 12
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 200
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 172
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 24
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sddbsword"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sddbsword"
+ }
+}
diff --git a/_module/uti/sddsaxe.uti.json b/_module/uti/sddsaxe.uti.json
new file mode 100644
index 00000000..ea31f81a
--- /dev/null
+++ b/_module/uti/sddsaxe.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 33
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 60
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1527
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sddsaxe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sddsaxe"
+ }
+}
diff --git a/_module/uti/sddsmace.uti.json b/_module/uti/sddsmace.uti.json
new file mode 100644
index 00000000..c7e8f288
--- /dev/null
+++ b/_module/uti/sddsmace.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 32
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 80
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1526
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sddsmace"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sddsmace"
+ }
+}
diff --git a/_module/uti/sdgaxe.uti.json b/_module/uti/sdgaxe.uti.json
new file mode 100644
index 00000000..bce20017
--- /dev/null
+++ b/_module/uti/sdgaxe.uti.json
@@ -0,0 +1,88 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 18
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 40
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Greataxe",
+ "id": 515
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdgaxe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdgaxe"
+ }
+}
diff --git a/_module/uti/sdgsword.uti.json b/_module/uti/sdgsword.uti.json
new file mode 100644
index 00000000..e0f90c90
--- /dev/null
+++ b/_module/uti/sdgsword.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 13
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 100
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 167
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdgsword"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdgsword"
+ }
+}
diff --git a/_module/uti/sdhalberd.uti.json b/_module/uti/sdhalberd.uti.json
new file mode 100644
index 00000000..fee09554
--- /dev/null
+++ b/_module/uti/sdhalberd.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 10
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 175
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhalberd"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhalberd"
+ }
+}
diff --git a/_module/uti/sdhaxe.uti.json b/_module/uti/sdhaxe.uti.json
new file mode 100644
index 00000000..8fcf2a3d
--- /dev/null
+++ b/_module/uti/sdhaxe.uti.json
@@ -0,0 +1,86 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 38
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 12
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Handaxe",
+ "id": 1532
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 24
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhaxe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhaxe"
+ }
+}
diff --git a/_module/uti/sdhcbow.uti.json b/_module/uti/sdhcbow.uti.json
new file mode 100644
index 00000000..016e15e6
--- /dev/null
+++ b/_module/uti/sdhcbow.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 6
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 100
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 173
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhcbow"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhcbow"
+ }
+}
diff --git a/_module/uti/sdhelm1.uti.json b/_module/uti/sdhelm1.uti.json
new file mode 100644
index 00000000..b8f6bbcc
--- /dev/null
+++ b/_module/uti/sdhelm1.uti.json
@@ -0,0 +1,102 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 3
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Helm 1",
+ "id": 90531
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 1
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 0
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 35
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhelm1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhelm1"
+ }
+}
diff --git a/_module/uti/sdhelm2.uti.json b/_module/uti/sdhelm2.uti.json
new file mode 100644
index 00000000..3c8aecd1
--- /dev/null
+++ b/_module/uti/sdhelm2.uti.json
@@ -0,0 +1,102 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 167
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 23
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 3
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 20
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Helm 2",
+ "id": 90531
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 7
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 92
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 19
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhelm2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhelm2"
+ }
+}
diff --git a/_module/uti/sdhelm3.uti.json b/_module/uti/sdhelm3.uti.json
new file mode 100644
index 00000000..2566145f
--- /dev/null
+++ b/_module/uti/sdhelm3.uti.json
@@ -0,0 +1,102 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 17
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Cloth1Color": {
+ "type": "byte",
+ "value": 58
+ },
+ "Cloth2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 3
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "Leather1Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "Leather2Color": {
+ "type": "byte",
+ "value": 63
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Helm 3",
+ "id": 90531
+ }
+ },
+ "Metal1Color": {
+ "type": "byte",
+ "value": 71
+ },
+ "Metal2Color": {
+ "type": "byte",
+ "value": 61
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhelm3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhelm3"
+ }
+}
diff --git a/_module/uti/sdhflail.uti.json b/_module/uti/sdhflail.uti.json
new file mode 100644
index 00000000..9b8a8649
--- /dev/null
+++ b/_module/uti/sdhflail.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 35
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1529
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdhflail"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdhflail"
+ }
+}
diff --git a/_module/uti/sdkama.uti.json b/_module/uti/sdkama.uti.json
new file mode 100644
index 00000000..8100a008
--- /dev/null
+++ b/_module/uti/sdkama.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 40
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 4
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1534
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdkama"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdkama"
+ }
+}
diff --git a/_module/uti/sdkatana.uti.json b/_module/uti/sdkatana.uti.json
new file mode 100644
index 00000000..b19915a0
--- /dev/null
+++ b/_module/uti/sdkatana.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 41
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 80
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1535
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdkatana"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdkatana"
+ }
+}
diff --git a/_module/uti/sdkukri.uti.json b/_module/uti/sdkukri.uti.json
new file mode 100644
index 00000000..a908b5f5
--- /dev/null
+++ b/_module/uti/sdkukri.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 42
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 16
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1536
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdkukri"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdkukri"
+ }
+}
diff --git a/_module/uti/sdlarge1.uti.json b/_module/uti/sdlarge1.uti.json
new file mode 100644
index 00000000..7899c0b6
--- /dev/null
+++ b/_module/uti/sdlarge1.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 1",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 51
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge1"
+ }
+}
diff --git a/_module/uti/sdlarge10.uti.json b/_module/uti/sdlarge10.uti.json
new file mode 100644
index 00000000..bdbfdc1c
--- /dev/null
+++ b/_module/uti/sdlarge10.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 10",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 64
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge10"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge10"
+ }
+}
diff --git a/_module/uti/sdlarge2.uti.json b/_module/uti/sdlarge2.uti.json
new file mode 100644
index 00000000..3824d702
--- /dev/null
+++ b/_module/uti/sdlarge2.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 2",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 52
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge2"
+ }
+}
diff --git a/_module/uti/sdlarge3.uti.json b/_module/uti/sdlarge3.uti.json
new file mode 100644
index 00000000..a050075b
--- /dev/null
+++ b/_module/uti/sdlarge3.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 3",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 53
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge3"
+ }
+}
diff --git a/_module/uti/sdlarge4.uti.json b/_module/uti/sdlarge4.uti.json
new file mode 100644
index 00000000..13536e9c
--- /dev/null
+++ b/_module/uti/sdlarge4.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 4",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 53
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge4"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge4"
+ }
+}
diff --git a/_module/uti/sdlarge5.uti.json b/_module/uti/sdlarge5.uti.json
new file mode 100644
index 00000000..a14022a8
--- /dev/null
+++ b/_module/uti/sdlarge5.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 5",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 54
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge5"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge5"
+ }
+}
diff --git a/_module/uti/sdlarge6.uti.json b/_module/uti/sdlarge6.uti.json
new file mode 100644
index 00000000..16f7b6e3
--- /dev/null
+++ b/_module/uti/sdlarge6.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 6",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 55
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge6"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge6"
+ }
+}
diff --git a/_module/uti/sdlarge7.uti.json b/_module/uti/sdlarge7.uti.json
new file mode 100644
index 00000000..f3533663
--- /dev/null
+++ b/_module/uti/sdlarge7.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 7",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 56
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge7"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge7"
+ }
+}
diff --git a/_module/uti/sdlarge8.uti.json b/_module/uti/sdlarge8.uti.json
new file mode 100644
index 00000000..dcdf8193
--- /dev/null
+++ b/_module/uti/sdlarge8.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 8",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 65
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge8"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge8"
+ }
+}
diff --git a/_module/uti/sdlarge9.uti.json b/_module/uti/sdlarge9.uti.json
new file mode 100644
index 00000000..382e55ea
--- /dev/null
+++ b/_module/uti/sdlarge9.uti.json
@@ -0,0 +1,80 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 56
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 100926
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Large 9",
+ "id": 90461
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 75
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlarge9"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlarge9"
+ }
+}
diff --git a/_module/uti/sdlbow.uti.json b/_module/uti/sdlbow.uti.json
new file mode 100644
index 00000000..359812e7
--- /dev/null
+++ b/_module/uti/sdlbow.uti.json
@@ -0,0 +1,88 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 8
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 150
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 14049
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Longbow",
+ "id": 14050
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 52
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 74
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 44
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlbow"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlbow"
+ }
+}
diff --git a/_module/uti/sdlcbow.uti.json b/_module/uti/sdlcbow.uti.json
new file mode 100644
index 00000000..ecf94d26
--- /dev/null
+++ b/_module/uti/sdlcbow.uti.json
@@ -0,0 +1,86 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 7
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 70
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Light Crossbow",
+ "id": 174
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlcbow"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlcbow"
+ }
+}
diff --git a/_module/uti/sdlflail.uti.json b/_module/uti/sdlflail.uti.json
new file mode 100644
index 00000000..f61411c9
--- /dev/null
+++ b/_module/uti/sdlflail.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 4
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 16
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 176
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 44
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlflail"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlflail"
+ }
+}
diff --git a/_module/uti/sdlhamm.uti.json b/_module/uti/sdlhamm.uti.json
new file mode 100644
index 00000000..05669a2b
--- /dev/null
+++ b/_module/uti/sdlhamm.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 37
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 2
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1531
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlhamm"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlhamm"
+ }
+}
diff --git a/_module/uti/sdlsword.uti.json b/_module/uti/sdlsword.uti.json
new file mode 100644
index 00000000..d6878fff
--- /dev/null
+++ b/_module/uti/sdlsword.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 1
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 166
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdlsword"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdlsword"
+ }
+}
diff --git a/_module/uti/sdmace.uti.json b/_module/uti/sdmace.uti.json
new file mode 100644
index 00000000..f1bb056e
--- /dev/null
+++ b/_module/uti/sdmace.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 9
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 10
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 177
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdmace"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdmace"
+ }
+}
diff --git a/_module/uti/sdmstar.uti.json b/_module/uti/sdmstar.uti.json
new file mode 100644
index 00000000..37ebd4de
--- /dev/null
+++ b/_module/uti/sdmstar.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 47
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 16
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1541
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdmstar"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdmstar"
+ }
+}
diff --git a/_module/uti/sdqstaff.uti.json b/_module/uti/sdqstaff.uti.json
new file mode 100644
index 00000000..85ab3d96
--- /dev/null
+++ b/_module/uti/sdqstaff.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 50
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 2
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1544
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 32
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdqstaff"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdqstaff"
+ }
+}
diff --git a/_module/uti/sdrapier.uti.json b/_module/uti/sdrapier.uti.json
new file mode 100644
index 00000000..350050ec
--- /dev/null
+++ b/_module/uti/sdrapier.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 51
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 40
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1545
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdrapier"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdrapier"
+ }
+}
diff --git a/_module/uti/sdring1.uti.json b/_module/uti/sdring1.uti.json
new file mode 100644
index 00000000..01d919de
--- /dev/null
+++ b/_module/uti/sdring1.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 498
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 52
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 499
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Ring 1",
+ "id": 13485
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 1
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdring1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdring1"
+ }
+}
diff --git a/_module/uti/sdring2.uti.json b/_module/uti/sdring2.uti.json
new file mode 100644
index 00000000..6241bd14
--- /dev/null
+++ b/_module/uti/sdring2.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 498
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 52
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 499
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Ring 2",
+ "id": 13485
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 7
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdring2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdring2"
+ }
+}
diff --git a/_module/uti/sdring3.uti.json b/_module/uti/sdring3.uti.json
new file mode 100644
index 00000000..289f4ded
--- /dev/null
+++ b/_module/uti/sdring3.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 498
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 52
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 499
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Ring 3",
+ "id": 13485
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 20
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdring3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdring3"
+ }
+}
diff --git a/_module/uti/sdring4.uti.json b/_module/uti/sdring4.uti.json
new file mode 100644
index 00000000..ce2fe2f6
--- /dev/null
+++ b/_module/uti/sdring4.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 498
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 52
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 499
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Ring 4",
+ "id": 13485
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 27
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 2
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdring4"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdring4"
+ }
+}
diff --git a/_module/uti/sdsbow.uti.json b/_module/uti/sdsbow.uti.json
new file mode 100644
index 00000000..004498d8
--- /dev/null
+++ b/_module/uti/sdsbow.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 11
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 60
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 171
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 52
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 64
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 24
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdsbow"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdsbow"
+ }
+}
diff --git a/_module/uti/sdscim.uti.json b/_module/uti/sdscim.uti.json
new file mode 100644
index 00000000..31a46381
--- /dev/null
+++ b/_module/uti/sdscim.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 53
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1547
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdscim"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdscim"
+ }
+}
diff --git a/_module/uti/sdscythe.uti.json b/_module/uti/sdscythe.uti.json
new file mode 100644
index 00000000..8d811881
--- /dev/null
+++ b/_module/uti/sdscythe.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 55
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 36
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1549
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdscythe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdscythe"
+ }
+}
diff --git a/_module/uti/sdsickle.uti.json b/_module/uti/sdsickle.uti.json
new file mode 100644
index 00000000..65d1d9aa
--- /dev/null
+++ b/_module/uti/sdsickle.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 60
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 12
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1554
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdsickle"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdsickle"
+ }
+}
diff --git a/_module/uti/sdsmall1.uti.json b/_module/uti/sdsmall1.uti.json
new file mode 100644
index 00000000..7752b263
--- /dev/null
+++ b/_module/uti/sdsmall1.uti.json
@@ -0,0 +1,82 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 14
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 9
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 12878
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Small 1",
+ "id": 12877
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 12
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdsmall1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdsmall1"
+ }
+}
diff --git a/_module/uti/sdsmall2.uti.json b/_module/uti/sdsmall2.uti.json
new file mode 100644
index 00000000..92216ca9
--- /dev/null
+++ b/_module/uti/sdsmall2.uti.json
@@ -0,0 +1,82 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 14
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 9
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 12878
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Small 2",
+ "id": 12877
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 22
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdsmall2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdsmall2"
+ }
+}
diff --git a/_module/uti/sdsmall3.uti.json b/_module/uti/sdsmall3.uti.json
new file mode 100644
index 00000000..ce753cac
--- /dev/null
+++ b/_module/uti/sdsmall3.uti.json
@@ -0,0 +1,82 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 14
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 9
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 12878
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {
+ "0": ""
+ }
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Small 3",
+ "id": 12877
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 42
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdsmall3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdsmall3"
+ }
+}
diff --git a/_module/uti/sdspear.uti.json b/_module/uti/sdspear.uti.json
new file mode 100644
index 00000000..3434c8b5
--- /dev/null
+++ b/_module/uti/sdspear.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 58
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 2
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 1552
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 32
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 14
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdspear"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdspear"
+ }
+}
diff --git a/_module/uti/sdssword.uti.json b/_module/uti/sdssword.uti.json
new file mode 100644
index 00000000..1601440e
--- /dev/null
+++ b/_module/uti/sdssword.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 0
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 20
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 106
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 42
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 44
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdssword"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdssword"
+ }
+}
diff --git a/_module/uti/sdstaff1.uti.json b/_module/uti/sdstaff1.uti.json
new file mode 100644
index 00000000..ca7b70d8
--- /dev/null
+++ b/_module/uti/sdstaff1.uti.json
@@ -0,0 +1,244 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 45
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 20
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 7000
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 14175
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Staff 1",
+ "id": 40592
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 24
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 23
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 63
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 172
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 26
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdstaff1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdstaff1"
+ }
+}
diff --git a/_module/uti/sdstaff2.uti.json b/_module/uti/sdstaff2.uti.json
new file mode 100644
index 00000000..6995b251
--- /dev/null
+++ b/_module/uti/sdstaff2.uti.json
@@ -0,0 +1,244 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 45
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 20
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 7376
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 14175
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Staff 2",
+ "id": 40592
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 64
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 21
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 53
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 262
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 26
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdstaff2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdstaff2"
+ }
+}
diff --git a/_module/uti/sdstaff3.uti.json b/_module/uti/sdstaff3.uti.json
new file mode 100644
index 00000000..be9ce919
--- /dev/null
+++ b/_module/uti/sdstaff3.uti.json
@@ -0,0 +1,244 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 45
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 20
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 9626
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 14175
+ }
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 0
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Staff 3",
+ "id": 40592
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 34
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 31
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 3
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 3
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 5
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 15
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 6
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 26
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 0
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 9
+ }
+ },
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 63
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 10
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdstaff3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdstaff3"
+ }
+}
diff --git a/_module/uti/sdtower1.uti.json b/_module/uti/sdtower1.uti.json
new file mode 100644
index 00000000..1c9663af
--- /dev/null
+++ b/_module/uti/sdtower1.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 57
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Tower 1",
+ "id": 1551
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 21
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdtower1"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdtower1"
+ }
+}
diff --git a/_module/uti/sdtower2.uti.json b/_module/uti/sdtower2.uti.json
new file mode 100644
index 00000000..1d9c25a3
--- /dev/null
+++ b/_module/uti/sdtower2.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 57
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Tower 2",
+ "id": 1551
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 51
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdtower2"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdtower2"
+ }
+}
diff --git a/_module/uti/sdtower3.uti.json b/_module/uti/sdtower3.uti.json
new file mode 100644
index 00000000..c0bd40eb
--- /dev/null
+++ b/_module/uti/sdtower3.uti.json
@@ -0,0 +1,78 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 57
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 30
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Tower 3",
+ "id": 1551
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 63
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 1
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdtower3"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdtower3"
+ }
+}
diff --git a/_module/uti/sdwaxe.uti.json b/_module/uti/sdwaxe.uti.json
new file mode 100644
index 00000000..18f174a6
--- /dev/null
+++ b/_module/uti/sdwaxe.uti.json
@@ -0,0 +1,86 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 108
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 60
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "0": "Waraxe",
+ "id": 83310
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 52
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 34
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdwaxe"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdwaxe"
+ }
+}
diff --git a/_module/uti/sdwhamm.uti.json b/_module/uti/sdwhamm.uti.json
new file mode 100644
index 00000000..8f337bbc
--- /dev/null
+++ b/_module/uti/sdwhamm.uti.json
@@ -0,0 +1,85 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 5
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": "1"
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 24
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 178
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 14
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 44
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": []
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdwhamm"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdwhamm"
+ }
+}
diff --git a/_module/uti/sdwhip.uti.json b/_module/uti/sdwhip.uti.json
new file mode 100644
index 00000000..d7e28efe
--- /dev/null
+++ b/_module/uti/sdwhip.uti.json
@@ -0,0 +1,117 @@
+{
+ "__data_type": "UTI ",
+ "AddCost": {
+ "type": "dword",
+ "value": 0
+ },
+ "BaseItem": {
+ "type": "int",
+ "value": 111
+ },
+ "Charges": {
+ "type": "byte",
+ "value": 0
+ },
+ "Comment": {
+ "type": "cexostring",
+ "value": ""
+ },
+ "Cost": {
+ "type": "dword",
+ "value": 2
+ },
+ "Cursed": {
+ "type": "byte",
+ "value": 0
+ },
+ "DescIdentified": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Description": {
+ "type": "cexolocstring",
+ "value": {}
+ },
+ "Identified": {
+ "type": "byte",
+ "value": 1
+ },
+ "LocalizedName": {
+ "type": "cexolocstring",
+ "value": {
+ "id": 83617
+ }
+ },
+ "ModelPart1": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart2": {
+ "type": "byte",
+ "value": 11
+ },
+ "ModelPart3": {
+ "type": "byte",
+ "value": 11
+ },
+ "PaletteID": {
+ "type": "byte",
+ "value": 3
+ },
+ "Plot": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertiesList": {
+ "type": "list",
+ "value": [
+ {
+ "__struct_id": 0,
+ "ChanceAppear": {
+ "type": "byte",
+ "value": 100
+ },
+ "CostTable": {
+ "type": "byte",
+ "value": 0
+ },
+ "CostValue": {
+ "type": "word",
+ "value": 0
+ },
+ "Param1": {
+ "type": "byte",
+ "value": 255
+ },
+ "Param1Value": {
+ "type": "byte",
+ "value": 0
+ },
+ "PropertyName": {
+ "type": "word",
+ "value": 12
+ },
+ "Subtype": {
+ "type": "word",
+ "value": 37
+ }
+ }
+ ]
+ },
+ "StackSize": {
+ "type": "word",
+ "value": 1
+ },
+ "Stolen": {
+ "type": "byte",
+ "value": 0
+ },
+ "Tag": {
+ "type": "cexostring",
+ "value": "sdwhip"
+ },
+ "TemplateResRef": {
+ "type": "resref",
+ "value": "sdwhip"
+ }
+}
diff --git a/_release/Path of Ascension [PRC8-CEP3].7z b/_release/Path of Ascension [PRC8-CEP3].7z
index 871674d6..80c809de 100644
Binary files a/_release/Path of Ascension [PRC8-CEP3].7z and b/_release/Path of Ascension [PRC8-CEP3].7z differ