diff --git a/_content/ratdog_top/itemprops.2da b/_content/ratdog_top/itemprops.2da index 5ebd5d19..ac6d9c0f 100644 --- a/_content/ratdog_top/itemprops.2da +++ b/_content/ratdog_top/itemprops.2da @@ -77,7 +77,7 @@ 73 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** 1 1 1777 Turn_Resistance 74 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1778 Massive_Criticals 75 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** 1 1 1779 Freedom_of_Movement -76 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 879 Poison +76 1 **** 1 **** **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 879 Poison 77 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 5060 Monster_Damage 78 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** 1 1 5604 Immunity_to_Spells_by_Level 79 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 6637 Special_Walk diff --git a/_module/are/adventurers_inn.are.json b/_module/are/adventurers_inn.are.json index 908cf52a..9296ea34 100644 --- a/_module/are/adventurers_inn.are.json +++ b/_module/are/adventurers_inn.are.json @@ -677,7 +677,7 @@ }, "Version": { "type": "dword", - "value": 59 + "value": 63 }, "Width": { "type": "int", diff --git a/_module/are/area500sparky.are.json b/_module/are/area500sparky.are.json index 01dc521f..83b25102 100644 --- a/_module/are/area500sparky.are.json +++ b/_module/are/area500sparky.are.json @@ -11169,7 +11169,7 @@ }, "Version": { "type": "dword", - "value": 14 + "value": 15 }, "Width": { "type": "int", diff --git a/_module/are/foh_druids_grove.are.json b/_module/are/foh_druids_grove.are.json new file mode 100644 index 00000000..dd8c8e02 --- /dev/null +++ b/_module/are/foh_druids_grove.are.json @@ -0,0 +1,9806 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "Forest of Hope: Druid's Grove" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 16 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 61 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 2570047 + }, + "MoonFogAmount": { + "type": "byte", + "value": 15 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Forest of Hope: Druid's Grove" + } + }, + "NoRest": { + "type": "byte", + "value": 1 + }, + "OnEnter": { + "type": "resref", + "value": "sparky_enter" + }, + "OnExit": { + "type": "resref", + "value": "sparky_exit" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "foh_druids_grove" + }, + "ShadowOpacity": { + "type": "byte", + "value": 30 + }, + "SkyBox": { + "type": "byte", + "value": 50 + }, + "SunAmbientColor": { + "type": "dword", + "value": 3291708 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 9144700 + }, + "SunFogAmount": { + "type": "byte", + "value": 7 + }, + "SunFogColor": { + "type": "dword", + "value": 2110773 + }, + "SunShadows": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "FOH_DRUIDS_GROVE" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 17 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 14 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 59 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 143 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttf02" + }, + "Version": { + "type": "dword", + "value": 15 + }, + "Width": { + "type": "int", + "value": 14 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/_module/are/forestofhopecent.are.json b/_module/are/forestofhopecent.are.json index 655413f7..4f1d4f2e 100644 --- a/_module/are/forestofhopecent.are.json +++ b/_module/are/forestofhopecent.are.json @@ -124,7 +124,7 @@ }, "SkyBox": { "type": "byte", - "value": 0 + "value": 48 }, "SunAmbientColor": { "type": "dword", @@ -4989,7 +4989,7 @@ }, "Tile_ID": { "type": "int", - "value": 12 + "value": 11 }, "Tile_MainLight1": { "type": "byte", @@ -5677,7 +5677,7 @@ }, "Tile_ID": { "type": "int", - "value": 125 + "value": 69 }, "Tile_MainLight1": { "type": "byte", @@ -5689,7 +5689,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 2 }, "Tile_SrcLight1": { "type": "byte", @@ -6365,7 +6365,7 @@ }, "Tile_ID": { "type": "int", - "value": 124 + "value": 64 }, "Tile_MainLight1": { "type": "byte", @@ -6377,7 +6377,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 3 }, "Tile_SrcLight1": { "type": "byte", @@ -7053,7 +7053,7 @@ }, "Tile_ID": { "type": "int", - "value": 12 + "value": 11 }, "Tile_MainLight1": { "type": "byte", @@ -7065,7 +7065,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 3 }, "Tile_SrcLight1": { "type": "byte", @@ -7999,7 +7999,7 @@ }, "Tile_ID": { "type": "int", - "value": 157 + "value": 63 }, "Tile_MainLight1": { "type": "byte", @@ -8042,7 +8042,7 @@ }, "Tile_ID": { "type": "int", - "value": 160 + "value": 65 }, "Tile_MainLight1": { "type": "byte", @@ -8054,7 +8054,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 2 }, "Tile_SrcLight1": { "type": "byte", @@ -8085,7 +8085,7 @@ }, "Tile_ID": { "type": "int", - "value": 163 + "value": 70 }, "Tile_MainLight1": { "type": "byte", @@ -8097,7 +8097,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 1 }, "Tile_SrcLight1": { "type": "byte", @@ -8687,7 +8687,7 @@ }, "Tile_ID": { "type": "int", - "value": 156 + "value": 67 }, "Tile_MainLight1": { "type": "byte", @@ -8730,7 +8730,7 @@ }, "Tile_ID": { "type": "int", - "value": 159 + "value": 66 }, "Tile_MainLight1": { "type": "byte", @@ -8742,7 +8742,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 3 }, "Tile_SrcLight1": { "type": "byte", @@ -8773,7 +8773,7 @@ }, "Tile_ID": { "type": "int", - "value": 162 + "value": 5 }, "Tile_MainLight1": { "type": "byte", @@ -9375,7 +9375,7 @@ }, "Tile_ID": { "type": "int", - "value": 155 + "value": 67 }, "Tile_MainLight1": { "type": "byte", @@ -9387,7 +9387,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 3 }, "Tile_SrcLight1": { "type": "byte", @@ -9418,7 +9418,7 @@ }, "Tile_ID": { "type": "int", - "value": 158 + "value": 63 }, "Tile_MainLight1": { "type": "byte", @@ -9430,7 +9430,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 1 }, "Tile_SrcLight1": { "type": "byte", @@ -9461,7 +9461,7 @@ }, "Tile_ID": { "type": "int", - "value": 161 + "value": 70 }, "Tile_MainLight1": { "type": "byte", @@ -9473,7 +9473,7 @@ }, "Tile_Orientation": { "type": "int", - "value": 0 + "value": 1 }, "Tile_SrcLight1": { "type": "byte", @@ -11169,7 +11169,7 @@ }, "Version": { "type": "dword", - "value": 20 + "value": 28 }, "Width": { "type": "int", diff --git a/_module/are/forestofhopenort.are.json b/_module/are/forestofhopenort.are.json index d036c82c..1929bea3 100644 --- a/_module/are/forestofhopenort.are.json +++ b/_module/are/forestofhopenort.are.json @@ -124,7 +124,7 @@ }, "SkyBox": { "type": "byte", - "value": 0 + "value": 48 }, "SunAmbientColor": { "type": "dword", @@ -11169,7 +11169,7 @@ }, "Version": { "type": "dword", - "value": 10 + "value": 12 }, "Width": { "type": "int", diff --git a/_module/are/forestofhopesout.are.json b/_module/are/forestofhopesout.are.json index a515f435..d9fb0b19 100644 --- a/_module/are/forestofhopesout.are.json +++ b/_module/are/forestofhopesout.are.json @@ -124,7 +124,7 @@ }, "SkyBox": { "type": "byte", - "value": 0 + "value": 48 }, "SunAmbientColor": { "type": "dword", @@ -11169,7 +11169,7 @@ }, "Version": { "type": "dword", - "value": 20 + "value": 23 }, "Width": { "type": "int", diff --git a/_module/are/grove_drusilla.are.json b/_module/are/grove_drusilla.are.json new file mode 100644 index 00000000..9c4fd3dc --- /dev/null +++ b/_module/are/grove_drusilla.are.json @@ -0,0 +1,9806 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "Forest of Hope: Druid's Grove" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 14 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 2570047 + }, + "MoonFogAmount": { + "type": "byte", + "value": 15 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "...delete" + } + }, + "NoRest": { + "type": "byte", + "value": 1 + }, + "OnEnter": { + "type": "resref", + "value": "sparky_enter" + }, + "OnExit": { + "type": "resref", + "value": "sparky_exit" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "grove_drusilla" + }, + "ShadowOpacity": { + "type": "byte", + "value": 30 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 3291708 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 9144700 + }, + "SunFogAmount": { + "type": "byte", + "value": 7 + }, + "SunFogColor": { + "type": "dword", + "value": 2110773 + }, + "SunShadows": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "FOH_DRUID_GROVE" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 14 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 143 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 164 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 141 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttf01" + }, + "Version": { + "type": "dword", + "value": 10 + }, + "Width": { + "type": "int", + "value": 16 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/_module/are/starting_area.are.json b/_module/are/starting_area.are.json index e8f640ec..62f1f3d2 100644 --- a/_module/are/starting_area.are.json +++ b/_module/are/starting_area.are.json @@ -1709,7 +1709,7 @@ }, "Version": { "type": "dword", - "value": 77 + "value": 80 }, "Width": { "type": "int", diff --git a/_module/dlg/cv_drusilla.dlg.json b/_module/dlg/cv_drusilla.dlg.json index e71d8c1f..8f8c8ee0 100644 --- a/_module/dlg/cv_drusilla.dlg.json +++ b/_module/dlg/cv_drusilla.dlg.json @@ -51,7 +51,7 @@ }, "Script": { "type": "resref", - "value": "ra_npc_attack_pc" + "value": "ra_fac_attack_pc" }, "Sound": { "type": "resref", @@ -295,7 +295,7 @@ }, "Script": { "type": "resref", - "value": "ra_npc_attack_pc" + "value": "ra_fac_attack_pc" }, "Sound": { "type": "resref", @@ -357,7 +357,7 @@ }, "Script": { "type": "resref", - "value": "ra_npc_attack_pc" + "value": "ra_fac_attack_pc" }, "Sound": { "type": "resref", @@ -577,7 +577,7 @@ }, "Script": { "type": "resref", - "value": "ra_npc_talktimes" + "value": "" }, "Sound": { "type": "resref", diff --git a/_module/fac/Repute.fac.json b/_module/fac/Repute.fac.json index 3c9f77c3..10f653e3 100644 --- a/_module/fac/Repute.fac.json +++ b/_module/fac/Repute.fac.json @@ -302,6 +302,21 @@ "type": "dword", "value": 2 } + }, + { + "__struct_id": 20, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "Drusilla" + }, + "FactionParentID": { + "type": "dword", + "value": 4 + } } ] }, @@ -597,15 +612,15 @@ "__struct_id": 19, "FactionID1": { "type": "dword", - "value": 1 + "value": 0 }, "FactionID2": { "type": "dword", - "value": 0 + "value": 20 }, "FactionRep": { "type": "dword", - "value": 100 + "value": 50 } }, { @@ -616,7 +631,7 @@ }, "FactionID2": { "type": "dword", - "value": 1 + "value": 0 }, "FactionRep": { "type": "dword", @@ -629,6 +644,21 @@ "type": "dword", "value": 1 }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 22, + "FactionID1": { + "type": "dword", + "value": 1 + }, "FactionID2": { "type": "dword", "value": 2 @@ -639,7 +669,7 @@ } }, { - "__struct_id": 22, + "__struct_id": 23, "FactionID1": { "type": "dword", "value": 1 @@ -654,7 +684,7 @@ } }, { - "__struct_id": 23, + "__struct_id": 24, "FactionID1": { "type": "dword", "value": 1 @@ -669,7 +699,7 @@ } }, { - "__struct_id": 24, + "__struct_id": 25, "FactionID1": { "type": "dword", "value": 1 @@ -684,7 +714,7 @@ } }, { - "__struct_id": 25, + "__struct_id": 26, "FactionID1": { "type": "dword", "value": 1 @@ -699,7 +729,7 @@ } }, { - "__struct_id": 26, + "__struct_id": 27, "FactionID1": { "type": "dword", "value": 1 @@ -714,7 +744,7 @@ } }, { - "__struct_id": 27, + "__struct_id": 28, "FactionID1": { "type": "dword", "value": 1 @@ -728,21 +758,6 @@ "value": 10 } }, - { - "__struct_id": 28, - "FactionID1": { - "type": "dword", - "value": 1 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 29, "FactionID1": { @@ -751,7 +766,7 @@ }, "FactionID2": { "type": "dword", - "value": 10 + "value": 9 }, "FactionRep": { "type": "dword", @@ -764,6 +779,21 @@ "type": "dword", "value": 1 }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 31, + "FactionID1": { + "type": "dword", + "value": 1 + }, "FactionID2": { "type": "dword", "value": 11 @@ -774,7 +804,7 @@ } }, { - "__struct_id": 31, + "__struct_id": 32, "FactionID1": { "type": "dword", "value": 1 @@ -789,7 +819,7 @@ } }, { - "__struct_id": 32, + "__struct_id": 33, "FactionID1": { "type": "dword", "value": 1 @@ -804,7 +834,7 @@ } }, { - "__struct_id": 33, + "__struct_id": 34, "FactionID1": { "type": "dword", "value": 1 @@ -819,7 +849,7 @@ } }, { - "__struct_id": 34, + "__struct_id": 35, "FactionID1": { "type": "dword", "value": 1 @@ -834,7 +864,7 @@ } }, { - "__struct_id": 35, + "__struct_id": 36, "FactionID1": { "type": "dword", "value": 1 @@ -849,7 +879,7 @@ } }, { - "__struct_id": 36, + "__struct_id": 37, "FactionID1": { "type": "dword", "value": 1 @@ -864,7 +894,7 @@ } }, { - "__struct_id": 37, + "__struct_id": 38, "FactionID1": { "type": "dword", "value": 1 @@ -879,7 +909,7 @@ } }, { - "__struct_id": 38, + "__struct_id": 39, "FactionID1": { "type": "dword", "value": 1 @@ -893,30 +923,15 @@ "value": 0 } }, - { - "__struct_id": 39, - "FactionID1": { - "type": "dword", - "value": 2 - }, - "FactionID2": { - "type": "dword", - "value": 0 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, { "__struct_id": 40, "FactionID1": { "type": "dword", - "value": 2 + "value": 1 }, "FactionID2": { "type": "dword", - "value": 1 + "value": 20 }, "FactionRep": { "type": "dword", @@ -931,7 +946,7 @@ }, "FactionID2": { "type": "dword", - "value": 2 + "value": 0 }, "FactionRep": { "type": "dword", @@ -946,11 +961,11 @@ }, "FactionID2": { "type": "dword", - "value": 3 + "value": 1 }, "FactionRep": { "type": "dword", - "value": 50 + "value": 0 } }, { @@ -961,7 +976,7 @@ }, "FactionID2": { "type": "dword", - "value": 4 + "value": 2 }, "FactionRep": { "type": "dword", @@ -974,6 +989,36 @@ "type": "dword", "value": 2 }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 45, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 46, + "FactionID1": { + "type": "dword", + "value": 2 + }, "FactionID2": { "type": "dword", "value": 5 @@ -984,7 +1029,7 @@ } }, { - "__struct_id": 45, + "__struct_id": 47, "FactionID1": { "type": "dword", "value": 2 @@ -998,36 +1043,6 @@ "value": 50 } }, - { - "__struct_id": 46, - "FactionID1": { - "type": "dword", - "value": 2 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 47, - "FactionID1": { - "type": "dword", - "value": 2 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 33 - } - }, { "__struct_id": 48, "FactionID1": { @@ -1036,7 +1051,7 @@ }, "FactionID2": { "type": "dword", - "value": 9 + "value": 7 }, "FactionRep": { "type": "dword", @@ -1049,6 +1064,36 @@ "type": "dword", "value": 2 }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 33 + } + }, + { + "__struct_id": 50, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 51, + "FactionID1": { + "type": "dword", + "value": 2 + }, "FactionID2": { "type": "dword", "value": 10 @@ -1059,7 +1104,7 @@ } }, { - "__struct_id": 50, + "__struct_id": 52, "FactionID1": { "type": "dword", "value": 2 @@ -1074,7 +1119,7 @@ } }, { - "__struct_id": 51, + "__struct_id": 53, "FactionID1": { "type": "dword", "value": 2 @@ -1089,7 +1134,7 @@ } }, { - "__struct_id": 52, + "__struct_id": 54, "FactionID1": { "type": "dword", "value": 2 @@ -1104,7 +1149,7 @@ } }, { - "__struct_id": 53, + "__struct_id": 55, "FactionID1": { "type": "dword", "value": 2 @@ -1119,7 +1164,7 @@ } }, { - "__struct_id": 54, + "__struct_id": 56, "FactionID1": { "type": "dword", "value": 2 @@ -1134,7 +1179,7 @@ } }, { - "__struct_id": 55, + "__struct_id": 57, "FactionID1": { "type": "dword", "value": 2 @@ -1149,7 +1194,7 @@ } }, { - "__struct_id": 56, + "__struct_id": 58, "FactionID1": { "type": "dword", "value": 2 @@ -1164,7 +1209,7 @@ } }, { - "__struct_id": 57, + "__struct_id": 59, "FactionID1": { "type": "dword", "value": 2 @@ -1179,7 +1224,7 @@ } }, { - "__struct_id": 58, + "__struct_id": 60, "FactionID1": { "type": "dword", "value": 2 @@ -1193,45 +1238,15 @@ "value": 75 } }, - { - "__struct_id": 59, - "FactionID1": { - "type": "dword", - "value": 3 - }, - "FactionID2": { - "type": "dword", - "value": 0 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 60, - "FactionID1": { - "type": "dword", - "value": 3 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 61, "FactionID1": { "type": "dword", - "value": 3 + "value": 2 }, "FactionID2": { "type": "dword", - "value": 2 + "value": 20 }, "FactionRep": { "type": "dword", @@ -1246,7 +1261,7 @@ }, "FactionID2": { "type": "dword", - "value": 3 + "value": 0 }, "FactionRep": { "type": "dword", @@ -1261,11 +1276,11 @@ }, "FactionID2": { "type": "dword", - "value": 4 + "value": 1 }, "FactionRep": { "type": "dword", - "value": 100 + "value": 50 } }, { @@ -1276,11 +1291,11 @@ }, "FactionID2": { "type": "dword", - "value": 5 + "value": 2 }, "FactionRep": { "type": "dword", - "value": 0 + "value": 50 } }, { @@ -1291,11 +1306,11 @@ }, "FactionID2": { "type": "dword", - "value": 6 + "value": 3 }, "FactionRep": { "type": "dword", - "value": 50 + "value": 100 } }, { @@ -1306,11 +1321,11 @@ }, "FactionID2": { "type": "dword", - "value": 7 + "value": 4 }, "FactionRep": { "type": "dword", - "value": 50 + "value": 100 } }, { @@ -1321,11 +1336,11 @@ }, "FactionID2": { "type": "dword", - "value": 8 + "value": 5 }, "FactionRep": { "type": "dword", - "value": 40 + "value": 50 } }, { @@ -1336,7 +1351,7 @@ }, "FactionID2": { "type": "dword", - "value": 9 + "value": 6 }, "FactionRep": { "type": "dword", @@ -1351,7 +1366,7 @@ }, "FactionID2": { "type": "dword", - "value": 10 + "value": 7 }, "FactionRep": { "type": "dword", @@ -1364,6 +1379,51 @@ "type": "dword", "value": 3 }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 71, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 72, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 73, + "FactionID1": { + "type": "dword", + "value": 3 + }, "FactionID2": { "type": "dword", "value": 11 @@ -1374,7 +1434,7 @@ } }, { - "__struct_id": 71, + "__struct_id": 74, "FactionID1": { "type": "dword", "value": 3 @@ -1389,7 +1449,7 @@ } }, { - "__struct_id": 72, + "__struct_id": 75, "FactionID1": { "type": "dword", "value": 3 @@ -1404,7 +1464,7 @@ } }, { - "__struct_id": 73, + "__struct_id": 76, "FactionID1": { "type": "dword", "value": 3 @@ -1419,7 +1479,7 @@ } }, { - "__struct_id": 74, + "__struct_id": 77, "FactionID1": { "type": "dword", "value": 3 @@ -1434,7 +1494,7 @@ } }, { - "__struct_id": 75, + "__struct_id": 78, "FactionID1": { "type": "dword", "value": 3 @@ -1449,7 +1509,7 @@ } }, { - "__struct_id": 76, + "__struct_id": 79, "FactionID1": { "type": "dword", "value": 3 @@ -1464,7 +1524,7 @@ } }, { - "__struct_id": 77, + "__struct_id": 80, "FactionID1": { "type": "dword", "value": 3 @@ -1479,7 +1539,7 @@ } }, { - "__struct_id": 78, + "__struct_id": 81, "FactionID1": { "type": "dword", "value": 3 @@ -1494,7 +1554,37 @@ } }, { - "__struct_id": 79, + "__struct_id": 82, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 83, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 0 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 84, "FactionID1": { "type": "dword", "value": 4 @@ -1508,81 +1598,6 @@ "value": 0 } }, - { - "__struct_id": 80, - "FactionID1": { - "type": "dword", - "value": 4 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 81, - "FactionID1": { - "type": "dword", - "value": 4 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 82, - "FactionID1": { - "type": "dword", - "value": 4 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 83, - "FactionID1": { - "type": "dword", - "value": 4 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 0 - } - }, - { - "__struct_id": 84, - "FactionID1": { - "type": "dword", - "value": 4 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 85, "FactionID1": { @@ -1591,7 +1606,7 @@ }, "FactionID2": { "type": "dword", - "value": 7 + "value": 2 }, "FactionRep": { "type": "dword", @@ -1604,6 +1619,81 @@ "type": "dword", "value": 4 }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 87, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 88, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 89, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 90, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 91, + "FactionID1": { + "type": "dword", + "value": 4 + }, "FactionID2": { "type": "dword", "value": 8 @@ -1614,7 +1704,7 @@ } }, { - "__struct_id": 87, + "__struct_id": 92, "FactionID1": { "type": "dword", "value": 4 @@ -1629,7 +1719,7 @@ } }, { - "__struct_id": 88, + "__struct_id": 93, "FactionID1": { "type": "dword", "value": 4 @@ -1644,7 +1734,7 @@ } }, { - "__struct_id": 89, + "__struct_id": 94, "FactionID1": { "type": "dword", "value": 4 @@ -1659,7 +1749,7 @@ } }, { - "__struct_id": 90, + "__struct_id": 95, "FactionID1": { "type": "dword", "value": 4 @@ -1674,7 +1764,7 @@ } }, { - "__struct_id": 91, + "__struct_id": 96, "FactionID1": { "type": "dword", "value": 4 @@ -1689,7 +1779,7 @@ } }, { - "__struct_id": 92, + "__struct_id": 97, "FactionID1": { "type": "dword", "value": 4 @@ -1704,7 +1794,7 @@ } }, { - "__struct_id": 93, + "__struct_id": 98, "FactionID1": { "type": "dword", "value": 4 @@ -1719,7 +1809,7 @@ } }, { - "__struct_id": 94, + "__struct_id": 99, "FactionID1": { "type": "dword", "value": 4 @@ -1734,7 +1824,7 @@ } }, { - "__struct_id": 95, + "__struct_id": 100, "FactionID1": { "type": "dword", "value": 4 @@ -1749,7 +1839,7 @@ } }, { - "__struct_id": 96, + "__struct_id": 101, "FactionID1": { "type": "dword", "value": 4 @@ -1764,7 +1854,7 @@ } }, { - "__struct_id": 97, + "__struct_id": 102, "FactionID1": { "type": "dword", "value": 4 @@ -1779,95 +1869,20 @@ } }, { - "__struct_id": 98, + "__struct_id": 103, "FactionID1": { "type": "dword", - "value": 5 + "value": 4 }, "FactionID2": { "type": "dword", - "value": 0 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 99, - "FactionID1": { - "type": "dword", - "value": 5 - }, - "FactionID2": { - "type": "dword", - "value": 1 + "value": 20 }, "FactionRep": { "type": "dword", "value": 50 } }, - { - "__struct_id": 100, - "FactionID1": { - "type": "dword", - "value": 5 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 0 - } - }, - { - "__struct_id": 101, - "FactionID1": { - "type": "dword", - "value": 5 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 1 - } - }, - { - "__struct_id": 102, - "FactionID1": { - "type": "dword", - "value": 5 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 0 - } - }, - { - "__struct_id": 103, - "FactionID1": { - "type": "dword", - "value": 5 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, { "__struct_id": 104, "FactionID1": { @@ -1876,11 +1891,11 @@ }, "FactionID2": { "type": "dword", - "value": 6 + "value": 0 }, "FactionRep": { "type": "dword", - "value": 43 + "value": 100 } }, { @@ -1891,7 +1906,7 @@ }, "FactionID2": { "type": "dword", - "value": 7 + "value": 1 }, "FactionRep": { "type": "dword", @@ -1906,11 +1921,11 @@ }, "FactionID2": { "type": "dword", - "value": 8 + "value": 2 }, "FactionRep": { "type": "dword", - "value": 26 + "value": 0 } }, { @@ -1921,7 +1936,7 @@ }, "FactionID2": { "type": "dword", - "value": 9 + "value": 3 }, "FactionRep": { "type": "dword", @@ -1936,11 +1951,11 @@ }, "FactionID2": { "type": "dword", - "value": 10 + "value": 4 }, "FactionRep": { "type": "dword", - "value": 50 + "value": 0 } }, { @@ -1951,11 +1966,11 @@ }, "FactionID2": { "type": "dword", - "value": 11 + "value": 5 }, "FactionRep": { "type": "dword", - "value": 45 + "value": 100 } }, { @@ -1966,11 +1981,11 @@ }, "FactionID2": { "type": "dword", - "value": 12 + "value": 6 }, "FactionRep": { "type": "dword", - "value": 46 + "value": 43 } }, { @@ -1981,11 +1996,11 @@ }, "FactionID2": { "type": "dword", - "value": 13 + "value": 7 }, "FactionRep": { "type": "dword", - "value": 64 + "value": 50 } }, { @@ -1996,11 +2011,11 @@ }, "FactionID2": { "type": "dword", - "value": 14 + "value": 8 }, "FactionRep": { "type": "dword", - "value": 55 + "value": 26 } }, { @@ -2011,7 +2026,7 @@ }, "FactionID2": { "type": "dword", - "value": 15 + "value": 9 }, "FactionRep": { "type": "dword", @@ -2026,7 +2041,7 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 10 }, "FactionRep": { "type": "dword", @@ -2039,6 +2054,96 @@ "type": "dword", "value": 5 }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 45 + } + }, + { + "__struct_id": 116, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 46 + } + }, + { + "__struct_id": 117, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 64 + } + }, + { + "__struct_id": 118, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 55 + } + }, + { + "__struct_id": 119, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 120, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 121, + "FactionID1": { + "type": "dword", + "value": 5 + }, "FactionID2": { "type": "dword", "value": 17 @@ -2049,7 +2154,7 @@ } }, { - "__struct_id": 116, + "__struct_id": 122, "FactionID1": { "type": "dword", "value": 5 @@ -2064,7 +2169,7 @@ } }, { - "__struct_id": 117, + "__struct_id": 123, "FactionID1": { "type": "dword", "value": 5 @@ -2079,7 +2184,22 @@ } }, { - "__struct_id": 118, + "__struct_id": 124, + "FactionID1": { + "type": "dword", + "value": 5 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 125, "FactionID1": { "type": "dword", "value": 6 @@ -2094,7 +2214,7 @@ } }, { - "__struct_id": 119, + "__struct_id": 126, "FactionID1": { "type": "dword", "value": 6 @@ -2108,111 +2228,6 @@ "value": 100 } }, - { - "__struct_id": 120, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 121, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 122, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 123, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 43 - } - }, - { - "__struct_id": 124, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 125, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 126, - "FactionID1": { - "type": "dword", - "value": 6 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 43 - } - }, { "__struct_id": 127, "FactionID1": { @@ -2221,7 +2236,7 @@ }, "FactionID2": { "type": "dword", - "value": 9 + "value": 2 }, "FactionRep": { "type": "dword", @@ -2236,7 +2251,7 @@ }, "FactionID2": { "type": "dword", - "value": 10 + "value": 3 }, "FactionRep": { "type": "dword", @@ -2249,6 +2264,111 @@ "type": "dword", "value": 6 }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 130, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 43 + } + }, + { + "__struct_id": 131, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 132, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 133, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 43 + } + }, + { + "__struct_id": 134, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 135, + "FactionID1": { + "type": "dword", + "value": 6 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 136, + "FactionID1": { + "type": "dword", + "value": 6 + }, "FactionID2": { "type": "dword", "value": 11 @@ -2259,7 +2379,7 @@ } }, { - "__struct_id": 130, + "__struct_id": 137, "FactionID1": { "type": "dword", "value": 6 @@ -2274,7 +2394,7 @@ } }, { - "__struct_id": 131, + "__struct_id": 138, "FactionID1": { "type": "dword", "value": 6 @@ -2289,7 +2409,7 @@ } }, { - "__struct_id": 132, + "__struct_id": 139, "FactionID1": { "type": "dword", "value": 6 @@ -2304,7 +2424,7 @@ } }, { - "__struct_id": 133, + "__struct_id": 140, "FactionID1": { "type": "dword", "value": 6 @@ -2319,7 +2439,7 @@ } }, { - "__struct_id": 134, + "__struct_id": 141, "FactionID1": { "type": "dword", "value": 6 @@ -2334,7 +2454,7 @@ } }, { - "__struct_id": 135, + "__struct_id": 142, "FactionID1": { "type": "dword", "value": 6 @@ -2349,7 +2469,7 @@ } }, { - "__struct_id": 136, + "__struct_id": 143, "FactionID1": { "type": "dword", "value": 6 @@ -2364,7 +2484,7 @@ } }, { - "__struct_id": 137, + "__struct_id": 144, "FactionID1": { "type": "dword", "value": 6 @@ -2378,120 +2498,15 @@ "value": 50 } }, - { - "__struct_id": 138, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 0 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 139, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 140, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 141, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 142, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 143, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 144, - "FactionID1": { - "type": "dword", - "value": 7 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 145, "FactionID1": { "type": "dword", - "value": 7 + "value": 6 }, "FactionID2": { "type": "dword", - "value": 7 + "value": 20 }, "FactionRep": { "type": "dword", @@ -2506,11 +2521,11 @@ }, "FactionID2": { "type": "dword", - "value": 8 + "value": 0 }, "FactionRep": { "type": "dword", - "value": 50 + "value": 100 } }, { @@ -2521,7 +2536,7 @@ }, "FactionID2": { "type": "dword", - "value": 9 + "value": 1 }, "FactionRep": { "type": "dword", @@ -2536,7 +2551,7 @@ }, "FactionID2": { "type": "dword", - "value": 10 + "value": 2 }, "FactionRep": { "type": "dword", @@ -2551,7 +2566,7 @@ }, "FactionID2": { "type": "dword", - "value": 11 + "value": 3 }, "FactionRep": { "type": "dword", @@ -2566,11 +2581,11 @@ }, "FactionID2": { "type": "dword", - "value": 12 + "value": 4 }, "FactionRep": { "type": "dword", - "value": 48 + "value": 50 } }, { @@ -2581,7 +2596,7 @@ }, "FactionID2": { "type": "dword", - "value": 13 + "value": 5 }, "FactionRep": { "type": "dword", @@ -2596,7 +2611,7 @@ }, "FactionID2": { "type": "dword", - "value": 14 + "value": 6 }, "FactionRep": { "type": "dword", @@ -2611,7 +2626,7 @@ }, "FactionID2": { "type": "dword", - "value": 15 + "value": 7 }, "FactionRep": { "type": "dword", @@ -2626,7 +2641,7 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 8 }, "FactionRep": { "type": "dword", @@ -2641,7 +2656,7 @@ }, "FactionID2": { "type": "dword", - "value": 17 + "value": 9 }, "FactionRep": { "type": "dword", @@ -2656,7 +2671,7 @@ }, "FactionID2": { "type": "dword", - "value": 18 + "value": 10 }, "FactionRep": { "type": "dword", @@ -2671,7 +2686,7 @@ }, "FactionID2": { "type": "dword", - "value": 19 + "value": 11 }, "FactionRep": { "type": "dword", @@ -2680,6 +2695,141 @@ }, { "__struct_id": 158, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 159, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 160, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 161, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 162, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 163, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 164, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 18 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 165, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 19 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 166, + "FactionID1": { + "type": "dword", + "value": 7 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 167, "FactionID1": { "type": "dword", "value": 8 @@ -2694,7 +2844,7 @@ } }, { - "__struct_id": 159, + "__struct_id": 168, "FactionID1": { "type": "dword", "value": 8 @@ -2709,7 +2859,7 @@ } }, { - "__struct_id": 160, + "__struct_id": 169, "FactionID1": { "type": "dword", "value": 8 @@ -2724,7 +2874,7 @@ } }, { - "__struct_id": 161, + "__struct_id": 170, "FactionID1": { "type": "dword", "value": 8 @@ -2739,7 +2889,7 @@ } }, { - "__struct_id": 162, + "__struct_id": 171, "FactionID1": { "type": "dword", "value": 8 @@ -2754,7 +2904,7 @@ } }, { - "__struct_id": 163, + "__struct_id": 172, "FactionID1": { "type": "dword", "value": 8 @@ -2769,7 +2919,7 @@ } }, { - "__struct_id": 164, + "__struct_id": 173, "FactionID1": { "type": "dword", "value": 8 @@ -2784,7 +2934,7 @@ } }, { - "__struct_id": 165, + "__struct_id": 174, "FactionID1": { "type": "dword", "value": 8 @@ -2799,7 +2949,7 @@ } }, { - "__struct_id": 166, + "__struct_id": 175, "FactionID1": { "type": "dword", "value": 8 @@ -2814,7 +2964,7 @@ } }, { - "__struct_id": 167, + "__struct_id": 176, "FactionID1": { "type": "dword", "value": 8 @@ -2829,7 +2979,7 @@ } }, { - "__struct_id": 168, + "__struct_id": 177, "FactionID1": { "type": "dword", "value": 8 @@ -2844,7 +2994,7 @@ } }, { - "__struct_id": 169, + "__struct_id": 178, "FactionID1": { "type": "dword", "value": 8 @@ -2859,7 +3009,7 @@ } }, { - "__struct_id": 170, + "__struct_id": 179, "FactionID1": { "type": "dword", "value": 8 @@ -2874,7 +3024,7 @@ } }, { - "__struct_id": 171, + "__struct_id": 180, "FactionID1": { "type": "dword", "value": 8 @@ -2889,7 +3039,7 @@ } }, { - "__struct_id": 172, + "__struct_id": 181, "FactionID1": { "type": "dword", "value": 8 @@ -2904,7 +3054,7 @@ } }, { - "__struct_id": 173, + "__struct_id": 182, "FactionID1": { "type": "dword", "value": 8 @@ -2919,7 +3069,7 @@ } }, { - "__struct_id": 174, + "__struct_id": 183, "FactionID1": { "type": "dword", "value": 8 @@ -2934,7 +3084,7 @@ } }, { - "__struct_id": 175, + "__struct_id": 184, "FactionID1": { "type": "dword", "value": 8 @@ -2949,7 +3099,7 @@ } }, { - "__struct_id": 176, + "__struct_id": 185, "FactionID1": { "type": "dword", "value": 8 @@ -2964,7 +3114,7 @@ } }, { - "__struct_id": 177, + "__struct_id": 186, "FactionID1": { "type": "dword", "value": 8 @@ -2975,11 +3125,26 @@ }, "FactionRep": { "type": "dword", - "value": 34 + "value": 10 } }, { - "__struct_id": 178, + "__struct_id": 187, + "FactionID1": { + "type": "dword", + "value": 8 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 10 + } + }, + { + "__struct_id": 188, "FactionID1": { "type": "dword", "value": 9 @@ -2993,156 +3158,6 @@ "value": 100 } }, - { - "__struct_id": 179, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 180, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 181, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 182, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 183, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 184, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 185, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 186, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 187, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 188, - "FactionID1": { - "type": "dword", - "value": 9 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 189, "FactionID1": { @@ -3151,7 +3166,7 @@ }, "FactionID2": { "type": "dword", - "value": 11 + "value": 1 }, "FactionRep": { "type": "dword", @@ -3166,7 +3181,7 @@ }, "FactionID2": { "type": "dword", - "value": 12 + "value": 2 }, "FactionRep": { "type": "dword", @@ -3181,7 +3196,7 @@ }, "FactionID2": { "type": "dword", - "value": 13 + "value": 3 }, "FactionRep": { "type": "dword", @@ -3196,7 +3211,7 @@ }, "FactionID2": { "type": "dword", - "value": 14 + "value": 4 }, "FactionRep": { "type": "dword", @@ -3211,7 +3226,7 @@ }, "FactionID2": { "type": "dword", - "value": 15 + "value": 5 }, "FactionRep": { "type": "dword", @@ -3226,7 +3241,7 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 6 }, "FactionRep": { "type": "dword", @@ -3241,7 +3256,7 @@ }, "FactionID2": { "type": "dword", - "value": 17 + "value": 7 }, "FactionRep": { "type": "dword", @@ -3256,7 +3271,7 @@ }, "FactionID2": { "type": "dword", - "value": 18 + "value": 8 }, "FactionRep": { "type": "dword", @@ -3271,7 +3286,7 @@ }, "FactionID2": { "type": "dword", - "value": 19 + "value": 9 }, "FactionRep": { "type": "dword", @@ -3280,6 +3295,171 @@ }, { "__struct_id": 198, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 199, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 200, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 201, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 202, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 203, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 204, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 205, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 206, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 18 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 207, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 19 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 208, + "FactionID1": { + "type": "dword", + "value": 9 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 91 + } + }, + { + "__struct_id": 209, "FactionID1": { "type": "dword", "value": 10 @@ -3293,171 +3473,6 @@ "value": 100 } }, - { - "__struct_id": 199, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 200, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 201, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 202, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 203, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 204, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 205, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 206, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 207, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 208, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 209, - "FactionID1": { - "type": "dword", - "value": 10 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 210, "FactionID1": { @@ -3466,7 +3481,7 @@ }, "FactionID2": { "type": "dword", - "value": 12 + "value": 1 }, "FactionRep": { "type": "dword", @@ -3481,7 +3496,7 @@ }, "FactionID2": { "type": "dword", - "value": 13 + "value": 2 }, "FactionRep": { "type": "dword", @@ -3496,7 +3511,7 @@ }, "FactionID2": { "type": "dword", - "value": 14 + "value": 3 }, "FactionRep": { "type": "dword", @@ -3511,7 +3526,7 @@ }, "FactionID2": { "type": "dword", - "value": 15 + "value": 4 }, "FactionRep": { "type": "dword", @@ -3526,7 +3541,7 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 5 }, "FactionRep": { "type": "dword", @@ -3541,7 +3556,7 @@ }, "FactionID2": { "type": "dword", - "value": 17 + "value": 6 }, "FactionRep": { "type": "dword", @@ -3556,7 +3571,7 @@ }, "FactionID2": { "type": "dword", - "value": 18 + "value": 7 }, "FactionRep": { "type": "dword", @@ -3571,7 +3586,7 @@ }, "FactionID2": { "type": "dword", - "value": 19 + "value": 8 }, "FactionRep": { "type": "dword", @@ -3580,6 +3595,186 @@ }, { "__struct_id": 218, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 219, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 220, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 221, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 222, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 223, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 224, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 225, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 226, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 227, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 18 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 228, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 19 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 229, + "FactionID1": { + "type": "dword", + "value": 10 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 230, "FactionID1": { "type": "dword", "value": 11 @@ -3593,186 +3788,6 @@ "value": 100 } }, - { - "__struct_id": 219, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 41 - } - }, - { - "__struct_id": 220, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 28 - } - }, - { - "__struct_id": 221, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 28 - } - }, - { - "__struct_id": 222, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 21 - } - }, - { - "__struct_id": 223, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 48 - } - }, - { - "__struct_id": 224, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 46 - } - }, - { - "__struct_id": 225, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 226, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 38 - } - }, - { - "__struct_id": 227, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 228, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 229, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 230, - "FactionID1": { - "type": "dword", - "value": 11 - }, - "FactionID2": { - "type": "dword", - "value": 12 - }, - "FactionRep": { - "type": "dword", - "value": 41 - } - }, { "__struct_id": 231, "FactionID1": { @@ -3781,7 +3796,7 @@ }, "FactionID2": { "type": "dword", - "value": 13 + "value": 1 }, "FactionRep": { "type": "dword", @@ -3794,6 +3809,186 @@ "type": "dword", "value": 11 }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 28 + } + }, + { + "__struct_id": 233, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 28 + } + }, + { + "__struct_id": 234, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 21 + } + }, + { + "__struct_id": 235, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 236, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 46 + } + }, + { + "__struct_id": 237, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 238, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 38 + } + }, + { + "__struct_id": 239, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 240, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 241, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 242, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 41 + } + }, + { + "__struct_id": 243, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 41 + } + }, + { + "__struct_id": 244, + "FactionID1": { + "type": "dword", + "value": 11 + }, "FactionID2": { "type": "dword", "value": 14 @@ -3804,7 +3999,7 @@ } }, { - "__struct_id": 233, + "__struct_id": 245, "FactionID1": { "type": "dword", "value": 11 @@ -3819,7 +4014,7 @@ } }, { - "__struct_id": 234, + "__struct_id": 246, "FactionID1": { "type": "dword", "value": 11 @@ -3834,7 +4029,7 @@ } }, { - "__struct_id": 235, + "__struct_id": 247, "FactionID1": { "type": "dword", "value": 11 @@ -3849,7 +4044,7 @@ } }, { - "__struct_id": 236, + "__struct_id": 248, "FactionID1": { "type": "dword", "value": 11 @@ -3864,7 +4059,7 @@ } }, { - "__struct_id": 237, + "__struct_id": 249, "FactionID1": { "type": "dword", "value": 11 @@ -3875,11 +4070,26 @@ }, "FactionRep": { "type": "dword", - "value": 28 + "value": 10 } }, { - "__struct_id": 238, + "__struct_id": 250, + "FactionID1": { + "type": "dword", + "value": 11 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 10 + } + }, + { + "__struct_id": 251, "FactionID1": { "type": "dword", "value": 12 @@ -3893,201 +4103,6 @@ "value": 100 } }, - { - "__struct_id": 239, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 16 - } - }, - { - "__struct_id": 240, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 55 - } - }, - { - "__struct_id": 241, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 242, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 52 - } - }, - { - "__struct_id": 243, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 45 - } - }, - { - "__struct_id": 244, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 42 - } - }, - { - "__struct_id": 245, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 246, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 55 - } - }, - { - "__struct_id": 247, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 248, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 249, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 250, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 12 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 251, - "FactionID1": { - "type": "dword", - "value": 12 - }, - "FactionID2": { - "type": "dword", - "value": 13 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 252, "FactionID1": { @@ -4096,7 +4111,7 @@ }, "FactionID2": { "type": "dword", - "value": 14 + "value": 1 }, "FactionRep": { "type": "dword", @@ -4109,6 +4124,201 @@ "type": "dword", "value": 12 }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 55 + } + }, + { + "__struct_id": 254, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 255, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 52 + } + }, + { + "__struct_id": 256, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 45 + } + }, + { + "__struct_id": 257, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 42 + } + }, + { + "__struct_id": 258, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 259, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 55 + } + }, + { + "__struct_id": 260, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 261, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 262, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 263, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 264, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 265, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 16 + } + }, + { + "__struct_id": 266, + "FactionID1": { + "type": "dword", + "value": 12 + }, "FactionID2": { "type": "dword", "value": 15 @@ -4119,7 +4329,7 @@ } }, { - "__struct_id": 254, + "__struct_id": 267, "FactionID1": { "type": "dword", "value": 12 @@ -4134,7 +4344,7 @@ } }, { - "__struct_id": 255, + "__struct_id": 268, "FactionID1": { "type": "dword", "value": 12 @@ -4149,7 +4359,7 @@ } }, { - "__struct_id": 256, + "__struct_id": 269, "FactionID1": { "type": "dword", "value": 12 @@ -4164,7 +4374,7 @@ } }, { - "__struct_id": 257, + "__struct_id": 270, "FactionID1": { "type": "dword", "value": 12 @@ -4175,11 +4385,26 @@ }, "FactionRep": { "type": "dword", - "value": 55 + "value": 10 } }, { - "__struct_id": 258, + "__struct_id": 271, + "FactionID1": { + "type": "dword", + "value": 12 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 10 + } + }, + { + "__struct_id": 272, "FactionID1": { "type": "dword", "value": 13 @@ -4193,216 +4418,6 @@ "value": 100 } }, - { - "__struct_id": 259, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 38 - } - }, - { - "__struct_id": 260, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 60 - } - }, - { - "__struct_id": 261, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 63 - } - }, - { - "__struct_id": 262, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 60 - } - }, - { - "__struct_id": 263, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 63 - } - }, - { - "__struct_id": 264, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 63 - } - }, - { - "__struct_id": 265, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 266, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 57 - } - }, - { - "__struct_id": 267, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 268, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 269, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 270, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 12 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 271, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 13 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 272, - "FactionID1": { - "type": "dword", - "value": 13 - }, - "FactionID2": { - "type": "dword", - "value": 14 - }, - "FactionRep": { - "type": "dword", - "value": 38 - } - }, { "__struct_id": 273, "FactionID1": { @@ -4411,7 +4426,7 @@ }, "FactionID2": { "type": "dword", - "value": 15 + "value": 1 }, "FactionRep": { "type": "dword", @@ -4426,11 +4441,11 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 2 }, "FactionRep": { "type": "dword", - "value": 38 + "value": 60 } }, { @@ -4441,7 +4456,7 @@ }, "FactionID2": { "type": "dword", - "value": 17 + "value": 3 }, "FactionRep": { "type": "dword", @@ -4454,6 +4469,216 @@ "type": "dword", "value": 13 }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 60 + } + }, + { + "__struct_id": 277, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 63 + } + }, + { + "__struct_id": 278, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 63 + } + }, + { + "__struct_id": 279, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 280, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 57 + } + }, + { + "__struct_id": 281, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 282, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 283, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 284, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 285, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 286, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 38 + } + }, + { + "__struct_id": 287, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 38 + } + }, + { + "__struct_id": 288, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 38 + } + }, + { + "__struct_id": 289, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 63 + } + }, + { + "__struct_id": 290, + "FactionID1": { + "type": "dword", + "value": 13 + }, "FactionID2": { "type": "dword", "value": 18 @@ -4464,7 +4689,7 @@ } }, { - "__struct_id": 277, + "__struct_id": 291, "FactionID1": { "type": "dword", "value": 13 @@ -4479,7 +4704,22 @@ } }, { - "__struct_id": 278, + "__struct_id": 292, + "FactionID1": { + "type": "dword", + "value": 13 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 60 + } + }, + { + "__struct_id": 293, "FactionID1": { "type": "dword", "value": 14 @@ -4493,231 +4733,6 @@ "value": 100 } }, - { - "__struct_id": 279, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 64 - } - }, - { - "__struct_id": 280, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 29 - } - }, - { - "__struct_id": 281, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 45 - } - }, - { - "__struct_id": 282, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 48 - } - }, - { - "__struct_id": 283, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 53 - } - }, - { - "__struct_id": 284, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 285, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 286, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 287, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 288, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 289, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 290, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 12 - }, - "FactionRep": { - "type": "dword", - "value": 16 - } - }, - { - "__struct_id": 291, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 13 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 292, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 14 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 293, - "FactionID1": { - "type": "dword", - "value": 14 - }, - "FactionID2": { - "type": "dword", - "value": 15 - }, - "FactionRep": { - "type": "dword", - "value": 64 - } - }, { "__struct_id": 294, "FactionID1": { @@ -4726,7 +4741,7 @@ }, "FactionID2": { "type": "dword", - "value": 16 + "value": 1 }, "FactionRep": { "type": "dword", @@ -4739,6 +4754,231 @@ "type": "dword", "value": 14 }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 29 + } + }, + { + "__struct_id": 296, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 45 + } + }, + { + "__struct_id": 297, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 298, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 53 + } + }, + { + "__struct_id": 299, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 300, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 301, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 302, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 303, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 304, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 305, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 16 + } + }, + { + "__struct_id": 306, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 307, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 308, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 64 + } + }, + { + "__struct_id": 309, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 64 + } + }, + { + "__struct_id": 310, + "FactionID1": { + "type": "dword", + "value": 14 + }, "FactionID2": { "type": "dword", "value": 17 @@ -4749,7 +4989,7 @@ } }, { - "__struct_id": 296, + "__struct_id": 311, "FactionID1": { "type": "dword", "value": 14 @@ -4764,7 +5004,7 @@ } }, { - "__struct_id": 297, + "__struct_id": 312, "FactionID1": { "type": "dword", "value": 14 @@ -4779,7 +5019,22 @@ } }, { - "__struct_id": 298, + "__struct_id": 313, + "FactionID1": { + "type": "dword", + "value": 14 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 314, "FactionID1": { "type": "dword", "value": 15 @@ -4794,7 +5049,7 @@ } }, { - "__struct_id": 299, + "__struct_id": 315, "FactionID1": { "type": "dword", "value": 15 @@ -4809,7 +5064,7 @@ } }, { - "__struct_id": 300, + "__struct_id": 316, "FactionID1": { "type": "dword", "value": 15 @@ -4824,7 +5079,7 @@ } }, { - "__struct_id": 301, + "__struct_id": 317, "FactionID1": { "type": "dword", "value": 15 @@ -4839,7 +5094,7 @@ } }, { - "__struct_id": 302, + "__struct_id": 318, "FactionID1": { "type": "dword", "value": 15 @@ -4854,7 +5109,7 @@ } }, { - "__struct_id": 303, + "__struct_id": 319, "FactionID1": { "type": "dword", "value": 15 @@ -4869,7 +5124,7 @@ } }, { - "__struct_id": 304, + "__struct_id": 320, "FactionID1": { "type": "dword", "value": 15 @@ -4884,7 +5139,7 @@ } }, { - "__struct_id": 305, + "__struct_id": 321, "FactionID1": { "type": "dword", "value": 15 @@ -4899,7 +5154,7 @@ } }, { - "__struct_id": 306, + "__struct_id": 322, "FactionID1": { "type": "dword", "value": 15 @@ -4914,7 +5169,7 @@ } }, { - "__struct_id": 307, + "__struct_id": 323, "FactionID1": { "type": "dword", "value": 15 @@ -4929,7 +5184,7 @@ } }, { - "__struct_id": 308, + "__struct_id": 324, "FactionID1": { "type": "dword", "value": 15 @@ -4944,7 +5199,7 @@ } }, { - "__struct_id": 309, + "__struct_id": 325, "FactionID1": { "type": "dword", "value": 15 @@ -4959,7 +5214,7 @@ } }, { - "__struct_id": 310, + "__struct_id": 326, "FactionID1": { "type": "dword", "value": 15 @@ -4974,7 +5229,7 @@ } }, { - "__struct_id": 311, + "__struct_id": 327, "FactionID1": { "type": "dword", "value": 15 @@ -4989,7 +5244,7 @@ } }, { - "__struct_id": 312, + "__struct_id": 328, "FactionID1": { "type": "dword", "value": 15 @@ -5004,7 +5259,7 @@ } }, { - "__struct_id": 313, + "__struct_id": 329, "FactionID1": { "type": "dword", "value": 15 @@ -5019,7 +5274,7 @@ } }, { - "__struct_id": 314, + "__struct_id": 330, "FactionID1": { "type": "dword", "value": 15 @@ -5034,7 +5289,7 @@ } }, { - "__struct_id": 315, + "__struct_id": 331, "FactionID1": { "type": "dword", "value": 15 @@ -5049,7 +5304,7 @@ } }, { - "__struct_id": 316, + "__struct_id": 332, "FactionID1": { "type": "dword", "value": 15 @@ -5064,7 +5319,7 @@ } }, { - "__struct_id": 317, + "__struct_id": 333, "FactionID1": { "type": "dword", "value": 15 @@ -5078,259 +5333,19 @@ "value": 48 } }, - { - "__struct_id": 318, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 0 - }, - "FactionRep": { - "type": "dword", - "value": 100 - } - }, - { - "__struct_id": 319, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 1 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 320, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 2 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 321, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 3 - }, - "FactionRep": { - "type": "dword", - "value": 51 - } - }, - { - "__struct_id": 322, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 4 - }, - "FactionRep": { - "type": "dword", - "value": 0 - } - }, - { - "__struct_id": 323, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 5 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 324, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 6 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 325, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 7 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 326, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 8 - }, - "FactionRep": { - "type": "dword", - "value": 48 - } - }, - { - "__struct_id": 327, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 9 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 328, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 10 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, - { - "__struct_id": 329, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 11 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 330, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 12 - }, - "FactionRep": { - "type": "dword", - "value": 16 - } - }, - { - "__struct_id": 331, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 13 - }, - "FactionRep": { - "type": "dword", - "value": 40 - } - }, - { - "__struct_id": 332, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 14 - }, - "FactionRep": { - "type": "dword", - "value": 63 - } - }, - { - "__struct_id": 333, - "FactionID1": { - "type": "dword", - "value": 16 - }, - "FactionID2": { - "type": "dword", - "value": 15 - }, - "FactionRep": { - "type": "dword", - "value": 50 - } - }, { "__struct_id": 334, "FactionID1": { "type": "dword", - "value": 16 + "value": 15 }, "FactionID2": { "type": "dword", - "value": 16 + "value": 20 }, "FactionRep": { "type": "dword", - "value": 100 + "value": 0 } }, { @@ -5341,11 +5356,11 @@ }, "FactionID2": { "type": "dword", - "value": 17 + "value": 0 }, "FactionRep": { "type": "dword", - "value": 51 + "value": 100 } }, { @@ -5356,7 +5371,7 @@ }, "FactionID2": { "type": "dword", - "value": 18 + "value": 1 }, "FactionRep": { "type": "dword", @@ -5371,7 +5386,7 @@ }, "FactionID2": { "type": "dword", - "value": 19 + "value": 2 }, "FactionRep": { "type": "dword", @@ -5380,6 +5395,276 @@ }, { "__struct_id": 338, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 339, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 340, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 341, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 342, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 343, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 344, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 345, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 346, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 347, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 16 + } + }, + { + "__struct_id": 348, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 40 + } + }, + { + "__struct_id": 349, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 63 + } + }, + { + "__struct_id": 350, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 351, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 352, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 353, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 18 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 354, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 19 + }, + "FactionRep": { + "type": "dword", + "value": 51 + } + }, + { + "__struct_id": 355, + "FactionID1": { + "type": "dword", + "value": 16 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 356, "FactionID1": { "type": "dword", "value": 17 @@ -5394,7 +5679,7 @@ } }, { - "__struct_id": 339, + "__struct_id": 357, "FactionID1": { "type": "dword", "value": 17 @@ -5409,7 +5694,7 @@ } }, { - "__struct_id": 340, + "__struct_id": 358, "FactionID1": { "type": "dword", "value": 17 @@ -5424,7 +5709,7 @@ } }, { - "__struct_id": 341, + "__struct_id": 359, "FactionID1": { "type": "dword", "value": 17 @@ -5439,7 +5724,7 @@ } }, { - "__struct_id": 342, + "__struct_id": 360, "FactionID1": { "type": "dword", "value": 17 @@ -5454,7 +5739,7 @@ } }, { - "__struct_id": 343, + "__struct_id": 361, "FactionID1": { "type": "dword", "value": 17 @@ -5469,7 +5754,7 @@ } }, { - "__struct_id": 344, + "__struct_id": 362, "FactionID1": { "type": "dword", "value": 17 @@ -5484,7 +5769,7 @@ } }, { - "__struct_id": 345, + "__struct_id": 363, "FactionID1": { "type": "dword", "value": 17 @@ -5499,7 +5784,7 @@ } }, { - "__struct_id": 346, + "__struct_id": 364, "FactionID1": { "type": "dword", "value": 17 @@ -5514,7 +5799,7 @@ } }, { - "__struct_id": 347, + "__struct_id": 365, "FactionID1": { "type": "dword", "value": 17 @@ -5529,7 +5814,7 @@ } }, { - "__struct_id": 348, + "__struct_id": 366, "FactionID1": { "type": "dword", "value": 17 @@ -5544,7 +5829,7 @@ } }, { - "__struct_id": 349, + "__struct_id": 367, "FactionID1": { "type": "dword", "value": 17 @@ -5559,7 +5844,7 @@ } }, { - "__struct_id": 350, + "__struct_id": 368, "FactionID1": { "type": "dword", "value": 17 @@ -5574,7 +5859,7 @@ } }, { - "__struct_id": 351, + "__struct_id": 369, "FactionID1": { "type": "dword", "value": 17 @@ -5589,7 +5874,7 @@ } }, { - "__struct_id": 352, + "__struct_id": 370, "FactionID1": { "type": "dword", "value": 17 @@ -5604,7 +5889,7 @@ } }, { - "__struct_id": 353, + "__struct_id": 371, "FactionID1": { "type": "dword", "value": 17 @@ -5619,7 +5904,7 @@ } }, { - "__struct_id": 354, + "__struct_id": 372, "FactionID1": { "type": "dword", "value": 17 @@ -5634,7 +5919,7 @@ } }, { - "__struct_id": 355, + "__struct_id": 373, "FactionID1": { "type": "dword", "value": 17 @@ -5649,7 +5934,7 @@ } }, { - "__struct_id": 356, + "__struct_id": 374, "FactionID1": { "type": "dword", "value": 17 @@ -5664,7 +5949,7 @@ } }, { - "__struct_id": 357, + "__struct_id": 375, "FactionID1": { "type": "dword", "value": 17 @@ -5679,7 +5964,22 @@ } }, { - "__struct_id": 358, + "__struct_id": 376, + "FactionID1": { + "type": "dword", + "value": 17 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 52 + } + }, + { + "__struct_id": 377, "FactionID1": { "type": "dword", "value": 18 @@ -5694,7 +5994,7 @@ } }, { - "__struct_id": 359, + "__struct_id": 378, "FactionID1": { "type": "dword", "value": 18 @@ -5709,7 +6009,7 @@ } }, { - "__struct_id": 360, + "__struct_id": 379, "FactionID1": { "type": "dword", "value": 18 @@ -5724,7 +6024,7 @@ } }, { - "__struct_id": 361, + "__struct_id": 380, "FactionID1": { "type": "dword", "value": 18 @@ -5739,7 +6039,7 @@ } }, { - "__struct_id": 362, + "__struct_id": 381, "FactionID1": { "type": "dword", "value": 18 @@ -5754,7 +6054,7 @@ } }, { - "__struct_id": 363, + "__struct_id": 382, "FactionID1": { "type": "dword", "value": 18 @@ -5769,7 +6069,7 @@ } }, { - "__struct_id": 364, + "__struct_id": 383, "FactionID1": { "type": "dword", "value": 18 @@ -5784,7 +6084,7 @@ } }, { - "__struct_id": 365, + "__struct_id": 384, "FactionID1": { "type": "dword", "value": 18 @@ -5799,7 +6099,7 @@ } }, { - "__struct_id": 366, + "__struct_id": 385, "FactionID1": { "type": "dword", "value": 18 @@ -5814,7 +6114,7 @@ } }, { - "__struct_id": 367, + "__struct_id": 386, "FactionID1": { "type": "dword", "value": 18 @@ -5829,7 +6129,7 @@ } }, { - "__struct_id": 368, + "__struct_id": 387, "FactionID1": { "type": "dword", "value": 18 @@ -5844,7 +6144,7 @@ } }, { - "__struct_id": 369, + "__struct_id": 388, "FactionID1": { "type": "dword", "value": 18 @@ -5859,7 +6159,7 @@ } }, { - "__struct_id": 370, + "__struct_id": 389, "FactionID1": { "type": "dword", "value": 18 @@ -5874,7 +6174,7 @@ } }, { - "__struct_id": 371, + "__struct_id": 390, "FactionID1": { "type": "dword", "value": 18 @@ -5889,7 +6189,7 @@ } }, { - "__struct_id": 372, + "__struct_id": 391, "FactionID1": { "type": "dword", "value": 18 @@ -5904,7 +6204,7 @@ } }, { - "__struct_id": 373, + "__struct_id": 392, "FactionID1": { "type": "dword", "value": 18 @@ -5919,7 +6219,7 @@ } }, { - "__struct_id": 374, + "__struct_id": 393, "FactionID1": { "type": "dword", "value": 18 @@ -5934,7 +6234,7 @@ } }, { - "__struct_id": 375, + "__struct_id": 394, "FactionID1": { "type": "dword", "value": 18 @@ -5949,7 +6249,7 @@ } }, { - "__struct_id": 376, + "__struct_id": 395, "FactionID1": { "type": "dword", "value": 18 @@ -5964,7 +6264,7 @@ } }, { - "__struct_id": 377, + "__struct_id": 396, "FactionID1": { "type": "dword", "value": 18 @@ -5975,11 +6275,26 @@ }, "FactionRep": { "type": "dword", - "value": 43 + "value": 10 } }, { - "__struct_id": 378, + "__struct_id": 397, + "FactionID1": { + "type": "dword", + "value": 18 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 10 + } + }, + { + "__struct_id": 398, "FactionID1": { "type": "dword", "value": 19 @@ -5994,7 +6309,7 @@ } }, { - "__struct_id": 379, + "__struct_id": 399, "FactionID1": { "type": "dword", "value": 19 @@ -6009,7 +6324,7 @@ } }, { - "__struct_id": 380, + "__struct_id": 400, "FactionID1": { "type": "dword", "value": 19 @@ -6024,7 +6339,7 @@ } }, { - "__struct_id": 381, + "__struct_id": 401, "FactionID1": { "type": "dword", "value": 19 @@ -6039,7 +6354,7 @@ } }, { - "__struct_id": 382, + "__struct_id": 402, "FactionID1": { "type": "dword", "value": 19 @@ -6054,7 +6369,7 @@ } }, { - "__struct_id": 383, + "__struct_id": 403, "FactionID1": { "type": "dword", "value": 19 @@ -6069,7 +6384,7 @@ } }, { - "__struct_id": 384, + "__struct_id": 404, "FactionID1": { "type": "dword", "value": 19 @@ -6084,7 +6399,7 @@ } }, { - "__struct_id": 385, + "__struct_id": 405, "FactionID1": { "type": "dword", "value": 19 @@ -6099,7 +6414,7 @@ } }, { - "__struct_id": 386, + "__struct_id": 406, "FactionID1": { "type": "dword", "value": 19 @@ -6114,7 +6429,7 @@ } }, { - "__struct_id": 387, + "__struct_id": 407, "FactionID1": { "type": "dword", "value": 19 @@ -6129,7 +6444,7 @@ } }, { - "__struct_id": 388, + "__struct_id": 408, "FactionID1": { "type": "dword", "value": 19 @@ -6144,7 +6459,7 @@ } }, { - "__struct_id": 389, + "__struct_id": 409, "FactionID1": { "type": "dword", "value": 19 @@ -6159,7 +6474,7 @@ } }, { - "__struct_id": 390, + "__struct_id": 410, "FactionID1": { "type": "dword", "value": 19 @@ -6174,7 +6489,7 @@ } }, { - "__struct_id": 391, + "__struct_id": 411, "FactionID1": { "type": "dword", "value": 19 @@ -6189,7 +6504,7 @@ } }, { - "__struct_id": 392, + "__struct_id": 412, "FactionID1": { "type": "dword", "value": 19 @@ -6204,7 +6519,7 @@ } }, { - "__struct_id": 393, + "__struct_id": 413, "FactionID1": { "type": "dword", "value": 19 @@ -6219,7 +6534,7 @@ } }, { - "__struct_id": 394, + "__struct_id": 414, "FactionID1": { "type": "dword", "value": 19 @@ -6234,7 +6549,7 @@ } }, { - "__struct_id": 395, + "__struct_id": 415, "FactionID1": { "type": "dword", "value": 19 @@ -6249,7 +6564,7 @@ } }, { - "__struct_id": 396, + "__struct_id": 416, "FactionID1": { "type": "dword", "value": 19 @@ -6264,7 +6579,7 @@ } }, { - "__struct_id": 397, + "__struct_id": 417, "FactionID1": { "type": "dword", "value": 19 @@ -6277,6 +6592,336 @@ "type": "dword", "value": 100 } + }, + { + "__struct_id": 418, + "FactionID1": { + "type": "dword", + "value": 19 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 419, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 0 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 420, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 421, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 422, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 423, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 424, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 5 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 425, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 6 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 426, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 7 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 427, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 8 + }, + "FactionRep": { + "type": "dword", + "value": 45 + } + }, + { + "__struct_id": 428, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 9 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 429, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 10 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 430, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 11 + }, + "FactionRep": { + "type": "dword", + "value": 31 + } + }, + { + "__struct_id": 431, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 12 + }, + "FactionRep": { + "type": "dword", + "value": 48 + } + }, + { + "__struct_id": 432, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 13 + }, + "FactionRep": { + "type": "dword", + "value": 60 + } + }, + { + "__struct_id": 433, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 14 + }, + "FactionRep": { + "type": "dword", + "value": 44 + } + }, + { + "__struct_id": 434, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 15 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 435, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 16 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 436, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 17 + }, + "FactionRep": { + "type": "dword", + "value": 23 + } + }, + { + "__struct_id": 437, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 18 + }, + "FactionRep": { + "type": "dword", + "value": 43 + } + }, + { + "__struct_id": 438, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 19 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 439, + "FactionID1": { + "type": "dword", + "value": 20 + }, + "FactionID2": { + "type": "dword", + "value": 20 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } } ] } diff --git a/_module/gic/foh_druids_grove.gic.json b/_module/gic/foh_druids_grove.gic.json new file mode 100644 index 00000000..8811bfbb --- /dev/null +++ b/_module/gic/foh_druids_grove.gic.json @@ -0,0 +1,1911 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Lightshafts with pwk by Demigog" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Pak by Schazzwozzer" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Flower Pack by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Flower Pack by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Water v1.1 by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "Druid's Grove to Forest of Hope: Central" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + } + ] + } +} diff --git a/_module/gic/forestofhopecent.gic.json b/_module/gic/forestofhopecent.gic.json index db4da83d..fcb475e9 100644 --- a/_module/gic/forestofhopecent.gic.json +++ b/_module/gic/forestofhopecent.gic.json @@ -2,337 +2,7 @@ "__data_type": "GIC ", "Creature List": { "type": "list", - "value": [ - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Wolf\r\n\r\nMonster Manual I, pg. 283\r\n\r\nKnockdown = Trip\r\n\r\n" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "" - } - }, - { - "__struct_id": 4, - "Comment": { - "type": "cexostring", - "value": "Drusilla the Druid" - } - } - ] + "value": [] }, "Door List": { "type": "list", @@ -537,6 +207,13 @@ "type": "cexostring", "value": "" } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "Forest of Hope: Central to Druid's Grove" + } } ] }, @@ -570,6 +247,55 @@ "type": "cexostring", "value": "Spawn 6 - 8 Giant spiders." } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is the default waypoint you may place to set a patrol path for a creature or NPC.\r\n1. Create the creature and either use its current Tag or fill in a new one.\r\n2. Place or make sure the WalkWayPoints() is within the body of the On Spawn script for the creature.\r\n3. Place a series of waypoints along the route you wish the creature to walk.\r\n4. Select all of the newly created waypoints and right click. Choose the Create Set option.\r\n5. The waypoint set will have a set name of \"WP_\" + NPC Tag. Thus if an NPC with the Tag \"Guard\" will have a waypoint set called \"WP_Guard\". Note that Tags are case sensitive." + } } ] } diff --git a/_module/gic/grove_drusilla.gic.json b/_module/gic/grove_drusilla.gic.json new file mode 100644 index 00000000..7ea730a5 --- /dev/null +++ b/_module/gic/grove_drusilla.gic.json @@ -0,0 +1,761 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Megalith Placeables v1.0 by Mr._X & Chanteur" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Lightshafts with pwk by Demigog" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Doom of Daggerdale v1.1 (Rar)\r\nby Ice-Child & Suedomsa" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: WaterFallsRus by NekidFrog\r\nUsage note: This placeable has to be placed aboe ground level by putting it on top of something else or manually changing the Z axis location or else the waterfall will be under ground." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: DK Furniture Plus by Nethy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, too many of these fog placeables will slow the module to a crawl." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog placeables will slow the module to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Lief's Fog by Lief\r\nUse caution, these fog effects will slow the module down to a crawl if too many are used." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Placeable Pak by Schazzwozzer" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Torture, Taxidermy, and High Tea by Gnomad" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Flower Pack by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Flower Pack by Adam Miller" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Fireflies v1.00 by Dobervich" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Source: Tir Na Og Tree Pack 1 v2.01 By Martin E" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/_module/git/adventurers_inn.git.json b/_module/git/adventurers_inn.git.json index 3791757d..ef95615a 100644 --- a/_module/git/adventurers_inn.git.json +++ b/_module/git/adventurers_inn.git.json @@ -3187,7 +3187,7 @@ }, "XPosition": { "type": "float", - "value": 13.96846866607666 + "value": 14.53413391113281 }, "YOrientation": { "type": "float", @@ -3195,11 +3195,11 @@ }, "YPosition": { "type": "float", - "value": 12.74725914001465 + "value": 12.83390331268311 }, "ZPosition": { "type": "float", - "value": 1.9073486328125e-006 + "value": -5.7220458984375e-006 } }, { @@ -9683,7 +9683,7 @@ }, "XPosition": { "type": "float", - "value": 13.4893045425415 + "value": 14.20474147796631 }, "YOrientation": { "type": "float", @@ -9691,7 +9691,7 @@ }, "YPosition": { "type": "float", - "value": 14.48454475402832 + "value": 13.93657684326172 }, "ZPosition": { "type": "float", diff --git a/_module/git/foh_druids_grove.git.json b/_module/git/foh_druids_grove.git.json new file mode 100644 index 00000000..cdd37148 --- /dev/null +++ b/_module/git/foh_druids_grove.git.json @@ -0,0 +1,59332 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 51 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 53 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 15 + }, + "MusicBattle": { + "type": "int", + "value": 36 + }, + "MusicDay": { + "type": "int", + "value": 5 + }, + "MusicDelay": { + "type": "int", + "value": 45000 + }, + "MusicNight": { + "type": "int", + "value": 6 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1831 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 9.272305874219455e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812850, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.13309478759766 + }, + "Y": { + "type": "float", + "value": 68.85874176025391 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1831 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812850, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.37315368652344 + }, + "Y": { + "type": "float", + "value": 72.76129913330078 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1834 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812966, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.92372894287109 + }, + "Y": { + "type": "float", + "value": 70.87955474853516 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1828 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812862, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES004" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones004" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.32196807861328 + }, + "Y": { + "type": "float", + "value": 70.71178436279297 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1841 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 9.272305874219455e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812954, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.85948181152344 + }, + "Y": { + "type": "float", + "value": 67.48963928222656 + }, + "Z": { + "type": "float", + "value": 0.002676010131835938 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1841 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141591548919678 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812954, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.43277740478516 + }, + "Y": { + "type": "float", + "value": 73.98637390136719 + }, + "Z": { + "type": "float", + "value": 0.1555212736129761 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1840 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 150 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": { + "0": "This stone seems to almost vibrate with ancient power." + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 20 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 15 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 150 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812942, + "type": "cexolocstring", + "value": { + "0": "Stone Altar Flat" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "StoneAltarFlat" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones019" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.54621505737305 + }, + "Y": { + "type": "float", + "value": 70.79367828369141 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1955 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810939, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811228, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 460 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BOWL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bowl002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.59723663330078 + }, + "Y": { + "type": "float", + "value": 70.89743804931641 + }, + "Z": { + "type": "float", + "value": 0.4467196762561798 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2345 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810848, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811176, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 516 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_LIGHTSHFT001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_lightshft001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.44284820556641 + }, + "Y": { + "type": "float", + "value": 70.8294677734375 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097367286682 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 32.59237670898438 + }, + "Y": { + "type": "float", + "value": 92.54206848144531 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 69.46888732910156 + }, + "Y": { + "type": "float", + "value": 119.2468643188477 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 116.9492416381836 + }, + "Y": { + "type": "float", + "value": 106.4510192871094 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 109.6788024902344 + }, + "Y": { + "type": "float", + "value": 80.55314636230469 + }, + "Z": { + "type": "float", + "value": 0.001944780349731445 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097367286682 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 115.6337890625 + }, + "Y": { + "type": "float", + "value": 22.73822021484375 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 64.05641937255859 + }, + "Y": { + "type": "float", + "value": 14.50412750244141 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 69.57715606689453 + }, + "Y": { + "type": "float", + "value": 27.85938262939453 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 26.5379638671875 + }, + "Y": { + "type": "float", + "value": 59.38578033447266 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.17961883544922 + }, + "Y": { + "type": "float", + "value": 99.81539154052734 + }, + "Z": { + "type": "float", + "value": -1.788139343261719e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 76.53958129882813 + }, + "Y": { + "type": "float", + "value": 111.4720458984375 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 108.8817672729492 + }, + "Y": { + "type": "float", + "value": 131.9441070556641 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 129.8307952880859 + }, + "Y": { + "type": "float", + "value": 85.95614624023438 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 118.6031188964844 + }, + "Y": { + "type": "float", + "value": 34.91457366943359 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.24573516845703 + }, + "Y": { + "type": "float", + "value": 39.64768218994141 + }, + "Z": { + "type": "float", + "value": 0.02536725997924805 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 60.74983215332031 + }, + "Y": { + "type": "float", + "value": 58.11038589477539 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.78131103515625 + }, + "Y": { + "type": "float", + "value": 64.6944580078125 + }, + "Z": { + "type": "float", + "value": -1.60989260673523 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592264175415 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 14.77997589111328 + }, + "Y": { + "type": "float", + "value": 74.85687255859375 + }, + "Z": { + "type": "float", + "value": 5.453737258911133 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.54084014892578 + }, + "Y": { + "type": "float", + "value": 64.51106262207031 + }, + "Z": { + "type": "float", + "value": 5.624631881713867 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.79233551025391 + }, + "Y": { + "type": "float", + "value": 154.6021423339844 + }, + "Z": { + "type": "float", + "value": 7.859816074371338 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.90602111816406 + }, + "Y": { + "type": "float", + "value": 155.2037048339844 + }, + "Z": { + "type": "float", + "value": 11.47466468811035 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 105.3330307006836 + }, + "Y": { + "type": "float", + "value": 154.9012908935547 + }, + "Z": { + "type": "float", + "value": 10.86988830566406 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 94.76730346679688 + }, + "Y": { + "type": "float", + "value": 154.8044891357422 + }, + "Z": { + "type": "float", + "value": 10.16152858734131 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 125.7437133789063 + }, + "Y": { + "type": "float", + "value": 58.43230056762695 + }, + "Z": { + "type": "float", + "value": -2.391586780548096 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 115.6290512084961 + }, + "Y": { + "type": "float", + "value": 45.24642944335938 + }, + "Z": { + "type": "float", + "value": -1.677123785018921 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 134.1953887939453 + }, + "Y": { + "type": "float", + "value": 34.10293579101563 + }, + "Z": { + "type": "float", + "value": 1.608587503433228 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 94.9112548828125 + }, + "Y": { + "type": "float", + "value": 5.395675659179688 + }, + "Z": { + "type": "float", + "value": 7.832812786102295 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 84.59806823730469 + }, + "Y": { + "type": "float", + "value": 5.416526794433594 + }, + "Z": { + "type": "float", + "value": 7.405479431152344 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.37226867675781 + }, + "Y": { + "type": "float", + "value": 8.352447509765625 + }, + "Z": { + "type": "float", + "value": -2.335284233093262 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.96913146972656 + }, + "Y": { + "type": "float", + "value": 26.15653610229492 + }, + "Z": { + "type": "float", + "value": -1.667195320129395 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.72420501708984 + }, + "Y": { + "type": "float", + "value": 45.25503921508789 + }, + "Z": { + "type": "float", + "value": -2.572461605072022 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.06874847412109 + }, + "Y": { + "type": "float", + "value": 51.87382507324219 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.17350769042969 + }, + "Y": { + "type": "float", + "value": 78.62605285644531 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.45815277099609 + }, + "Y": { + "type": "float", + "value": 63.99761199951172 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 106.0207061767578 + }, + "Y": { + "type": "float", + "value": 76.07218170166016 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 104.7234191894531 + }, + "Y": { + "type": "float", + "value": 117.9189758300781 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 80.78050231933594 + }, + "Y": { + "type": "float", + "value": 150.0630798339844 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.05708312988281 + }, + "Y": { + "type": "float", + "value": 135.6133422851563 + }, + "Z": { + "type": "float", + "value": 1.000828862190247 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.15869903564453 + }, + "Y": { + "type": "float", + "value": 99.93332672119141 + }, + "Z": { + "type": "float", + "value": 0.3229023218154907 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1584 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.589049220085144 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811864, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOOT002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_foot002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 56.12561798095703 + }, + "Y": { + "type": "float", + "value": 97.9547119140625 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1589 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097367286682 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811792, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIST003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fist003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 78.89932250976563 + }, + "Y": { + "type": "float", + "value": 101.9193344116211 + }, + "Z": { + "type": "float", + "value": 0.07925796508789063 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1588 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812004, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 120.6299591064453 + }, + "Y": { + "type": "float", + "value": 28.24735260009766 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1590 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812010, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 108.9690704345703 + }, + "Y": { + "type": "float", + "value": 10.04129028320313 + }, + "Z": { + "type": "float", + "value": -2.905726432800293e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1582 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.589049220085144 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812036, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2591 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HEAD003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_head003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.694091796875 + }, + "Y": { + "type": "float", + "value": 8.492706298828125 + }, + "Z": { + "type": "float", + "value": 0.009999968111515045 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1584 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3926989734172821 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811864, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOOT002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_foot002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 9.031265258789063 + }, + "Y": { + "type": "float", + "value": 30.66965484619141 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1588 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812004, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.66815185546875 + }, + "Y": { + "type": "float", + "value": 10.00296020507813 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.21395874023438 + }, + "Y": { + "type": "float", + "value": 114.8327865600586 + }, + "Z": { + "type": "float", + "value": 1.620000243186951 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.2825927734375 + }, + "Y": { + "type": "float", + "value": 108.5869064331055 + }, + "Z": { + "type": "float", + "value": 1.054024577140808 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.3636474609375 + }, + "Y": { + "type": "float", + "value": 130.5841064453125 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.58017730712891 + }, + "Y": { + "type": "float", + "value": 146.7866363525391 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 61.89000701904297 + }, + "Y": { + "type": "float", + "value": 76.02133941650391 + }, + "Z": { + "type": "float", + "value": 0.03741268813610077 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 89.53776550292969 + }, + "Y": { + "type": "float", + "value": 99.60224151611328 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 112.0391464233398 + }, + "Y": { + "type": "float", + "value": 62.51276397705078 + }, + "Z": { + "type": "float", + "value": -3.576278686523438e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 86.96409606933594 + }, + "Y": { + "type": "float", + "value": 37.97270965576172 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 79.41647338867188 + }, + "Y": { + "type": "float", + "value": 6.744842529296875 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.75856781005859 + }, + "Y": { + "type": "float", + "value": 20.28135681152344 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 60.55265808105469 + }, + "Y": { + "type": "float", + "value": 23.05841827392578 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.56369781494141 + }, + "Y": { + "type": "float", + "value": 46.01345825195313 + }, + "Z": { + "type": "float", + "value": 0.5594351887702942 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.34817504882813 + }, + "Y": { + "type": "float", + "value": 12.83827972412109 + }, + "Z": { + "type": "float", + "value": 0.1669089496135712 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2341 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16813606, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812252, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 445 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_LOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_log001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 98.47892761230469 + }, + "Y": { + "type": "float", + "value": 19.94855499267578 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.87122344970703 + }, + "Y": { + "type": "float", + "value": 83.18875885009766 + }, + "Z": { + "type": "float", + "value": 0.06186223775148392 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 47.85347747802734 + }, + "Y": { + "type": "float", + "value": 90.97149658203125 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1776 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813703, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812740, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB042" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub042" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 59.06040191650391 + }, + "Y": { + "type": "float", + "value": 90.414306640625 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.95479583740234 + }, + "Y": { + "type": "float", + "value": 75.08300018310547 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1776 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813703, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812740, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB042" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub042" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 48.46141815185547 + }, + "Y": { + "type": "float", + "value": 63.18656921386719 + }, + "Z": { + "type": "float", + "value": 0.08081400394439697 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.64839935302734 + }, + "Y": { + "type": "float", + "value": 11.61887359619141 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 68.22164154052734 + }, + "Y": { + "type": "float", + "value": 15.24089050292969 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592025756836 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.10536956787109 + }, + "Y": { + "type": "float", + "value": 17.28645324707031 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 73.94670104980469 + }, + "Y": { + "type": "float", + "value": 37.8682746887207 + }, + "Z": { + "type": "float", + "value": 0.08755016326904297 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 94.770263671875 + }, + "Y": { + "type": "float", + "value": 58.84845352172852 + }, + "Z": { + "type": "float", + "value": 0.09953927248716354 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 119.0875473022461 + }, + "Y": { + "type": "float", + "value": 86.6180419921875 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 128.8426055908203 + }, + "Y": { + "type": "float", + "value": 89.5936279296875 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097367286682 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 101.0318450927734 + }, + "Y": { + "type": "float", + "value": 118.3187866210938 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890486836433411 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 89.62084197998047 + }, + "Y": { + "type": "float", + "value": 120.8291473388672 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1751 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813264, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE016" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree016" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 103.2240295410156 + }, + "Y": { + "type": "float", + "value": 120.2086791992188 + }, + "Z": { + "type": "float", + "value": 0.02685247361660004 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1754 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813262, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE019" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree019" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 94.15411376953125 + }, + "Y": { + "type": "float", + "value": 133.244140625 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1752 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890486836433411 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813250, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 69.02076721191406 + }, + "Y": { + "type": "float", + "value": 143.2871704101563 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3079 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814217, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814114, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREANTTREE" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treanttree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 61.76481628417969 + }, + "Y": { + "type": "float", + "value": 131.3065185546875 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1771 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813288, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE030" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree030" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.5855712890625 + }, + "Y": { + "type": "float", + "value": 117.2073745727539 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1737 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.1963492631912231 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813234, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.8465576171875 + }, + "Y": { + "type": "float", + "value": 101.6394653320313 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1737 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097367286682 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813234, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 48.46135711669922 + }, + "Y": { + "type": "float", + "value": 74.87053680419922 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890486836433411 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.29517364501953 + }, + "Y": { + "type": "float", + "value": 68.38870239257813 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.24916076660156 + }, + "Y": { + "type": "float", + "value": 80.55895233154297 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.14324188232422 + }, + "Y": { + "type": "float", + "value": 76.78556823730469 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1808 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813817, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811832, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FLOWERS006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_flowers006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.13865661621094 + }, + "Y": { + "type": "float", + "value": 131.2801361083984 + }, + "Z": { + "type": "float", + "value": -2.980232238769531e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1808 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813817, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811832, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FLOWERS006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_flowers006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 71.01436614990234 + }, + "Y": { + "type": "float", + "value": 140.2027435302734 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 68.08645629882813 + }, + "Y": { + "type": "float", + "value": 140.3957214355469 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3364 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Chrysanthemum" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2717 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 78.09770202636719 + }, + "Y": { + "type": "float", + "value": 134.9176330566406 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3360 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Lily" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2713 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_005" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_005" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 90.64112854003906 + }, + "Y": { + "type": "float", + "value": 132.4945526123047 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3366 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Carnation Pink" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2719 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 107.4572296142578 + }, + "Y": { + "type": "float", + "value": 95.06739807128906 + }, + "Z": { + "type": "float", + "value": 0.8592840433120728 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3366 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890486836433411 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Carnation Pink" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2719 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 92.83936309814453 + }, + "Y": { + "type": "float", + "value": 57.20362091064453 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890486836433411 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 127.5976409912109 + }, + "Y": { + "type": "float", + "value": 49.25080871582031 + }, + "Z": { + "type": "float", + "value": 0.02247655391693115 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 112.0168533325195 + }, + "Y": { + "type": "float", + "value": 26.05330657958984 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 108.3863983154297 + }, + "Y": { + "type": "float", + "value": 24.42771911621094 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1741 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813244, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE012" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree012" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 73.50066375732422 + }, + "Y": { + "type": "float", + "value": 55.23911666870117 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570798873901367 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 42.56999969482422 + }, + "Y": { + "type": "float", + "value": 145.8000030517578 + }, + "Z": { + "type": "float", + "value": -5.210000038146973 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.65000152587891 + }, + "Y": { + "type": "float", + "value": 105.8399963378906 + }, + "Z": { + "type": "float", + "value": -5.210000038146973 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 107.9400024414063 + }, + "Y": { + "type": "float", + "value": 61.20999908447266 + }, + "Z": { + "type": "float", + "value": -5.210000038146973 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 68.25 + }, + "Y": { + "type": "float", + "value": 58.0 + }, + "Z": { + "type": "float", + "value": -5.210000038146973 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 106.0 + }, + "Y": { + "type": "float", + "value": 101.0 + }, + "Z": { + "type": "float", + "value": -5.210000038146973 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2231 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813476, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 78.99330902099609 + }, + "Y": { + "type": "float", + "value": 89.13869476318359 + }, + "Z": { + "type": "float", + "value": -6.000001907348633 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.441741943359375 + }, + "Y": { + "type": "float", + "value": 42.24382019042969 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.748893737792969 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.084136962890625 + }, + "Y": { + "type": "float", + "value": 46.96220397949219 + }, + "Z": { + "type": "float", + "value": -4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.1963492631912231 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.69952392578125 + }, + "Y": { + "type": "float", + "value": 51.43551635742188 + }, + "Z": { + "type": "float", + "value": 0.009999949485063553 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890482664108276 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.509689331054688 + }, + "Y": { + "type": "float", + "value": 55.51384735107422 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.738479614257813 + }, + "Y": { + "type": "float", + "value": 59.90997314453125 + }, + "Z": { + "type": "float", + "value": 2.980232238769531e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.685873627366163e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.342254638671875 + }, + "Y": { + "type": "float", + "value": 64.96835327148438 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890482664108276 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.127593994140625 + }, + "Y": { + "type": "float", + "value": 69.64793395996094 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.552543640136719 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.673843383789063 + }, + "Y": { + "type": "float", + "value": 74.30035400390625 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.64813232421875 + }, + "Y": { + "type": "float", + "value": 78.54457855224609 + }, + "Z": { + "type": "float", + "value": 0.3338327407836914 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926987648010254 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.244720458984375 + }, + "Y": { + "type": "float", + "value": 83.81996154785156 + }, + "Z": { + "type": "float", + "value": 0.212543249130249 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.356194496154785 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.322341918945313 + }, + "Y": { + "type": "float", + "value": 88.5499267578125 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.1963498443365097 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.106674194335938 + }, + "Y": { + "type": "float", + "value": 92.79129791259766 + }, + "Z": { + "type": "float", + "value": 0.1430884599685669 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.570796847343445 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.779037475585938 + }, + "Y": { + "type": "float", + "value": 97.63681030273438 + }, + "Z": { + "type": "float", + "value": 0.1182399988174439 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.159845113754273 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.298049926757813 + }, + "Y": { + "type": "float", + "value": 102.1681594848633 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.1963492631912231 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.21551513671875 + }, + "Y": { + "type": "float", + "value": 106.6992034912109 + }, + "Z": { + "type": "float", + "value": 0.4710814952850342 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.685873627366163e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.173065185546875 + }, + "Y": { + "type": "float", + "value": 113.1817169189453 + }, + "Z": { + "type": "float", + "value": 0.08783614635467529 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.475418090820313 + }, + "Y": { + "type": "float", + "value": 111.6710891723633 + }, + "Z": { + "type": "float", + "value": 0.5220588445663452 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.552544116973877 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.733901977539063 + }, + "Y": { + "type": "float", + "value": 118.463737487793 + }, + "Z": { + "type": "float", + "value": 0.01808285713195801 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.945243120193481 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.6033935546875 + }, + "Y": { + "type": "float", + "value": 122.5972900390625 + }, + "Z": { + "type": "float", + "value": 0.009999962523579598 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890482664108276 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.58685302734375 + }, + "Y": { + "type": "float", + "value": 127.6001281738281 + }, + "Z": { + "type": "float", + "value": 0.05786585807800293 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.159845113754273 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.843521118164063 + }, + "Y": { + "type": "float", + "value": 131.9918212890625 + }, + "Z": { + "type": "float", + "value": 0.01821928657591343 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.178096652030945 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.549209594726563 + }, + "Y": { + "type": "float", + "value": 136.1537475585938 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3926989734172821 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.925079345703125 + }, + "Y": { + "type": "float", + "value": 140.5546112060547 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.114303588867188 + }, + "Y": { + "type": "float", + "value": 144.5777893066406 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.570796847343445 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.621368408203125 + }, + "Y": { + "type": "float", + "value": 147.9460144042969 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.963495254516602 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.477752685546875 + }, + "Y": { + "type": "float", + "value": 151.9071044921875 + }, + "Z": { + "type": "float", + "value": 0.03814196586608887 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.351959228515625 + }, + "Y": { + "type": "float", + "value": 156.1754608154297 + }, + "Z": { + "type": "float", + "value": 0.0749199390411377 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.1963492631912231 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.790878295898438 + }, + "Y": { + "type": "float", + "value": 159.513671875 + }, + "Z": { + "type": "float", + "value": -2.980232238769531e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.685873627366163e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.397857666015625 + }, + "Y": { + "type": "float", + "value": 159.6147003173828 + }, + "Z": { + "type": "float", + "value": 0.0578950047492981 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.68838500976563 + }, + "Y": { + "type": "float", + "value": 158.8993225097656 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.91265869140625 + }, + "Y": { + "type": "float", + "value": 158.5953063964844 + }, + "Z": { + "type": "float", + "value": 0.6532609462738037 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 120.1894226074219 + }, + "Y": { + "type": "float", + "value": 158.8839874267578 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 122.3823623657227 + }, + "Y": { + "type": "float", + "value": 154.6869049072266 + }, + "Z": { + "type": "float", + "value": 4.840218544006348 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 127.3310699462891 + }, + "Y": { + "type": "float", + "value": 159.3480072021484 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 123.5193786621094 + }, + "Y": { + "type": "float", + "value": 145.1924591064453 + }, + "Z": { + "type": "float", + "value": 16.20790100097656 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 135.7042388916016 + }, + "Y": { + "type": "float", + "value": 158.9239807128906 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 136.41015625 + }, + "Y": { + "type": "float", + "value": 156.0051116943359 + }, + "Z": { + "type": "float", + "value": 2.584767580032349 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 134.0360260009766 + }, + "Y": { + "type": "float", + "value": 146.8079681396484 + }, + "Z": { + "type": "float", + "value": 9.961889266967773 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.178096652030945 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.3899230957031 + }, + "Y": { + "type": "float", + "value": 150.1932067871094 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.374446511268616 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.4148254394531 + }, + "Y": { + "type": "float", + "value": 153.6434326171875 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.374446630477905 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.3332672119141 + }, + "Y": { + "type": "float", + "value": 146.9728240966797 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.6428833007813 + }, + "Y": { + "type": "float", + "value": 143.3897399902344 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.4170837402344 + }, + "Y": { + "type": "float", + "value": 139.6728057861328 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097248077393 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.4653015136719 + }, + "Y": { + "type": "float", + "value": 136.1937866210938 + }, + "Z": { + "type": "float", + "value": 1.9073486328125e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.3798828125 + }, + "Y": { + "type": "float", + "value": 132.3926849365234 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.178097248077393 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.2249755859375 + }, + "Y": { + "type": "float", + "value": 128.6524963378906 + }, + "Z": { + "type": "float", + "value": -3.814697265625e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890487432479858 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 139.3746337890625 + }, + "Y": { + "type": "float", + "value": 125.3404769897461 + }, + "Z": { + "type": "float", + "value": -3.814697265625e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.767145752906799 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.9730529785156 + }, + "Y": { + "type": "float", + "value": 120.8406295776367 + }, + "Z": { + "type": "float", + "value": 1.9073486328125e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.74889349937439 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.6803741455078 + }, + "Y": { + "type": "float", + "value": 117.2299728393555 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.4072570800781 + }, + "Y": { + "type": "float", + "value": 113.5083847045898 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.3111572265625 + }, + "Y": { + "type": "float", + "value": 109.4589080810547 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.2341613769531 + }, + "Y": { + "type": "float", + "value": 105.3024063110352 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3926989734172821 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.2894439697266 + }, + "Y": { + "type": "float", + "value": 101.4839019775391 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926987648010254 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.6487426757813 + }, + "Y": { + "type": "float", + "value": 97.58789825439453 + }, + "Z": { + "type": "float", + "value": 0.4576573371887207 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592264175415 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.010986328125 + }, + "Y": { + "type": "float", + "value": 93.63098907470703 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.945243120193481 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.4604187011719 + }, + "Y": { + "type": "float", + "value": 89.67305755615234 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.570796847343445 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.72021484375 + }, + "Y": { + "type": "float", + "value": 86.32872009277344 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.9153900146484 + }, + "Y": { + "type": "float", + "value": 61.23542785644531 + }, + "Z": { + "type": "float", + "value": 0.02169179916381836 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3926989734172821 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.9686279296875 + }, + "Y": { + "type": "float", + "value": 57.07638931274414 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.767145752906799 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.2940979003906 + }, + "Y": { + "type": "float", + "value": 53.23762893676758 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.552544116973877 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.260986328125 + }, + "Y": { + "type": "float", + "value": 49.27277755737305 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.159844636917114 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.9878234863281 + }, + "Y": { + "type": "float", + "value": 45.27780914306641 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.685873627366163e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.8033294677734 + }, + "Y": { + "type": "float", + "value": 41.31978607177734 + }, + "Z": { + "type": "float", + "value": 0.1786788254976273 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.4320373535156 + }, + "Y": { + "type": "float", + "value": 37.01566314697266 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.159845113754273 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.6533203125 + }, + "Y": { + "type": "float", + "value": 34.66607284545898 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.59130859375 + }, + "Y": { + "type": "float", + "value": 31.15743255615234 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.74889349937439 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 136.1780395507813 + }, + "Y": { + "type": "float", + "value": 27.65053558349609 + }, + "Z": { + "type": "float", + "value": 0.1691608428955078 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.74889349937439 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 133.9568786621094 + }, + "Y": { + "type": "float", + "value": 26.48282623291016 + }, + "Z": { + "type": "float", + "value": 0.3377531468868256 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926987648010254 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 132.3134765625 + }, + "Y": { + "type": "float", + "value": 25.02669525146484 + }, + "Z": { + "type": "float", + "value": 0.6738002300262451 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 128.3651733398438 + }, + "Y": { + "type": "float", + "value": 21.69833374023438 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 126.1041793823242 + }, + "Y": { + "type": "float", + "value": 19.03386688232422 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 123.5458068847656 + }, + "Y": { + "type": "float", + "value": 16.25875854492188 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 121.4160537719727 + }, + "Y": { + "type": "float", + "value": 14.05303192138672 + }, + "Z": { + "type": "float", + "value": 0.07089788466691971 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 117.2217025756836 + }, + "Y": { + "type": "float", + "value": 12.18962097167969 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 114.7007751464844 + }, + "Y": { + "type": "float", + "value": 10.79075622558594 + }, + "Z": { + "type": "float", + "value": 0.07519536465406418 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 112.8693542480469 + }, + "Y": { + "type": "float", + "value": 9.212547302246094 + }, + "Z": { + "type": "float", + "value": 0.3580983281135559 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 110.5953216552734 + }, + "Y": { + "type": "float", + "value": 6.067855834960938 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 108.0765075683594 + }, + "Y": { + "type": "float", + "value": 2.385208129882813 + }, + "Z": { + "type": "float", + "value": 0.1754493713378906 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 112.6441650390625 + }, + "Y": { + "type": "float", + "value": 0.50775146484375 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592264175415 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 115.8166046142578 + }, + "Y": { + "type": "float", + "value": 0.1080856323242188 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 117.2117233276367 + }, + "Y": { + "type": "float", + "value": 6.666160583496094 + }, + "Z": { + "type": "float", + "value": 16.85951995849609 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 115.4093780517578 + }, + "Y": { + "type": "float", + "value": 8.347869873046875 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.945242643356323 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 126.3237609863281 + }, + "Y": { + "type": "float", + "value": 13.96392822265625 + }, + "Z": { + "type": "float", + "value": 17.18634414672852 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.57079553604126 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 127.2904663085938 + }, + "Y": { + "type": "float", + "value": 15.30589294433594 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3926989734172821 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 133.2001037597656 + }, + "Y": { + "type": "float", + "value": 19.72913360595703 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 135.7297668457031 + }, + "Y": { + "type": "float", + "value": 21.55824279785156 + }, + "Z": { + "type": "float", + "value": 0.1518192291259766 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890487432479858 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 138.2469940185547 + }, + "Y": { + "type": "float", + "value": 20.90548324584961 + }, + "Z": { + "type": "float", + "value": 0.01141071319580078 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.4720153808594 + }, + "Y": { + "type": "float", + "value": 14.53603363037109 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 136.7602691650391 + }, + "Y": { + "type": "float", + "value": 11.64604949951172 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592264175415 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.4422607421875 + }, + "Y": { + "type": "float", + "value": 9.357833862304688 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.3593902587891 + }, + "Y": { + "type": "float", + "value": 6.179306030273438 + }, + "Z": { + "type": "float", + "value": 0.1602763831615448 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.356194257736206 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 137.2032165527344 + }, + "Y": { + "type": "float", + "value": 3.622611999511719 + }, + "Z": { + "type": "float", + "value": 0.04802688956260681 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926987648010254 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 136.1909637451172 + }, + "Y": { + "type": "float", + "value": 1.663978576660156 + }, + "Z": { + "type": "float", + "value": 0.249305859208107 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.356194496154785 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 131.8693084716797 + }, + "Y": { + "type": "float", + "value": 0.5157623291015625 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.141592264175415 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 126.7153625488281 + }, + "Y": { + "type": "float", + "value": 2.232887268066406 + }, + "Z": { + "type": "float", + "value": -4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.552543640136719 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 120.9163818359375 + }, + "Y": { + "type": "float", + "value": 2.37744140625 + }, + "Z": { + "type": "float", + "value": -7.152557373046875e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.685873627366163e-007 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 117.0456161499023 + }, + "Y": { + "type": "float", + "value": 2.371246337890625 + }, + "Z": { + "type": "float", + "value": 0.1017686426639557 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890482664108276 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 123.4775619506836 + }, + "Y": { + "type": "float", + "value": 6.940261840820313 + }, + "Z": { + "type": "float", + "value": 9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5890487432479858 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 125.6216583251953 + }, + "Y": { + "type": "float", + "value": 10.63301086425781 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853978872299194 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 130.2677307128906 + }, + "Y": { + "type": "float", + "value": 14.35968017578125 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 133.1237182617188 + }, + "Y": { + "type": "float", + "value": 17.67491912841797 + }, + "Z": { + "type": "float", + "value": 0.157493457198143 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.356194257736206 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 130.0610961914063 + }, + "Y": { + "type": "float", + "value": 9.935020446777344 + }, + "Z": { + "type": "float", + "value": 2.980232238769531e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.374446511268616 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 129.899169921875 + }, + "Y": { + "type": "float", + "value": 3.377838134765625 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 115.1459655761719 + }, + "Y": { + "type": "float", + "value": 5.173660278320313 + }, + "Z": { + "type": "float", + "value": 17.11203575134277 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 102.9866790771484 + }, + "Y": { + "type": "float", + "value": 0.9253311157226563 + }, + "Z": { + "type": "float", + "value": 0.1909065246582031 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 99.74793243408203 + }, + "Y": { + "type": "float", + "value": 1.230247497558594 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 96.73435974121094 + }, + "Y": { + "type": "float", + "value": 1.170166015625 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 73.50314331054688 + }, + "Y": { + "type": "float", + "value": 1.830680847167969 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 71.01720428466797 + }, + "Y": { + "type": "float", + "value": 2.1297607421875 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.28040313720703 + }, + "Y": { + "type": "float", + "value": 2.187232971191406 + }, + "Z": { + "type": "float", + "value": 0.07624578475952148 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 63.05611419677734 + }, + "Y": { + "type": "float", + "value": 2.381309509277344 + }, + "Z": { + "type": "float", + "value": 0.123967170715332 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.87306213378906 + }, + "Y": { + "type": "float", + "value": 2.483161926269531 + }, + "Z": { + "type": "float", + "value": 1.430511474609375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.66487884521484 + }, + "Y": { + "type": "float", + "value": 2.315025329589844 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 52.25690460205078 + }, + "Y": { + "type": "float", + "value": 2.6368408203125 + }, + "Z": { + "type": "float", + "value": 0.08943939208984375 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 48.39138793945313 + }, + "Y": { + "type": "float", + "value": 2.593742370605469 + }, + "Z": { + "type": "float", + "value": 3.814697265625e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.71543121337891 + }, + "Y": { + "type": "float", + "value": 2.101219177246094 + }, + "Z": { + "type": "float", + "value": -3.814697265625e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.48992919921875 + }, + "Y": { + "type": "float", + "value": 2.457183837890625 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.44618988037109 + }, + "Y": { + "type": "float", + "value": 2.492721557617188 + }, + "Z": { + "type": "float", + "value": 1.9073486328125e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.66648864746094 + }, + "Y": { + "type": "float", + "value": 2.212150573730469 + }, + "Z": { + "type": "float", + "value": 1.9073486328125e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.75278472900391 + }, + "Y": { + "type": "float", + "value": 2.914398193359375 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.63540649414063 + }, + "Y": { + "type": "float", + "value": 2.781105041503906 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.60460662841797 + }, + "Y": { + "type": "float", + "value": 2.569862365722656 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.65174865722656 + }, + "Y": { + "type": "float", + "value": 2.4451904296875 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.03225708007813 + }, + "Y": { + "type": "float", + "value": 2.255500793457031 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.733108520507813 + }, + "Y": { + "type": "float", + "value": 2.442626953125 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.78045654296875 + }, + "Y": { + "type": "float", + "value": 2.323654174804688 + }, + "Z": { + "type": "float", + "value": 0.167302131652832 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.159845113754273 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.3165283203125 + }, + "Y": { + "type": "float", + "value": 5.735321044921875 + }, + "Z": { + "type": "float", + "value": 0.04778075218200684 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.767145752906799 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.067459106445313 + }, + "Y": { + "type": "float", + "value": 9.8170166015625 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.767145752906799 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.046600341796875 + }, + "Y": { + "type": "float", + "value": 13.36286926269531 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.891403198242188 + }, + "Y": { + "type": "float", + "value": 16.32427978515625 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.945243120193481 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.995742797851563 + }, + "Y": { + "type": "float", + "value": 20.18473052978516 + }, + "Z": { + "type": "float", + "value": 0.1169681549072266 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.785398006439209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.949539184570313 + }, + "Y": { + "type": "float", + "value": 24.65853500366211 + }, + "Z": { + "type": "float", + "value": 7.152557373046875e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.054824829101563 + }, + "Y": { + "type": "float", + "value": 26.55102157592773 + }, + "Z": { + "type": "float", + "value": 9.032888412475586 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.876144409179688 + }, + "Y": { + "type": "float", + "value": 33.87720108032227 + }, + "Z": { + "type": "float", + "value": 18.55170249938965 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890482664108276 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.310287475585938 + }, + "Y": { + "type": "float", + "value": 30.24489593505859 + }, + "Z": { + "type": "float", + "value": -5.364418029785156e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.748893737792969 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.165390014648438 + }, + "Y": { + "type": "float", + "value": 35.37774658203125 + }, + "Z": { + "type": "float", + "value": 0.009637763723731041 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817472696304321 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.617568969726563 + }, + "Y": { + "type": "float", + "value": 40.52713012695313 + }, + "Z": { + "type": "float", + "value": 0.3293996453285217 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.349990844726563 + }, + "Y": { + "type": "float", + "value": 47.58771514892578 + }, + "Z": { + "type": "float", + "value": 0.3161830902099609 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.220794677734375 + }, + "Y": { + "type": "float", + "value": 53.88388824462891 + }, + "Z": { + "type": "float", + "value": 8.283665657043457 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.756988525390625 + }, + "Y": { + "type": "float", + "value": 58.37339401245117 + }, + "Z": { + "type": "float", + "value": -1.9073486328125e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.927505493164063 + }, + "Y": { + "type": "float", + "value": 61.47098159790039 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.481475830078125 + }, + "Y": { + "type": "float", + "value": 65.66938018798828 + }, + "Z": { + "type": "float", + "value": -9.5367431640625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.116546630859375 + }, + "Y": { + "type": "float", + "value": 39.59461212158203 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.558547973632813 + }, + "Y": { + "type": "float", + "value": 76.29264831542969 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.938018798828125 + }, + "Y": { + "type": "float", + "value": 79.06700897216797 + }, + "Z": { + "type": "float", + "value": -3.576278686523438e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.487518310546875 + }, + "Y": { + "type": "float", + "value": 81.64286041259766 + }, + "Z": { + "type": "float", + "value": 0.319159060716629 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.70849609375 + }, + "Y": { + "type": "float", + "value": 90.41325378417969 + }, + "Z": { + "type": "float", + "value": 0.1108610257506371 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.596694946289063 + }, + "Y": { + "type": "float", + "value": 100.7477111816406 + }, + "Z": { + "type": "float", + "value": 0.1374600231647492 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.49028015136719 + }, + "Y": { + "type": "float", + "value": 55.00425720214844 + }, + "Z": { + "type": "float", + "value": -6.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2234 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796251296997 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813478, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATER002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_water002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.6165771484375 + }, + "Y": { + "type": "float", + "value": 94.97398376464844 + }, + "Z": { + "type": "float", + "value": -6.000001907348633 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.313491821289063 + }, + "Y": { + "type": "float", + "value": 154.9856719970703 + }, + "Z": { + "type": "float", + "value": 0.2125873565673828 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1783 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145872116089 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813838, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811256, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB038" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub038" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.254425048828125 + }, + "Y": { + "type": "float", + "value": 151.0972290039063 + }, + "Z": { + "type": "float", + "value": 0.003812849521636963 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 1 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.252777099609375 + }, + "PointY": { + "type": "float", + "value": -0.4712905883789063 + }, + "PointZ": { + "type": "float", + "value": 0.4700061976909638 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.174896240234375 + }, + "PointY": { + "type": "float", + "value": -19.00740814208984 + }, + "PointZ": { + "type": "float", + "value": 0.6577978134155273 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": -19.25001525878906 + }, + "PointZ": { + "type": "float", + "value": 0.03270437568426132 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.03270437568426132 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "WP_FoHCentral2DruidGrove" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "id": 14760, + "type": "cexolocstring", + "value": { + "0": "DruidGrove2FoHCentral" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "DruidGrove2FoHCentral" + }, + "TemplateResRef": { + "type": "resref", + "value": "newtransition" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 139.6147766113281 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 83.54123687744141 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "WP_DruidGrove2FoHCentral" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_DruidGrove2FoHCentral" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 134.3620147705078 + }, + "YOrientation": { + "type": "float", + "value": 7.549790126404332e-008 + }, + "YPosition": { + "type": "float", + "value": 74.21849060058594 + }, + "ZPosition": { + "type": "float", + "value": -4.813075065612793e-006 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN01_SA_SD20M15_PC05R_SF_DS2_CP052_RH100" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NPC_DRUSILLA" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 36.17223358154297 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 70.79584503173828 + }, + "ZPosition": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN01_SA_SD20M15_PC05R_SF_DS2_CP052_RH100" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "AC_SHEIJU" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 35.71295547485352 + }, + "YOrientation": { + "type": "float", + "value": 9.860592342647578e-010 + }, + "YPosition": { + "type": "float", + "value": 69.0673828125 + }, + "ZPosition": { + "type": "float", + "value": -4.813075065612793e-006 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP03_SN20_SA_SR99M00_SD20M15_RW_PC05R_SU30_DS2_FC4" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "RA_WOLF001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 41.25485229492188 + }, + "YOrientation": { + "type": "float", + "value": 8.325584666124541e-011 + }, + "YPosition": { + "type": "float", + "value": 69.87786865234375 + }, + "ZPosition": { + "type": "float", + "value": 0.002439498901367188 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP03_SN10_SA_SR20M00_SD20M15_RW_PC05R_SU30_DS2_FC4" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "RA_WOLF001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 40.93404769897461 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 68.27043151855469 + }, + "ZPosition": { + "type": "float", + "value": 0.01868331432342529 + } + } + ] + } +} diff --git a/_module/git/forestofhopecent.git.json b/_module/git/forestofhopecent.git.json index 944f5766..9989f5db 100644 --- a/_module/git/forestofhopecent.git.json +++ b/_module/git/forestofhopecent.git.json @@ -45,48323 +45,7 @@ }, "Creature List": { "type": "list", - "value": [ - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 74.2320556640625 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.380126953125 - }, - "ZPosition": { - "type": "float", - "value": -1.094918251037598 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 76.71699523925781 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.6485595703125 - }, - "ZPosition": { - "type": "float", - "value": -1.088252067565918 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 73.0406494140625 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 125.3318939208984 - }, - "ZPosition": { - "type": "float", - "value": -1.166850328445435 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 77.84220123291016 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 123.5250091552734 - }, - "ZPosition": { - "type": "float", - "value": -1.08950686454773 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 72.07492828369141 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 126.3957290649414 - }, - "ZPosition": { - "type": "float", - "value": -1.113835096359253 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 72.94763946533203 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 129.4214019775391 - }, - "ZPosition": { - "type": "float", - "value": -1.066592693328857 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 74.1632080078125 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 131.6865234375 - }, - "ZPosition": { - "type": "float", - "value": -1.061932802200317 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 78.06147766113281 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.7850341796875 - }, - "ZPosition": { - "type": "float", - "value": -1.075387716293335 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 79.18508911132813 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 123.0428466796875 - }, - "ZPosition": { - "type": "float", - "value": -1.061049938201904 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 73.5948486328125 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 121.4044036865234 - }, - "ZPosition": { - "type": "float", - "value": -1.101958394050598 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 79.92795562744141 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 127.0165328979492 - }, - "ZPosition": { - "type": "float", - "value": -1.061049938201904 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 77.43045806884766 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 125.6018981933594 - }, - "ZPosition": { - "type": "float", - "value": -1.111645579338074 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 69.79137420654297 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 123.1461181640625 - }, - "ZPosition": { - "type": "float", - "value": -1.061933040618897 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 71.51203155517578 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 122.4995193481445 - }, - "ZPosition": { - "type": "float", - "value": -1.08009135723114 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 75.96599578857422 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 120.9472732543945 - }, - "ZPosition": { - "type": "float", - "value": -1.087347030639648 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 74.70051574707031 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 120.8573150634766 - }, - "ZPosition": { - "type": "float", - "value": -1.088297367095947 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 70.47940826416016 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 125.0944900512695 - }, - "ZPosition": { - "type": "float", - "value": -1.077032089233398 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 71.08769989013672 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.0495758056641 - }, - "ZPosition": { - "type": "float", - "value": -1.061049938201904 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 69.85873413085938 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.2822723388672 - }, - "ZPosition": { - "type": "float", - "value": -1.061933040618897 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 68.42974853515625 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 123.0800018310547 - }, - "ZPosition": { - "type": "float", - "value": -1.061932802200317 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 79.27112579345703 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 120.0178070068359 - }, - "ZPosition": { - "type": "float", - "value": -1.061050176620483 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 77.23344421386719 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 119.4048919677734 - }, - "ZPosition": { - "type": "float", - "value": -1.061932921409607 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 72.84859466552734 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 118.9994583129883 - }, - "ZPosition": { - "type": "float", - "value": -1.061933040618897 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 78.98135375976563 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 125.0862808227539 - }, - "ZPosition": { - "type": "float", - "value": -1.080290913581848 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 81.64572906494141 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 127.1609954833984 - }, - "ZPosition": { - "type": "float", - "value": -1.061932802200317 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": -0.3598999381065369 - }, - "XPosition": { - "type": "float", - "value": 73.35285186767578 - }, - "YOrientation": { - "type": "float", - "value": -0.9329909086227417 - }, - "YPosition": { - "type": "float", - "value": 114.1186599731445 - }, - "ZPosition": { - "type": "float", - "value": -0.001933038234710693 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": -0.09802349656820297 - }, - "XPosition": { - "type": "float", - "value": 76.18563842773438 - }, - "YOrientation": { - "type": "float", - "value": -0.9951841235160828 - }, - "YPosition": { - "type": "float", - "value": 113.6532211303711 - }, - "ZPosition": { - "type": "float", - "value": -0.001932978630065918 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 73.25640869140625 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 137.3040466308594 - }, - "ZPosition": { - "type": "float", - "value": 1.072883605957031e-006 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 77.03600311279297 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 137.2888488769531 - }, - "ZPosition": { - "type": "float", - "value": -0.001933157444000244 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 309 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 6 - }, - "ChallengeRating": { - "type": "float", - "value": 2.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 12 - }, - "ClassLevel": { - "type": "short", - "value": 2 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 15 - }, - "Conversation": { - "type": "resref", - "value": "cv_charmed" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 9 - }, - "DecayTime": { - "type": "dword", - "value": 10000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 12815, - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 0 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 23 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 24070 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2569 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 291 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - } - ] - }, - "FirstName": { - "id": 12816, - "type": "cexolocstring", - "value": { - "0": "Wolf" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 9 - }, - "Int": { - "type": "byte", - "value": 3 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 13 - }, - "NaturalAC": { - "type": "byte", - "value": 2 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 319 - }, - "Race": { - "type": "byte", - "value": 8 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 3 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 103 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 0 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Animal" - }, - "Tag": { - "type": "cexostring", - "value": "RA_WOLF001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "wolf001" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Wolf" - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 78.99734497070313 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 131.5695648193359 - }, - "ZPosition": { - "type": "float", - "value": -1.061932802200317 - } - }, - { - "__struct_id": 4, - "Appearance_Head": { - "type": "byte", - "value": 3 - }, - "Appearance_Type": { - "type": "word", - "value": 0 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, - "Cha": { - "type": "byte", - "value": 12 - }, - "ChallengeRating": { - "type": "float", - "value": 4.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 8 - }, - "ClassLevel": { - "type": "short", - "value": 6 - } - } - ] - }, - "Color_Hair": { - "type": "byte", - "value": 31 - }, - "Color_Skin": { - "type": "byte", - "value": 8 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, - "Con": { - "type": "byte", - "value": 14 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 23 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 17 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "ArmorPart_Belt": { - "type": "byte", - "value": 7 - }, - "ArmorPart_LBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LFArm": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LHand": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_LShoul": { - "type": "byte", - "value": 7 - }, - "ArmorPart_LThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Neck": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Pelvis": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RFArm": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RHand": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Robe": { - "type": "byte", - "value": 0 - }, - "ArmorPart_RShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RShoul": { - "type": "byte", - "value": 7 - }, - "ArmorPart_RThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Torso": { - "type": "byte", - "value": 43 - }, - "BaseItem": { - "type": "int", - "value": 16 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cloth1Color": { - "type": "byte", - "value": 19 - }, - "Cloth2Color": { - "type": "byte", - "value": 16 - }, - "Cost": { - "type": "dword", - "value": 15 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 23 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12836, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL002" - }, - "TemplateResRef": { - "type": "resref", - "value": "aarcl004" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 78 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 657 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13351, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13350, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 5 - }, - "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": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 1 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MBRACER002" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mbracer002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 7 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 70 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 174, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBWXL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wbwxl001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8192, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 25 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 15840 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 66913, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 66922, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 51 - }, - "ModelPart3": { - "type": "byte", - "value": 12 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 24 - }, - "CostValue": { - "type": "word", - "value": 0 - }, - "Param1": { - "type": "byte", - "value": 10 - }, - "Param1Value": { - "type": "byte", - "value": 2 - }, - "PropertyName": { - "type": "word", - "value": 48 - }, - "Subtype": { - "type": "word", - "value": 19 - } - }, - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 24 - }, - "CostValue": { - "type": "word", - "value": 0 - }, - "Param1": { - "type": "byte", - "value": 10 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 48 - }, - "Subtype": { - "type": "word", - "value": 19 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMMBO007" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wammbo007" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 233 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 232 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 231 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 228 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 206 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 229 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 230 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 234 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 193 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 346 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 227 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 41 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 251 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 50 - } - } - ] - }, - "FirstName": { - "type": "cexolocstring", - "value": { - "0": "Grawlic" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 23 - }, - "Int": { - "type": "byte", - "value": 14 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "AddCost": { - "type": "dword", - "value": 1 - }, - "BaseItem": { - "type": "int", - "value": 15 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 6 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 180, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__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": 1 - }, - "PropertyName": { - "type": "word", - "value": 44 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_TORCH001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_torch001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 1, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 62 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 15 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13523, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "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": 255 - }, - "PropertyName": { - "type": "word", - "value": 55 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 1 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_PICKS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_picks001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 22 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 4 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 191, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 21 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWDG001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswdg001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 3, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 14 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 1009 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 16807865, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 16807857, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 16807360, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "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": 4 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "ZEP_BUCKLER" - }, - "TemplateResRef": { - "type": "resref", - "value": "zep_buckler" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 4, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 22 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 4 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 191, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 21 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWDG001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswdg001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 5, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 22 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 4 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 191, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 21 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWDG001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswdg001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 6, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 47 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 16 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1541, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBLMS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wblms001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 7, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 46 - }, - "Charges": { - "type": "byte", - "value": 50 - }, - "Cost": { - "type": "dword", - "value": 1501 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 58591, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 58592, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 21 - }, - "ModelPart2": { - "type": "byte", - "value": 61 - }, - "ModelPart3": { - "type": "byte", - "value": 51 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 6 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 251 - } - }, - { - "__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 - } - }, - { - "__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 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 8 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "nw_wmgwn012" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wmgwn012" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 75 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 72 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 6163, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13540, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 122 - } - }, - { - "__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": 255 - }, - "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": 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": 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": 255 - }, - "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": 255 - }, - "PropertyName": { - "type": "word", - "value": 63 - }, - "Subtype": { - "type": "word", - "value": 10 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 9 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_SPARSCR103" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_sparscr103" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 9, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 75 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 216 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 6183, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13543, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 147 - } - }, - { - "__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": 255 - }, - "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": 255 - }, - "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": 255 - }, - "PropertyName": { - "type": "word", - "value": 63 - }, - "Subtype": { - "type": "word", - "value": 10 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_SPARSCR106" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_sparscr106" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 10, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 75 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 216 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 6187, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13556, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "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": 255 - }, - "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": 255 - }, - "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": 255 - }, - "PropertyName": { - "type": "word", - "value": 63 - }, - "Subtype": { - "type": "word", - "value": 10 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_SPARSCR207" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_sparscr207" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 11, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 120 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13436, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13437, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 72 - }, - "ModelPart2": { - "type": "byte", - "value": 13 - }, - "ModelPart3": { - "type": "byte", - "value": 13 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 25 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MPOTION014" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mpotion014" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 12, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 300 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13420, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13421, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 31 - }, - "ModelPart2": { - "type": "byte", - "value": 12 - }, - "ModelPart3": { - "type": "byte", - "value": 13 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 204 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 9 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MPOTION006" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mpotion006" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 13, - "AddCost": { - "type": "dword", - "value": 1500 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 1500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13307, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13306, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 9 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 1 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 14, - "AddCost": { - "type": "dword", - "value": 50 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 50 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13319, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13318, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 15 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM015" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 15, - "AddCost": { - "type": "dword", - "value": 120 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 120 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13311, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13310, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM011" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem011" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 7 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 7 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13291, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13290, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 4 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 17, - "AddCost": { - "type": "dword", - "value": 10 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 10 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13293, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13292, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 2 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM002" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 18, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 76 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 535, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 3 - }, - "StackSize": { - "type": "word", - "value": 303 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GOLD001" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gold016" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "LastName": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "LawfulChaotic": { - "type": "byte", - "value": 100 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 41 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 12 - }, - "Race": { - "type": "byte", - "value": 0 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "x2_def_attacked" - }, - "ScriptDamaged": { - "type": "resref", - "value": "x2_def_ondamage" - }, - "ScriptDeath": { - "type": "resref", - "value": "x2_def_ondeath" - }, - "ScriptDialogue": { - "type": "resref", - "value": "x2_def_onconv" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "x2_def_ondisturb" - }, - "ScriptEndRound": { - "type": "resref", - "value": "x2_def_endcombat" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "x2_def_heartbeat" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "x2_def_onblocked" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "x2_def_percept" - }, - "ScriptRested": { - "type": "resref", - "value": "x2_def_rested" - }, - "ScriptSpawn": { - "type": "resref", - "value": "x2_def_spawn" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "x2_def_spellcast" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "x2_def_userdef" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 179 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 8 - }, - "Str": { - "type": "byte", - "value": 12 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "Grawlic" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "grawlic" - }, - "WalkRate": { - "type": "int", - "value": 4 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 8 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 128.9657440185547 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 29.91078948974609 - }, - "ZPosition": { - "type": "float", - "value": -5.222045729169622e-006 - } - }, - { - "__struct_id": 4, - "Appearance_Head": { - "type": "byte", - "value": 3 - }, - "Appearance_Type": { - "type": "word", - "value": 4 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, - "Cha": { - "type": "byte", - "value": 10 - }, - "ChallengeRating": { - "type": "float", - "value": 5.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 10 - }, - "ClassLevel": { - "type": "short", - "value": 6 - }, - "MemorizedList0": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 37 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 100 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 144 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 151 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList1": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 86 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 102 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 107 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 174 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList2": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 120 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 90 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 115 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 175 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList3": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 21 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 58 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 176 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - } - } - ] - }, - "Color_Hair": { - "type": "byte", - "value": 54 - }, - "Color_Skin": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, - "Con": { - "type": "byte", - "value": 14 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 16 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 14 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "ArmorPart_Belt": { - "type": "byte", - "value": 0 - }, - "ArmorPart_LBicep": { - "type": "byte", - "value": 10 - }, - "ArmorPart_LFArm": { - "type": "byte", - "value": 12 - }, - "ArmorPart_LFoot": { - "type": "byte", - "value": 152 - }, - "ArmorPart_LHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_LShin": { - "type": "byte", - "value": 161 - }, - "ArmorPart_LShoul": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LThigh": { - "type": "byte", - "value": 80 - }, - "ArmorPart_Neck": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Pelvis": { - "type": "byte", - "value": 22 - }, - "ArmorPart_RBicep": { - "type": "byte", - "value": 10 - }, - "ArmorPart_RFArm": { - "type": "byte", - "value": 12 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 152 - }, - "ArmorPart_RHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Robe": { - "type": "byte", - "value": 152 - }, - "ArmorPart_RShin": { - "type": "byte", - "value": 161 - }, - "ArmorPart_RShoul": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RThigh": { - "type": "byte", - "value": 80 - }, - "ArmorPart_Torso": { - "type": "byte", - "value": 150 - }, - "BaseItem": { - "type": "int", - "value": 16 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cloth1Color": { - "type": "byte", - "value": 46 - }, - "Cloth2Color": { - "type": "byte", - "value": 43 - }, - "Cost": { - "type": "dword", - "value": 1 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 16807817, - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 43 - }, - "Leather2Color": { - "type": "byte", - "value": 50 - }, - "LocalizedName": { - "id": 16807778, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 32 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "ZEP_WIZROBES" - }, - "TemplateResRef": { - "type": "resref", - "value": "zep_wizrobes" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 28 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 2 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1522, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBLCL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wblcl001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8192, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 25 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1519, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMBO001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wambo001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 944 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 7 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 946 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 11 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 236 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 235 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 354 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 244 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 245 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 246 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 945 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 303 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 51 - } - } - ] - }, - "FirstName": { - "type": "cexolocstring", - "value": { - "0": "Zanafia" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 1 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 16 - }, - "Int": { - "type": "byte", - "value": 17 - }, - "Interruptable": { - "type": "byte", - "value": 0 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 7 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 70 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 174, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBWXL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wbwxl001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 1, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 300 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13420, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13421, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 31 - }, - "ModelPart2": { - "type": "byte", - "value": 12 - }, - "ModelPart3": { - "type": "byte", - "value": 13 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 204 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MPOTION006" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mpotion006" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 46 - }, - "Charges": { - "type": "byte", - "value": 50 - }, - "Cost": { - "type": "dword", - "value": 501 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "A wand with the Charm Person spell upon it." - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "type": "cexolocstring", - "value": { - "0": "Wand of Charm" - } - }, - "ModelPart1": { - "type": "byte", - "value": 21 - }, - "ModelPart2": { - "type": "byte", - "value": 41 - }, - "ModelPart3": { - "type": "byte", - "value": 52 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 6 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 33 - } - }, - { - "__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 - } - }, - { - "__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 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "WandofCharm" - }, - "TemplateResRef": { - "type": "resref", - "value": "wandofcharm" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 3, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 4 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 4, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 5, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 6, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 7, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 8 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "LastName": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 28 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 20 - }, - "Race": { - "type": "byte", - "value": 4 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "x2_def_attacked" - }, - "ScriptDamaged": { - "type": "resref", - "value": "x2_def_ondamage" - }, - "ScriptDeath": { - "type": "resref", - "value": "x2_def_ondeath" - }, - "ScriptDialogue": { - "type": "resref", - "value": "x2_def_onconv" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "x2_def_ondisturb" - }, - "ScriptEndRound": { - "type": "resref", - "value": "x2_def_endcombat" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "x2_def_heartbeat" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "x2_def_onblocked" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "x2_def_percept" - }, - "ScriptRested": { - "type": "resref", - "value": "x2_def_rested" - }, - "ScriptSpawn": { - "type": "resref", - "value": "x2_def_spawn" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "x2_def_spellcast" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "x2_def_userdef" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 135 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 10 - }, - "Str": { - "type": "byte", - "value": 10 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "Zanafia" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "zanafia" - }, - "WalkRate": { - "type": "int", - "value": 4 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 132.5786743164063 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 28.26734924316406 - }, - "ZPosition": { - "type": "float", - "value": 0.1224308013916016 - } - }, - { - "__struct_id": 4, - "Appearance_Head": { - "type": "byte", - "value": 8 - }, - "Appearance_Type": { - "type": "word", - "value": 5 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, - "Cha": { - "type": "byte", - "value": 9 - }, - "ChallengeRating": { - "type": "float", - "value": 5.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 6 - } - } - ] - }, - "Color_Hair": { - "type": "byte", - "value": 1 - }, - "Color_Skin": { - "type": "byte", - "value": 36 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, - "Con": { - "type": "byte", - "value": 16 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 37 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "ArmorPart_Belt": { - "type": "byte", - "value": 11 - }, - "ArmorPart_LBicep": { - "type": "byte", - "value": 7 - }, - "ArmorPart_LFArm": { - "type": "byte", - "value": 15 - }, - "ArmorPart_LFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LHand": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LShin": { - "type": "byte", - "value": 7 - }, - "ArmorPart_LShoul": { - "type": "byte", - "value": 0 - }, - "ArmorPart_LThigh": { - "type": "byte", - "value": 6 - }, - "ArmorPart_Neck": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Pelvis": { - "type": "byte", - "value": 6 - }, - "ArmorPart_RBicep": { - "type": "byte", - "value": 7 - }, - "ArmorPart_RFArm": { - "type": "byte", - "value": 15 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RHand": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Robe": { - "type": "byte", - "value": 0 - }, - "ArmorPart_RShin": { - "type": "byte", - "value": 7 - }, - "ArmorPart_RShoul": { - "type": "byte", - "value": 0 - }, - "ArmorPart_RThigh": { - "type": "byte", - "value": 6 - }, - "ArmorPart_Torso": { - "type": "byte", - "value": 45 - }, - "BaseItem": { - "type": "int", - "value": 16 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cloth1Color": { - "type": "byte", - "value": 19 - }, - "Cloth2Color": { - "type": "byte", - "value": 16 - }, - "Cost": { - "type": "dword", - "value": 200 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12843, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 12 - }, - "Metal2Color": { - "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": "NW_AARCL011" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl011" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 33 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 464 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "A masterwork double-axe, crafted by the best of the Orcish smiths." - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 1527, - "type": "cexolocstring", - "value": { - "0": "Masterwork Double Axe" - } - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 12 - }, - "ModelPart3": { - "type": "byte", - "value": 31 - }, - "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": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 56 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WDBAX001" - }, - "TemplateResRef": { - "type": "resref", - "value": "wdbax002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2048, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 20 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1517, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMAR001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wamar001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 6 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 228 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 10 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 391 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 26 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 28 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 106 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 144 - } - } - ] - }, - "FirstName": { - "type": "cexolocstring", - "value": { - "0": "Jel" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 1 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 37 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 11 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 464 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13213, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 14055, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 13 - }, - "ModelPart2": { - "type": "byte", - "value": 23 - }, - "ModelPart3": { - "type": "byte", - "value": 23 - }, - "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": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 56 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBWMSH002" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wbwmsh002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 1, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 20 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13410, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13411, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 21 - }, - "ModelPart2": { - "type": "byte", - "value": 23 - }, - "ModelPart3": { - "type": "byte", - "value": 32 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 66 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MPOTION001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mpotion001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 120 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13440, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13441, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 32 - }, - "ModelPart3": { - "type": "byte", - "value": 12 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 1 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MPOTION016" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mpotion016" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 3, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 49 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 120 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "type": "cexolocstring", - "value": { - "0": "Potion of Vision" - } - }, - "ModelPart1": { - "type": "byte", - "value": 28 - }, - "ModelPart2": { - "type": "byte", - "value": 21 - }, - "ModelPart3": { - "type": "byte", - "value": 31 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 243 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 4 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "PotionofVision" - }, - "TemplateResRef": { - "type": "resref", - "value": "potionofvision" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 4, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "A jet" - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "type": "cexolocstring", - "value": { - "0": "Jet" - } - }, - "ModelPart1": { - "type": "byte", - "value": 72 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "Jet" - }, - "TemplateResRef": { - "type": "resref", - "value": "jet" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 5, - "AddCost": { - "type": "dword", - "value": 10 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 10 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "A moss agate" - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "type": "cexolocstring", - "value": { - "0": "Moss Agate" - } - }, - "ModelPart1": { - "type": "byte", - "value": 71 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "MossAgate" - }, - "TemplateResRef": { - "type": "resref", - "value": "mossagate" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 6, - "AddCost": { - "type": "dword", - "value": 100 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 100 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13317, - "type": "cexolocstring", - "value": { - "0": "A pearl of lustrous shine, created in the innards of the humble oyster. " - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13316, - "type": "cexolocstring", - "value": { - "0": "Pearl" - } - }, - "ModelPart1": { - "type": "byte", - "value": 56 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM014" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gem015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "LastName": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 55 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 131 - }, - "Race": { - "type": "byte", - "value": 5 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "x2_def_attacked" - }, - "ScriptDamaged": { - "type": "resref", - "value": "x2_def_ondamage" - }, - "ScriptDeath": { - "type": "resref", - "value": "x2_def_ondeath" - }, - "ScriptDialogue": { - "type": "resref", - "value": "x2_def_onconv" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "x2_def_ondisturb" - }, - "ScriptEndRound": { - "type": "resref", - "value": "x2_def_endcombat" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "x2_def_heartbeat" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "x2_def_onblocked" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "x2_def_percept" - }, - "ScriptRested": { - "type": "resref", - "value": "x2_def_rested" - }, - "ScriptSpawn": { - "type": "resref", - "value": "x2_def_spawn" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "x2_def_spellcast" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "x2_def_userdef" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 245 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 17 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "Jel" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "jel" - }, - "WalkRate": { - "type": "int", - "value": 4 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 10 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 131.4011383056641 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 31.0832462310791 - }, - "ZPosition": { - "type": "float", - "value": -5.222045729169622e-006 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 134.8383178710938 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 30.49622535705566 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 126.7597885131836 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 31.42255401611328 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 136.6331634521484 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 32.33810043334961 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 125.2375030517578 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 33.05834579467773 - }, - "ZPosition": { - "type": "float", - "value": -5.222045729169622e-006 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 128.1787872314453 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 26.71877670288086 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 129.7919616699219 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 27.25806617736816 - }, - "ZPosition": { - "type": "float", - "value": 1.423721300852776e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 133.2136993408203 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 30.68214225769043 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 131.2724304199219 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 27.54105186462402 - }, - "ZPosition": { - "type": "float", - "value": 0.09026524424552918 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 133.2571105957031 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 26.23017692565918 - }, - "ZPosition": { - "type": "float", - "value": 0.3231708705425263 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 128.5884704589844 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 24.30162620544434 - }, - "ZPosition": { - "type": "float", - "value": 4.999999987376214e-007 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 139.8007354736328 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 26.33961868286133 - }, - "ZPosition": { - "type": "float", - "value": 0.01728957891464233 - } - }, - { - "__struct_id": 4, - "Appearance_Type": { - "type": "word", - "value": 269 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "Cha": { - "type": "byte", - "value": 8 - }, - "ChallengeRating": { - "type": "float", - "value": 0.5 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 4 - }, - "ClassLevel": { - "type": "short", - "value": 1 - } - } - ] - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 10 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dex": { - "type": "byte", - "value": 13 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "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": 16 - }, - "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": 16 - }, - "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": 11 - }, - "Cloth2Color": { - "type": "byte", - "value": 8 - }, - "Cost": { - "type": "dword", - "value": 5 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12841, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 1 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 30 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 166, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 61 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWLS001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswls001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 40 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 123 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 44 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 45 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 46 - } - } - ] - }, - "FirstName": { - "id": 12367, - "type": "cexolocstring", - "value": {} - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 0 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 10 - }, - "Int": { - "type": "byte", - "value": 10 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 0 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 12 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 0 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 129 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "nw_c2_default5" - }, - "ScriptDamaged": { - "type": "resref", - "value": "nw_c2_default6" - }, - "ScriptDeath": { - "type": "resref", - "value": "nw_c2_default7" - }, - "ScriptDialogue": { - "type": "resref", - "value": "nw_c2_default4" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "nw_c2_default8" - }, - "ScriptEndRound": { - "type": "resref", - "value": "nw_c2_default3" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "nw_c2_default1" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "nw_c2_defaulte" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "nw_c2_default2" - }, - "ScriptRested": { - "type": "resref", - "value": "nw_c2_defaulta" - }, - "ScriptSpawn": { - "type": "resref", - "value": "nw_c2_default9" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "nw_c2_defaultb" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "nw_c2_defaultd" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 4 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 177 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 4 - }, - "Str": { - "type": "byte", - "value": 15 - }, - "Subrace": { - "type": "cexostring", - "value": "" - }, - "Tag": { - "type": "cexostring", - "value": "NW_BANDIT001" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "bandit002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 12 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 138.5282135009766 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 28.8464469909668 - }, - "ZPosition": { - "type": "float", - "value": 0.01226291060447693 - } - }, - { - "__struct_id": 4, - "Appearance_Head": { - "type": "byte", - "value": 9 - }, - "Appearance_Type": { - "type": "word", - "value": 6 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, - "Cha": { - "type": "byte", - "value": 13 - }, - "ChallengeRating": { - "type": "float", - "value": 8.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 25 - }, - "ClassLevel": { - "type": "short", - "value": 4 - } - }, - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 8 - }, - "ClassLevel": { - "type": "short", - "value": 8 - } - } - ] - }, - "Color_Hair": { - "type": "byte", - "value": 11 - }, - "Color_Skin": { - "type": "byte", - "value": 9 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, - "Con": { - "type": "byte", - "value": 12 - }, - "Conversation": { - "type": "resref", - "value": "cv_corrak" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 46 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "id": 16816556, - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dex": { - "type": "byte", - "value": 15 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "ArmorPart_Belt": { - "type": "byte", - "value": 0 - }, - "ArmorPart_LBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LFArm": { - "type": "byte", - "value": 16 - }, - "ArmorPart_LFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_LShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_LShoul": { - "type": "byte", - "value": 15 - }, - "ArmorPart_LThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Neck": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Pelvis": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RFArm": { - "type": "byte", - "value": 16 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Robe": { - "type": "byte", - "value": 0 - }, - "ArmorPart_RShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RShoul": { - "type": "byte", - "value": 15 - }, - "ArmorPart_RThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Torso": { - "type": "byte", - "value": 16 - }, - "BaseItem": { - "type": "int", - "value": 16 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cloth1Color": { - "type": "byte", - "value": 1 - }, - "Cloth2Color": { - "type": "byte", - "value": 7 - }, - "Cost": { - "type": "dword", - "value": 10 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "Leather1Color": { - "type": "byte", - "value": 23 - }, - "Leather2Color": { - "type": "byte", - "value": 52 - }, - "LocalizedName": { - "id": 12835, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "aarcl002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 51 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 40 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1545, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WSWRP001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wswrp001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8192, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 25 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 190 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 12432, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 40586, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 51 - }, - "ModelPart3": { - "type": "byte", - "value": 12 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 4 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 16 - }, - "Subtype": { - "type": "word", - "value": 1 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMMBO008" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wammbo008" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16384, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 72 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13265, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPSP005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewpsp005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 32768, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 71 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13217, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPB005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewpb005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 65536, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 69 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 13238, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 19 - }, - "CostValue": { - "type": "word", - "value": 8 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 77 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_CREWPS005" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_crewps005" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 131072, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 73 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 16807410, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "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": 37 - }, - "Subtype": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 16 - }, - "CostValue": { - "type": "word", - "value": 152 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 53 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "ZEP_CRE_DOPPELH" - }, - "TemplateResRef": { - "type": "resref", - "value": "zep_cre_doppelh" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 15 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 228 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 10 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 206 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 193 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 347 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 41 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 251 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 289 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 50 - } - } - ] - }, - "FirstName": { - "id": 16808884, - "type": "cexolocstring", - "value": { - "0": "Corrak" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 1 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 46 - }, - "Int": { - "type": "byte", - "value": 13 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 7 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 70 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 174, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBWXL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wbwxl001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 1, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 25 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1519, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "ModelPart2": { - "type": "byte", - "value": 11 - }, - "ModelPart3": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMBO001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wambo001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 76 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 535, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 160 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GOLD001" - }, - "TemplateResRef": { - "type": "resref", - "value": "it_gold015" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 3, - "AddCost": { - "type": "dword", - "value": 10 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 10 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13293, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13292, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 2 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM002" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem002" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 4, - "AddCost": { - "type": "dword", - "value": 1500 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 1500 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13307, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13306, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 9 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM009" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem009" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 5, - "AddCost": { - "type": "dword", - "value": 120 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 120 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13311, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13310, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM011" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem011" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 6, - "AddCost": { - "type": "dword", - "value": 7 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 7 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13291, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13290, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 8 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 7, - "AddCost": { - "type": "dword", - "value": 145 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 145 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13315, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13314, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 13 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 9 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM013" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem013" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 8, - "AddCost": { - "type": "dword", - "value": 40 - }, - "BaseItem": { - "type": "int", - "value": 77 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 40 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "id": 13295, - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13294, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 3 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_GEM003" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_gem003" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 9, - "AddCost": { - "type": "dword", - "value": 20000 - }, - "BaseItem": { - "type": "int", - "value": 34 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 20000 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": { - "0": "Daern's Instant Fortress is a powerful artifact that allows you to essentially open up a box and pull out an entire fortress--fully functional, operated and useable. The fortress is mostly existant in an extra-dimmensional realm, and can be accessed once per day by the user's entire party. It is useful for storing your equipment and resting inside of dangerous places." - } - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "type": "cexolocstring", - "value": { - "0": "Daern's Instant Fortress" - } - }, - "ModelPart1": { - "type": "byte", - "value": 96 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__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": 335 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "daernfort" - }, - "TemplateResRef": { - "type": "resref", - "value": "item057" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "LastName": { - "type": "cexolocstring", - "value": {} - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 58 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 67 - }, - "Race": { - "type": "byte", - "value": 23 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "x2_def_attacked" - }, - "ScriptDamaged": { - "type": "resref", - "value": "x2_def_ondamage" - }, - "ScriptDeath": { - "type": "resref", - "value": "x2_def_ondeath" - }, - "ScriptDialogue": { - "type": "resref", - "value": "x2_def_onconv" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "x2_def_ondisturb" - }, - "ScriptEndRound": { - "type": "resref", - "value": "x2_def_endcombat" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "x2_def_heartbeat" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "x2_def_onblocked" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "talk2pc_onpercp" - }, - "ScriptRested": { - "type": "resref", - "value": "x2_def_rested" - }, - "ScriptSpawn": { - "type": "resref", - "value": "x2_def_spawn" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "x2_def_spellcast" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "x2_def_userdef" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 11 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 188 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 8 - }, - "Str": { - "type": "byte", - "value": 12 - }, - "Subrace": { - "type": "cexostring", - "value": "Shapechanger" - }, - "Tag": { - "type": "cexostring", - "value": "corrak2" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "corrak002" - }, - "WalkRate": { - "type": "int", - "value": 7 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 14 - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": 129.7807769775391 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 32.88162994384766 - }, - "ZPosition": { - "type": "float", - "value": -5.222045729169622e-006 - } - }, - { - "__struct_id": 4, - "Appearance_Head": { - "type": "byte", - "value": 20 - }, - "Appearance_Type": { - "type": "word", - "value": 6 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 - }, - "BodyBag": { - "type": "byte", - "value": 0 - }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, - "Cha": { - "type": "byte", - "value": 15 - }, - "ChallengeRating": { - "type": "float", - "value": 12.0 - }, - "ClassList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 3 - }, - "ClassLevel": { - "type": "short", - "value": 13 - }, - "MemorizedList0": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 33 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 33 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 1576 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 416 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 100 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 1500 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList1": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 421 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 32 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 32 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 53 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 2924 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 3085 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList2": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 1741 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 3 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 17 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 81 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 3398 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList3": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 11 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 11 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 34 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 454 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 3399 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 11 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 16 - } - } - ] - }, - "MemorizedList4": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 35 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 41 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 61 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 62 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList5": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 31 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 38 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 164 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList6": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 74 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 374 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, - "MemorizedList7": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 364 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - } - } - ] - }, - "Color_Hair": { - "type": "byte", - "value": 15 - }, - "Color_Skin": { - "type": "byte", - "value": 15 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, - "Con": { - "type": "byte", - "value": 16 - }, - "Conversation": { - "type": "resref", - "value": "cv_drusilla" - }, - "CRAdjust": { - "type": "int", - "value": 0 - }, - "CurrentHitPoints": { - "type": "short", - "value": 80 - }, - "DecayTime": { - "type": "dword", - "value": 5000 - }, - "Deity": { - "type": "cexostring", - "value": "" - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "This woman does not look happy to see you." - } - }, - "Dex": { - "type": "byte", - "value": 16 - }, - "Disarmable": { - "type": "byte", - "value": 1 - }, - "Equip_ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "ArmorPart_Belt": { - "type": "byte", - "value": 0 - }, - "ArmorPart_LBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LFArm": { - "type": "byte", - "value": 16 - }, - "ArmorPart_LFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_LHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_LShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_LShoul": { - "type": "byte", - "value": 15 - }, - "ArmorPart_LThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Neck": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Pelvis": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RBicep": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RFArm": { - "type": "byte", - "value": 16 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 4 - }, - "ArmorPart_RHand": { - "type": "byte", - "value": 1 - }, - "ArmorPart_Robe": { - "type": "byte", - "value": 0 - }, - "ArmorPart_RShin": { - "type": "byte", - "value": 8 - }, - "ArmorPart_RShoul": { - "type": "byte", - "value": 15 - }, - "ArmorPart_RThigh": { - "type": "byte", - "value": 4 - }, - "ArmorPart_Torso": { - "type": "byte", - "value": 16 - }, - "BaseItem": { - "type": "int", - "value": 16 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cloth1Color": { - "type": "byte", - "value": 1 - }, - "Cloth2Color": { - "type": "byte", - "value": 7 - }, - "Cost": { - "type": "dword", - "value": 10 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "Leather1Color": { - "type": "byte", - "value": 1 - }, - "Leather2Color": { - "type": "byte", - "value": 7 - }, - "LocalizedName": { - "id": 12835, - "type": "cexolocstring", - "value": {} - }, - "Metal1Color": { - "type": "byte", - "value": 0 - }, - "Metal2Color": { - "type": "byte", - "value": 8 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_AARCL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_aarcl001" - }, - "XOrientation": { - "type": "float", - "value": 3.254646551642222e-019 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 16, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 28 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 51766 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13213, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "Identified": { - "type": "byte", - "value": 0 - }, - "LocalizedName": { - "id": 66588, - "type": "cexolocstring", - "value": { - "0": "+3 Flaming Club" - } - }, - "ModelPart1": { - "type": "byte", - "value": 253 - }, - "ModelPart2": { - "type": "byte", - "value": 254 - }, - "ModelPart3": { - "type": "byte", - "value": 251 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 4 - }, - "CostValue": { - "type": "word", - "value": 7 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 16 - }, - "Subtype": { - "type": "word", - "value": 10 - } - }, - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 2 - }, - "CostValue": { - "type": "word", - "value": 3 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 6 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "RA_WBLMCL_FLAME3" - }, - "TemplateResRef": { - "type": "resref", - "value": "ra_wblmcl_flame3" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 128, - "AddCost": { - "type": "dword", - "value": 10000 - }, - "BaseItem": { - "type": "int", - "value": 52 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 86051 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13460, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13459, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 12 - }, - "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": 4 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 51 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MRING004" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mring004" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 256, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 52 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 821 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 13454, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 13453, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "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": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 255 - }, - "PropertyName": { - "type": "word", - "value": 1 - }, - "Subtype": { - "type": "word", - "value": 0 - } - } - ] - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_IT_MRING001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_it_mring001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 4096, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 27 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 0 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1521, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "StackSize": { - "type": "word", - "value": 99 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WAMBU001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wambu001" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "FactionID": { - "type": "word", - "value": 9 - }, - "FeatList": { - "type": "list", - "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 199 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 4 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 944 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 377 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2917 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 198 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 258 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 202 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 32 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 33 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 36 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 2372 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 201 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 203 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 48 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 337 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 200 - } - } - ] - }, - "FirstName": { - "type": "cexolocstring", - "value": { - "0": "Drusilla the Druid" - } - }, - "fortbonus": { - "type": "short", - "value": 0 - }, - "Gender": { - "type": "byte", - "value": 1 - }, - "GoodEvil": { - "type": "byte", - "value": 50 - }, - "HitPoints": { - "type": "short", - "value": 80 - }, - "Int": { - "type": "byte", - "value": 14 - }, - "Interruptable": { - "type": "byte", - "value": 1 - }, - "IsImmortal": { - "type": "byte", - "value": 0 - }, - "IsPC": { - "type": "byte", - "value": 0 - }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 61 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 2 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 1555, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 11 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [] - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "NW_WBWSL001" - }, - "TemplateResRef": { - "type": "resref", - "value": "nw_wbwsl001" - }, - "XOrientation": { - "type": "float", - "value": 3.433181237595802e-043 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 1, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 75 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 1260 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 16830214, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 817, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 123 - } - }, - { - "__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": 225 - } - }, - { - "__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 - } - }, - { - "__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 - } - }, - { - "__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": 104 - } - }, - { - "__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 - } - }, - { - "__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": 79 - } - }, - { - "__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": 207 - } - }, - { - "__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": 247 - } - }, - { - "__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": 187 - } - }, - { - "__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": 93 - } - }, - { - "__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": 190 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 1 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "PRC_SCR_123" - }, - "TemplateResRef": { - "type": "resref", - "value": "prc_scr_123" - }, - "XOrientation": { - "type": "float", - "value": 0.0 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - }, - { - "__struct_id": 2, - "AddCost": { - "type": "dword", - "value": 0 - }, - "BaseItem": { - "type": "int", - "value": 75 - }, - "Charges": { - "type": "byte", - "value": 0 - }, - "Cost": { - "type": "dword", - "value": 3277 - }, - "Cursed": { - "type": "byte", - "value": 0 - }, - "DescIdentified": { - "id": 16789768, - "type": "cexolocstring", - "value": {} - }, - "Description": { - "type": "cexolocstring", - "value": {} - }, - "Dropable": { - "type": "byte", - "value": 1 - }, - "Identified": { - "type": "byte", - "value": 1 - }, - "LocalizedName": { - "id": 16789764, - "type": "cexolocstring", - "value": {} - }, - "ModelPart1": { - "type": "byte", - "value": 1 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PropertiesList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "ChanceAppear": { - "type": "byte", - "value": 100 - }, - "CostTable": { - "type": "byte", - "value": 3 - }, - "CostValue": { - "type": "word", - "value": 1 - }, - "Param1": { - "type": "byte", - "value": 255 - }, - "Param1Value": { - "type": "byte", - "value": 0 - }, - "PropertyName": { - "type": "word", - "value": 15 - }, - "Subtype": { - "type": "word", - "value": 1455 - } - }, - { - "__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": 225 - } - }, - { - "__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 - } - }, - { - "__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 - } - }, - { - "__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": 247 - } - }, - { - "__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 - } - }, - { - "__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": 93 - } - }, - { - "__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": 190 - } - }, - { - "__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": 207 - } - } - ] - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - }, - "StackSize": { - "type": "word", - "value": 1 - }, - "Stolen": { - "type": "byte", - "value": 0 - }, - "Tag": { - "type": "cexostring", - "value": "PRC_SCR_1455" - }, - "TemplateResRef": { - "type": "resref", - "value": "prc_scr_1455" - }, - "XOrientation": { - "type": "float", - "value": 3.777837089670124e-017 - }, - "XPosition": { - "type": "float", - "value": -1.0 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": -1.0 - }, - "ZPosition": { - "type": "float", - "value": -1.0 - } - } - ] - }, - "LastName": { - "type": "cexolocstring", - "value": { - "0": "" - } - }, - "LawfulChaotic": { - "type": "byte", - "value": 50 - }, - "Lootable": { - "type": "byte", - "value": 0 - }, - "MaxHitPoints": { - "type": "short", - "value": 119 - }, - "NaturalAC": { - "type": "byte", - "value": 0 - }, - "NoPermDeath": { - "type": "byte", - "value": 1 - }, - "PerceptionRange": { - "type": "byte", - "value": 11 - }, - "Phenotype": { - "type": "int", - "value": 0 - }, - "Plot": { - "type": "byte", - "value": 0 - }, - "PortraitId": { - "type": "word", - "value": 2345 - }, - "Race": { - "type": "byte", - "value": 6 - }, - "refbonus": { - "type": "short", - "value": 0 - }, - "ScriptAttacked": { - "type": "resref", - "value": "x2_def_attacked" - }, - "ScriptDamaged": { - "type": "resref", - "value": "x2_def_ondamage" - }, - "ScriptDeath": { - "type": "resref", - "value": "x2_def_ondeath" - }, - "ScriptDialogue": { - "type": "resref", - "value": "x2_def_onconv" - }, - "ScriptDisturbed": { - "type": "resref", - "value": "x2_def_ondisturb" - }, - "ScriptEndRound": { - "type": "resref", - "value": "x2_def_endcombat" - }, - "ScriptHeartbeat": { - "type": "resref", - "value": "x2_def_heartbeat" - }, - "ScriptOnBlocked": { - "type": "resref", - "value": "x2_def_onblocked" - }, - "ScriptOnNotice": { - "type": "resref", - "value": "x2_def_percept" - }, - "ScriptRested": { - "type": "resref", - "value": "x2_def_rested" - }, - "ScriptSpawn": { - "type": "resref", - "value": "x2_def_spawn" - }, - "ScriptSpellAt": { - "type": "resref", - "value": "x2_def_spellcast" - }, - "ScriptUserDefine": { - "type": "resref", - "value": "x2_def_userdef" - }, - "SkillList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 16 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 15 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 14 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 14 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 12 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 16 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 14 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - } - ] - }, - "SoundSetFile": { - "type": "word", - "value": 194 - }, - "SpecAbilityList": { - "type": "list", - "value": [] - }, - "StartingPackage": { - "type": "byte", - "value": 3 - }, - "Str": { - "type": "byte", - "value": 13 - }, - "Subrace": { - "type": "cexostring", - "value": "Human" - }, - "Tag": { - "type": "cexostring", - "value": "NPC_DRUSILLA" - }, - "Tail_New": { - "type": "dword", - "value": 0 - }, - "TemplateList": { - "type": "list", - "value": [] - }, - "TemplateResRef": { - "type": "resref", - "value": "drusilla" - }, - "VarTable": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "SET_NAME" - }, - "Type": { - "type": "dword", - "value": 3 - }, - "Value": { - "type": "cexostring", - "value": "Drusilla" - } - }, - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "RA_KEEPHEAD" - }, - "Type": { - "type": "dword", - "value": 1 - }, - "Value": { - "type": "int", - "value": 1 - } - }, - { - "__struct_id": 0, - "Name": { - "type": "cexostring", - "value": "RA_KEEPSKIN" - }, - "Type": { - "type": "dword", - "value": 1 - }, - "Value": { - "type": "int", - "value": 1 - } - } - ] - }, - "WalkRate": { - "type": "int", - "value": 4 - }, - "willbonus": { - "type": "short", - "value": 0 - }, - "Wings_New": { - "type": "dword", - "value": 0 - }, - "Wis": { - "type": "byte", - "value": 18 - }, - "XOrientation": { - "type": "float", - "value": 9.183731784599483e-040 - }, - "XPosition": { - "type": "float", - "value": 75.27557373046875 - }, - "YOrientation": { - "type": "float", - "value": 1.0 - }, - "YPosition": { - "type": "float", - "value": 128.3377227783203 - }, - "ZPosition": { - "type": "float", - "value": -1.098643660545349 - } - } - ] + "value": [] }, "Door List": { "type": "list", @@ -59307,6 +10991,209 @@ "type": "float", "value": 0.0 } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 1 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.02500000037252903 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.08532905578613281 + }, + "PointY": { + "type": "float", + "value": -27.73171997070313 + }, + "PointZ": { + "type": "float", + "value": 0.02500000037252903 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.351746082305908 + }, + "PointY": { + "type": "float", + "value": -27.77438354492188 + }, + "PointZ": { + "type": "float", + "value": 0.02499952353537083 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.266417503356934 + }, + "PointY": { + "type": "float", + "value": -1.52587890625e-005 + }, + "PointZ": { + "type": "float", + "value": 0.02500000037252903 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "WP_DruidGrove2FoHCentral" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "id": 14760, + "type": "cexolocstring", + "value": { + "0": "FoHCentral2DruidGrove" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "FoHCentral2DruidGrove" + }, + "TemplateResRef": { + "type": "resref", + "value": "newtransition" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 0.06595277786254883 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 103.0685348510742 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } } ] }, @@ -59555,6 +11442,439 @@ "type": "float", "value": -5.960464477539063e-008 } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_FoHCentral2DruidGrove" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 5.458148956298828 + }, + "YOrientation": { + "type": "float", + "value": 7.549790126404332e-008 + }, + "YPosition": { + "type": "float", + "value": 88.35357666015625 + }, + "ZPosition": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP03_SN12_SA_SR05M00_SD20M15_RW_PC05R_RG002M001_SU30_SG_DS2_FC4_RH20" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "group_brigands" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 129.9406433105469 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 27.05321311950684 + }, + "ZPosition": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN1_SA_SR05M00_SD20M15_RW_PC05R_SU30_DS2_RH15" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "BANDIT_GRAWLIC" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 6.390569497194409e-013 + }, + "XPosition": { + "type": "float", + "value": 131.1273040771484 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 26.96113204956055 + }, + "ZPosition": { + "type": "float", + "value": 0.08116722106933594 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN1_SA_SR05M00_SD20M15_RW_PC05R_SU30_DS2_RH15" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "BANDIT_JEL" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.874299734808724e-028 + }, + "XPosition": { + "type": "float", + "value": 131.2390899658203 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 27.27734184265137 + }, + "ZPosition": { + "type": "float", + "value": 0.08921432495117188 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN1_SA_SR05M00_SD20M15_RW_PC05R_SU30_DS2_RH15" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "BANDIT_ZANAPHIA" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 131.2612457275391 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 23.89725303649902 + }, + "ZPosition": { + "type": "float", + "value": 0.01140785217285156 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SN1_SA_SR05M00_SD20M15_RW_PC05R_SU30_DS2_RH10" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "BANDIT_CORRAK" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 4.671452862788824e-037 + }, + "XPosition": { + "type": "float", + "value": 131.3348388671875 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 27.45634841918945 + }, + "ZPosition": { + "type": "float", + "value": 0.09610176086425781 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Every 8 minutes (4 in-game hours) has a 10% chance to spawn a camp from the Forest of Hope encounter list.\n\nForest of Hope\nWandering Monsters\n\nCheck for encounters at 4 a.m. (just before dawn), 9 a.m., noon, dusk, 9 p.m., and midnight. Encounters occur on a roll of 1 on 1d10. If an encounter is indicated, roll 1d10 using the table below. The following cumulative modifiers apply: +2 if more than three miles off the main merchant road; +4 if the encounter occurs at night.\n\n1-2 Foot Patrol* (8 footmen, 2 knights, 1 sheriff)\n3-5 Outlaws (2d6 Com 1-3 outlaws, hiding from patrols)\n6-7 1d6 large monstrous hunting spiders\n8-9 Brigands* (6d4 brigands and 3 brigand leaders, led by a brigand warlock)\n10-11 1d3 worgs and 1d12 wolves\n12 Drusilla the Druid* and her pack of 30 wolves\n13 1d3 trolls\n14 3d6 stirges\n15-16 Nest of 3d6 large monstrous web-spinning spiders" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "id": 14817, + "type": "cexolocstring", + "value": { + "0": "SP_SA_SR30M20P_SD08_PC05R_DS2_CMD060_RS15" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "forest_of_hope" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_waypoint" + }, + "XOrientation": { + "type": "float", + "value": 1.285782425418201e-039 + }, + "XPosition": { + "type": "float", + "value": 69.97471618652344 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 59.78510665893555 + }, + "ZPosition": { + "type": "float", + "value": -4.96208667755127e-006 + } } ] } diff --git a/_module/git/grove_drusilla.git.json b/_module/git/grove_drusilla.git.json new file mode 100644 index 00000000..13d56d7e --- /dev/null +++ b/_module/git/grove_drusilla.git.json @@ -0,0 +1,23264 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 51 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 53 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 15 + }, + "MusicBattle": { + "type": "int", + "value": 36 + }, + "MusicDay": { + "type": "int", + "value": 5 + }, + "MusicDelay": { + "type": "int", + "value": 45000 + }, + "MusicNight": { + "type": "int", + "value": 6 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1831 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.57079541683197 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812850, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 68.85874176025391 + }, + "Y": { + "type": "float", + "value": 108.8669052124023 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1831 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812850, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 72.76129913330078 + }, + "Y": { + "type": "float", + "value": 108.6268463134766 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1834 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812966, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.87955474853516 + }, + "Y": { + "type": "float", + "value": 109.0762710571289 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1828 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812862, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES004" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones004" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.71178436279297 + }, + "Y": { + "type": "float", + "value": 108.6780319213867 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1841 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.57079541683197 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812954, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.48963928222656 + }, + "Y": { + "type": "float", + "value": 109.1405181884766 + }, + "Z": { + "type": "float", + "value": 0.002676010131835938 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1841 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.57079541683197 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812954, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 73.98637390136719 + }, + "Y": { + "type": "float", + "value": 108.5672225952148 + }, + "Z": { + "type": "float", + "value": 0.1555212736129761 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1840 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813933, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812942, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_STONES019" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_stones019" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.77617645263672 + }, + "Y": { + "type": "float", + "value": 106.4410629272461 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1955 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810939, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811228, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 460 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BOWL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bowl002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.89743804931641 + }, + "Y": { + "type": "float", + "value": 106.4027633666992 + }, + "Z": { + "type": "float", + "value": 0.4467196762561798 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2345 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810848, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811176, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 516 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_LIGHTSHFT001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_lightshft001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.8294677734375 + }, + "Y": { + "type": "float", + "value": 106.5571517944336 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926988542079926 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 92.54206848144531 + }, + "Y": { + "type": "float", + "value": 107.4076232910156 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 119.2468643188477 + }, + "Y": { + "type": "float", + "value": 70.53111267089844 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 106.4510192871094 + }, + "Y": { + "type": "float", + "value": 23.05075836181641 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 80.55314636230469 + }, + "Y": { + "type": "float", + "value": 30.32120132446289 + }, + "Z": { + "type": "float", + "value": 0.001944780349731445 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926988542079926 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 22.73822212219238 + }, + "Y": { + "type": "float", + "value": 24.36621284484863 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2800 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16810962, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813232, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREEBIG" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treebig" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 14.50412845611572 + }, + "Y": { + "type": "float", + "value": 75.94358062744141 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.85938262939453 + }, + "Y": { + "type": "float", + "value": 70.42284393310547 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 59.38578033447266 + }, + "Y": { + "type": "float", + "value": 113.4620361328125 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 99.81539154052734 + }, + "Y": { + "type": "float", + "value": 93.82038116455078 + }, + "Z": { + "type": "float", + "value": -1.788139343261719e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 111.4720458984375 + }, + "Y": { + "type": "float", + "value": 63.46042251586914 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 131.9441070556641 + }, + "Y": { + "type": "float", + "value": 31.11823463439941 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 85.95614624023438 + }, + "Y": { + "type": "float", + "value": 10.1692066192627 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.91457366943359 + }, + "Y": { + "type": "float", + "value": 21.39688110351563 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.64768218994141 + }, + "Y": { + "type": "float", + "value": 77.75426483154297 + }, + "Z": { + "type": "float", + "value": 0.02536725997924805 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.11038589477539 + }, + "Y": { + "type": "float", + "value": 79.25016784667969 + }, + "Z": { + "type": "float", + "value": 4.76837158203125e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 64.45685577392578 + }, + "Y": { + "type": "float", + "value": 134.2687225341797 + }, + "Z": { + "type": "float", + "value": -1.95145583152771 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 79.81576538085938 + }, + "Y": { + "type": "float", + "value": 135.4115753173828 + }, + "Z": { + "type": "float", + "value": 1.974786043167114 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.89527893066406 + }, + "Y": { + "type": "float", + "value": 135.9932098388672 + }, + "Z": { + "type": "float", + "value": 5.748786926269531 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 154.6021423339844 + }, + "Y": { + "type": "float", + "value": 112.2076644897461 + }, + "Z": { + "type": "float", + "value": 7.859816074371338 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 155.2037048339844 + }, + "Y": { + "type": "float", + "value": 85.09397888183594 + }, + "Z": { + "type": "float", + "value": 11.47466468811035 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 154.9012908935547 + }, + "Y": { + "type": "float", + "value": 34.66696929931641 + }, + "Z": { + "type": "float", + "value": 10.86988830566406 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 154.8044891357422 + }, + "Y": { + "type": "float", + "value": 45.23269271850586 + }, + "Z": { + "type": "float", + "value": 10.16152858734131 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.43230056762695 + }, + "Y": { + "type": "float", + "value": 14.25628852844238 + }, + "Z": { + "type": "float", + "value": -2.391586780548096 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.24642944335938 + }, + "Y": { + "type": "float", + "value": 24.37094879150391 + }, + "Z": { + "type": "float", + "value": -1.677123785018921 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.10293579101563 + }, + "Y": { + "type": "float", + "value": 5.804609775543213 + }, + "Z": { + "type": "float", + "value": 1.608587503433228 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.395678520202637 + }, + "Y": { + "type": "float", + "value": 45.08874130249023 + }, + "Z": { + "type": "float", + "value": 7.832812786102295 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.41652774810791 + }, + "Y": { + "type": "float", + "value": 55.40193557739258 + }, + "Z": { + "type": "float", + "value": 7.405479431152344 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.352445602416992 + }, + "Y": { + "type": "float", + "value": 84.62773132324219 + }, + "Z": { + "type": "float", + "value": -2.335284233093262 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 26.15653610229492 + }, + "Y": { + "type": "float", + "value": 85.03086853027344 + }, + "Z": { + "type": "float", + "value": -1.667195320129395 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 2228 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16810951, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813488, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_WATERFALL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_waterfall001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.25503921508789 + }, + "Y": { + "type": "float", + "value": 110.2757949829102 + }, + "Z": { + "type": "float", + "value": -2.572461605072022 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 51.87382507324219 + }, + "Y": { + "type": "float", + "value": 120.9312515258789 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 78.62605285644531 + }, + "Y": { + "type": "float", + "value": 101.8264923095703 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 63.99761199951172 + }, + "Y": { + "type": "float", + "value": 77.54184722900391 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 76.07218170166016 + }, + "Y": { + "type": "float", + "value": 33.97929000854492 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 117.9189758300781 + }, + "Y": { + "type": "float", + "value": 35.27658081054688 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 150.0630798339844 + }, + "Y": { + "type": "float", + "value": 59.21949768066406 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 135.6133422851563 + }, + "Y": { + "type": "float", + "value": 98.94291687011719 + }, + "Z": { + "type": "float", + "value": 1.000828862190247 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 99.93332672119141 + }, + "Y": { + "type": "float", + "value": 93.84130096435547 + }, + "Z": { + "type": "float", + "value": 0.3229023218154907 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1584 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.981747031211853 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811864, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOOT002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_foot002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 97.9547119140625 + }, + "Y": { + "type": "float", + "value": 83.87438201904297 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1589 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926988542079926 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811792, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIST003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fist003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 101.9193344116211 + }, + "Y": { + "type": "float", + "value": 61.10067367553711 + }, + "Z": { + "type": "float", + "value": 0.07925796508789063 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1588 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812004, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.24735450744629 + }, + "Y": { + "type": "float", + "value": 19.37003707885742 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1590 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812010, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND011" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand011" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.04128837585449 + }, + "Y": { + "type": "float", + "value": 31.03093147277832 + }, + "Z": { + "type": "float", + "value": -2.905726432800293e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1582 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.981747031211853 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812036, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2591 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HEAD003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_head003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.492709159851074 + }, + "Y": { + "type": "float", + "value": 72.305908203125 + }, + "Z": { + "type": "float", + "value": 0.009999968111515045 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1584 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.178097248077393 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811864, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOOT002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_foot002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.66965675354004 + }, + "Y": { + "type": "float", + "value": 130.9687347412109 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1588 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813828, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812004, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 449 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_HAND008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_hand008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.00296306610107 + }, + "Y": { + "type": "float", + "value": 120.3318481445313 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 114.8327865600586 + }, + "Y": { + "type": "float", + "value": 102.7860412597656 + }, + "Z": { + "type": "float", + "value": 1.620000243186951 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 108.5869064331055 + }, + "Y": { + "type": "float", + "value": 105.7174072265625 + }, + "Z": { + "type": "float", + "value": 1.054024577140808 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 130.5841064453125 + }, + "Y": { + "type": "float", + "value": 119.6363525390625 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 146.7866363525391 + }, + "Y": { + "type": "float", + "value": 121.4198226928711 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 76.02133941650391 + }, + "Y": { + "type": "float", + "value": 78.10999298095703 + }, + "Z": { + "type": "float", + "value": 0.03741268813610077 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 99.60224151611328 + }, + "Y": { + "type": "float", + "value": 50.46223831176758 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.51276397705078 + }, + "Y": { + "type": "float", + "value": 27.96085357666016 + }, + "Z": { + "type": "float", + "value": -3.576278686523438e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.97270965576172 + }, + "Y": { + "type": "float", + "value": 53.03590774536133 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.7448410987854 + }, + "Y": { + "type": "float", + "value": 60.58353042602539 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.6920051574707 + }, + "Y": { + "type": "float", + "value": 118.8316650390625 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2034 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811856, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG003" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog003" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.10149192810059 + }, + "Y": { + "type": "float", + "value": 80.91099548339844 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2035 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811854, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.01345825195313 + }, + "Y": { + "type": "float", + "value": 105.4363021850586 + }, + "Z": { + "type": "float", + "value": 0.5594351887702942 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2036 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813751, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811852, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fog001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.83828258514404 + }, + "Y": { + "type": "float", + "value": 128.6518249511719 + }, + "Z": { + "type": "float", + "value": 0.1669089496135712 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2341 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16813606, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812252, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 445 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_LOG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_log001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.94855499267578 + }, + "Y": { + "type": "float", + "value": 41.52107620239258 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 83.18875885009766 + }, + "Y": { + "type": "float", + "value": 77.12877655029297 + }, + "Z": { + "type": "float", + "value": 0.06186223775148392 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 90.97149658203125 + }, + "Y": { + "type": "float", + "value": 92.14652252197266 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1776 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813703, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812740, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB042" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub042" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 90.414306640625 + }, + "Y": { + "type": "float", + "value": 80.93959808349609 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 75.08300018310547 + }, + "Y": { + "type": "float", + "value": 85.04520416259766 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1776 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813703, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812740, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB042" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub042" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 63.18656921386719 + }, + "Y": { + "type": "float", + "value": 91.53858184814453 + }, + "Z": { + "type": "float", + "value": 0.08081400394439697 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.61887645721436 + }, + "Y": { + "type": "float", + "value": 77.35160064697266 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.240891456604 + }, + "Y": { + "type": "float", + "value": 71.77835845947266 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.570796132087708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.28645515441895 + }, + "Y": { + "type": "float", + "value": 72.89463043212891 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.8682746887207 + }, + "Y": { + "type": "float", + "value": 66.05329895019531 + }, + "Z": { + "type": "float", + "value": 0.08755016326904297 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.84845352172852 + }, + "Y": { + "type": "float", + "value": 45.22974014282227 + }, + "Z": { + "type": "float", + "value": 0.09953927248716354 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 86.6180419921875 + }, + "Y": { + "type": "float", + "value": 20.91245269775391 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 89.5936279296875 + }, + "Y": { + "type": "float", + "value": 11.15739345550537 + }, + "Z": { + "type": "float", + "value": -1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1966 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926990330219269 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813615, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811742, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN002" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 118.3187866210938 + }, + "Y": { + "type": "float", + "value": 38.96815872192383 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1964 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813879, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811298, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BUSHFERN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_bushfern001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 120.8291473388672 + }, + "Y": { + "type": "float", + "value": 50.37915802001953 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1751 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813264, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE016" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree016" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 120.2086791992188 + }, + "Y": { + "type": "float", + "value": 36.77597045898438 + }, + "Z": { + "type": "float", + "value": 0.02685247361660004 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1754 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813262, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE019" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree019" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 133.244140625 + }, + "Y": { + "type": "float", + "value": 45.84589004516602 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1752 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813250, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE017" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree017" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 143.2871704101563 + }, + "Y": { + "type": "float", + "value": 70.97923278808594 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3079 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814217, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814114, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREANTTREE" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_treanttree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 131.3065185546875 + }, + "Y": { + "type": "float", + "value": 78.23518371582031 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1771 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813288, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE030" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree030" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 117.2073745727539 + }, + "Y": { + "type": "float", + "value": 120.4144287109375 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1737 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.767145752906799 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813234, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 101.6394653320313 + }, + "Y": { + "type": "float", + "value": 109.1534423828125 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1737 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.3926990330219269 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813234, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE008" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree008" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 74.87053680419922 + }, + "Y": { + "type": "float", + "value": 91.53864288330078 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 68.38870239257813 + }, + "Y": { + "type": "float", + "value": 122.7048263549805 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 80.55895233154297 + }, + "Y": { + "type": "float", + "value": 114.7508392333984 + }, + "Z": { + "type": "float", + "value": -2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 76.78556823730469 + }, + "Y": { + "type": "float", + "value": 122.8567581176758 + }, + "Z": { + "type": "float", + "value": -5.7220458984375e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1808 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7853982448577881 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813817, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811832, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FLOWERS006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_flowers006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 131.2801361083984 + }, + "Y": { + "type": "float", + "value": 118.8613433837891 + }, + "Z": { + "type": "float", + "value": -2.980232238769531e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1808 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813817, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811832, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FLOWERS006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_flowers006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 140.2027435302734 + }, + "Y": { + "type": "float", + "value": 68.98563385009766 + }, + "Z": { + "type": "float", + "value": 5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 2046 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813760, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16811770, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_FIREFLIES001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_fireflies001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 140.3957214355469 + }, + "Y": { + "type": "float", + "value": 71.91354370117188 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3364 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Chrysanthemum" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2717 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_006" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_006" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 134.9176330566406 + }, + "Y": { + "type": "float", + "value": 61.90229797363281 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3360 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Lily" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2713 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_005" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_005" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 132.4945526123047 + }, + "Y": { + "type": "float", + "value": 49.35886764526367 + }, + "Z": { + "type": "float", + "value": -5.960464477539063e-008 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3366 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Carnation Pink" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2719 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 95.06739807128906 + }, + "Y": { + "type": "float", + "value": 32.54276657104492 + }, + "Z": { + "type": "float", + "value": 0.8592840433120728 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3366 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Pickable Flower - Carnation Pink" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2719 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_MS_FLP_001" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_ms_flp_001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 57.20362091064453 + }, + "Y": { + "type": "float", + "value": 47.16063690185547 + }, + "Z": { + "type": "float", + "value": 2.384185791015625e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817476272583008 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.25080871582031 + }, + "Y": { + "type": "float", + "value": 12.40236377716065 + }, + "Z": { + "type": "float", + "value": 0.02247655391693115 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1775 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.5890485644340515 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 16813599, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16812738, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2496 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_SHRUB041" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_shrub041" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 26.05330467224121 + }, + "Y": { + "type": "float", + "value": 27.98314476013184 + }, + "Z": { + "type": "float", + "value": -5.222045729169622e-006 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 3076 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "id": 16814212, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16814106, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2660 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_REDFERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_redfern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 24.42771911621094 + }, + "Y": { + "type": "float", + "value": 31.61359977722168 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1741 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "id": 14746, + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "id": 16813244, + "type": "cexolocstring", + "value": {} + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_TREE012" + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_tree012" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.23911666870117 + }, + "Y": { + "type": "float", + "value": 66.49933624267578 + }, + "Z": { + "type": "float", + "value": 1.192092895507813e-007 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/_module/git/starting_area.git.json b/_module/git/starting_area.git.json index 12240d42..6eedc061 100644 --- a/_module/git/starting_area.git.json +++ b/_module/git/starting_area.git.json @@ -646,7 +646,7 @@ }, "FactionID": { "type": "word", - "value": 3 + "value": 7 }, "FeatList": { "type": "list", diff --git a/_module/ifo/module.ifo.json b/_module/ifo/module.ifo.json index 6986c091..c6fbce78 100644 --- a/_module/ifo/module.ifo.json +++ b/_module/ifo/module.ifo.json @@ -1728,6 +1728,20 @@ "type": "resref", "value": "wol_a_dymond" } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "grove_drusilla" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "foh_druids_grove" + } } ] }, @@ -1810,7 +1824,7 @@ "__struct_id": 8, "Mod_Hak": { "type": "cexostring", - "value": "cep3_fancymaps" + "value": "cep3_armor" } }, { @@ -1862,6 +1876,13 @@ "value": "ratdog_creatures" } }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "ratdog_soundsets" + } + }, { "__struct_id": 8, "Mod_Hak": { @@ -2747,7 +2768,7 @@ }, "Value": { "type": "int", - "value": 1 + "value": 0 } }, { @@ -3362,7 +3383,7 @@ }, "Value": { "type": "int", - "value": 0 + "value": 5 } }, { @@ -3484,6 +3505,21 @@ "type": "int", "value": 255 } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_SOMATIC_ITEMS " + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } } ] } diff --git a/_module/itp/creaturepalcus.itp.json b/_module/itp/creaturepalcus.itp.json index 54462537..0d61b77f 100644 --- a/_module/itp/creaturepalcus.itp.json +++ b/_module/itp/creaturepalcus.itp.json @@ -1397,6 +1397,25 @@ "LIST": { "type": "list", "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Drusilla" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Compaion: Sheiju" + }, + "RESREF": { + "type": "resref", + "value": "ac_sheiju" + } + }, { "__struct_id": 0, "CR": { @@ -12088,19 +12107,19 @@ "__struct_id": 0, "CR": { "type": "float", - "value": 16.0 + "value": 17.0 }, "FACTION": { "type": "cexostring", "value": "Hostile" }, + "NAME": { + "type": "cexostring", + "value": "Balrog" + }, "RESREF": { "type": "resref", "value": "zep_balrog" - }, - "STRREF": { - "type": "dword", - "value": 16808770 } }, { @@ -14128,44 +14147,6 @@ "value": 16808772 } }, - { - "__struct_id": 0, - "CR": { - "type": "float", - "value": 8.0 - }, - "FACTION": { - "type": "cexostring", - "value": "bandit1" - }, - "NAME": { - "type": "cexostring", - "value": "Corrak" - }, - "RESREF": { - "type": "resref", - "value": "corrak002" - } - }, - { - "__struct_id": 0, - "CR": { - "type": "float", - "value": 8.0 - }, - "FACTION": { - "type": "cexostring", - "value": "bandit1" - }, - "NAME": { - "type": "cexostring", - "value": "Corrak" - }, - "RESREF": { - "type": "resref", - "value": "corrak1" - } - }, { "__struct_id": 0, "CR": { @@ -16812,6 +16793,25 @@ "LIST": { "type": "list", "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "BASE_DWARF" + }, + "RESREF": { + "type": "resref", + "value": "base_dwarf" + } + }, { "__struct_id": 0, "CR": { @@ -16987,19 +16987,19 @@ "__struct_id": 0, "CR": { "type": "float", - "value": 4.0 + "value": 5.0 }, "FACTION": { "type": "cexostring", - "value": "Neutral" + "value": "bandit1" }, "NAME": { "type": "cexostring", - "value": "Grawlic" + "value": "Grawlic the Bandit" }, "RESREF": { "type": "resref", - "value": "grawlic" + "value": "bandit_grawlic" } }, { @@ -17755,21 +17755,32 @@ }, { "__struct_id": 0, - "CR": { - "type": "float", - "value": 5.0 - }, - "FACTION": { - "type": "cexostring", - "value": "Neutral" - }, "NAME": { "type": "cexostring", - "value": "Zanafia" + "value": "Zanafia the Bandit" }, "RESREF": { "type": "resref", - "value": "zanafia" + "value": "bandit_zanafia" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "bandit1" + }, + "NAME": { + "type": "cexostring", + "value": "Zanaphia the Bandit" + }, + "RESREF": { + "type": "resref", + "value": "bandit_zanaphia" } } ] @@ -18131,19 +18142,19 @@ "__struct_id": 0, "CR": { "type": "float", - "value": 5.0 + "value": 7.0 }, "FACTION": { "type": "cexostring", - "value": "Neutral" + "value": "bandit1" }, "NAME": { "type": "cexostring", - "value": "Jel" + "value": "Jel the Bandit" }, "RESREF": { "type": "resref", - "value": "jel" + "value": "bandit_jel" } }, { @@ -18428,25 +18439,6 @@ "value": "bandit004" } }, - { - "__struct_id": 0, - "CR": { - "type": "float", - "value": 7.0 - }, - "FACTION": { - "type": "cexostring", - "value": "Hostile" - }, - "NAME": { - "type": "cexostring", - "value": "Brigand :Human Male Wizard 01" - }, - "RESREF": { - "type": "resref", - "value": "ra_m_brigwiz001" - } - }, { "__struct_id": 0, "CR": { @@ -18504,6 +18496,25 @@ "value": "ra_brigand001" } }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Brigand: Human Male Wizard 01" + }, + "RESREF": { + "type": "resref", + "value": "ra_m_brigwiz001" + } + }, { "__struct_id": 0, "CR": { @@ -18911,7 +18922,7 @@ }, "FACTION": { "type": "cexostring", - "value": "Animal" + "value": "Drusilla" }, "NAME": { "type": "cexostring", @@ -18919,7 +18930,7 @@ }, "RESREF": { "type": "resref", - "value": "drusilla" + "value": "npc_drusilla" } }, { @@ -20686,6 +20697,25 @@ "value": "clericoforcus" } }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "bandit1" + }, + "NAME": { + "type": "cexostring", + "value": "Corrak the Doppelganger" + }, + "RESREF": { + "type": "resref", + "value": "bandit_corrak" + } + }, { "__struct_id": 0, "CR": { diff --git a/_module/itp/itempalcus.itp.json b/_module/itp/itempalcus.itp.json index 05e3dfcc..e08d3343 100644 --- a/_module/itp/itempalcus.itp.json +++ b/_module/itp/itempalcus.itp.json @@ -12964,6 +12964,17 @@ "type": "resref", "value": "vaccousgrimoire" } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Zanaphia's Spellbook" + }, + "RESREF": { + "type": "resref", + "value": "ra_spbook_zana" + } } ] }, @@ -16304,6 +16315,17 @@ "value": "ringofakbeth" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Cantrips" + }, + "RESREF": { + "type": "resref", + "value": "ra_itmrng_wiz0" + } + }, { "__struct_id": 0, "NAME": { @@ -16799,6 +16821,61 @@ "value": "ra_it_gold010" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "100 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "1000 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "12 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "135 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "160 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold015" + } + }, { "__struct_id": 0, "NAME": { @@ -16810,6 +16887,17 @@ "value": "ra_it_gold175" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "2000 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold009" + } + }, { "__struct_id": 0, "NAME": { @@ -16821,6 +16909,28 @@ "value": "2000platinumcoin" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "220 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "25 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold003" + } + }, { "__struct_id": 0, "NAME": { @@ -16832,6 +16942,61 @@ "value": "ra_it_gold2600" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "295 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "ra_it_gold295" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "300 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "3000 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "303 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "313 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold019" + } + }, { "__struct_id": 0, "NAME": { @@ -16843,6 +17008,50 @@ "value": "ra_it_gold3300" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "400 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "500 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "500 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "500 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold008" + } + }, { "__struct_id": 0, "NAME": { @@ -16854,6 +17063,39 @@ "value": "ra_it_gold5000" } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "5000 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "50000 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "6828 Gold Pieces" + }, + "RESREF": { + "type": "resref", + "value": "it_gold017" + } + }, { "__struct_id": 0, "NAME": { @@ -17503,215 +17745,6 @@ "value": "goldore013" } }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold002" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold003" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold004" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold005" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold006" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold007" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold008" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold009" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold010" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold011" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold012" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold013" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold014" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold015" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold016" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold017" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold018" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold019" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "it_gold020" - }, - "STRREF": { - "type": "dword", - "value": 535 - } - }, { "__struct_id": 0, "NAME": { @@ -19031,160 +19064,6 @@ "LIST": { "type": "list", "value": [ - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_546" - }, - "STRREF": { - "type": "dword", - "value": 16778211 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_551" - }, - "STRREF": { - "type": "dword", - "value": 16778213 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_553" - }, - "STRREF": { - "type": "dword", - "value": 16778237 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_554" - }, - "STRREF": { - "type": "dword", - "value": 16778235 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_555" - }, - "STRREF": { - "type": "dword", - "value": 16778239 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_556" - }, - "STRREF": { - "type": "dword", - "value": 16778197 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_557" - }, - "STRREF": { - "type": "dword", - "value": 16778199 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_558" - }, - "STRREF": { - "type": "dword", - "value": 16778201 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_559" - }, - "STRREF": { - "type": "dword", - "value": 16778225 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_560" - }, - "STRREF": { - "type": "dword", - "value": 16778227 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_561" - }, - "STRREF": { - "type": "dword", - "value": 16778229 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_566" - }, - "STRREF": { - "type": "dword", - "value": 16778241 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_567" - }, - "STRREF": { - "type": "dword", - "value": 16778243 - } - }, - { - "__struct_id": 0, - "RESREF": { - "type": "resref", - "value": "prc_scr_569" - }, - "STRREF": { - "type": "dword", - "value": 16778353 - } - }, { "__struct_id": 0, "NAME": { @@ -19559,6 +19438,17 @@ "value": 16829180 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_560" + }, + "STRREF": { + "type": "dword", + "value": 16778227 + } + }, { "__struct_id": 0, "NAME": { @@ -23068,6 +22958,17 @@ "value": 6341 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_556" + }, + "STRREF": { + "type": "dword", + "value": 16778197 + } + }, { "__struct_id": 0, "RESREF": { @@ -24465,6 +24366,17 @@ "value": 16829556 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_546" + }, + "STRREF": { + "type": "dword", + "value": 16778211 + } + }, { "__struct_id": 0, "RESREF": { @@ -24630,6 +24542,50 @@ "value": 16825814 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_557" + }, + "STRREF": { + "type": "dword", + "value": 16778199 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_558" + }, + "STRREF": { + "type": "dword", + "value": 16778201 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_551" + }, + "STRREF": { + "type": "dword", + "value": 16778213 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_559" + }, + "STRREF": { + "type": "dword", + "value": 16778225 + } + }, { "__struct_id": 0, "RESREF": { @@ -24685,6 +24641,17 @@ "value": 6334 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_569" + }, + "STRREF": { + "type": "dword", + "value": 16778353 + } + }, { "__struct_id": 0, "RESREF": { @@ -24971,6 +24938,17 @@ "value": 3757 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_555" + }, + "STRREF": { + "type": "dword", + "value": 16778239 + } + }, { "__struct_id": 0, "RESREF": { @@ -25576,6 +25554,17 @@ "value": 16847284 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_554" + }, + "STRREF": { + "type": "dword", + "value": 16778235 + } + }, { "__struct_id": 0, "RESREF": { @@ -26918,6 +26907,17 @@ "value": 16829182 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_561" + }, + "STRREF": { + "type": "dword", + "value": 16778229 + } + }, { "__struct_id": 0, "RESREF": { @@ -27083,6 +27083,17 @@ "value": 16830394 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_553" + }, + "STRREF": { + "type": "dword", + "value": 16778237 + } + }, { "__struct_id": 0, "RESREF": { @@ -29569,6 +29580,17 @@ "value": 934 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_567" + }, + "STRREF": { + "type": "dword", + "value": 16778243 + } + }, { "__struct_id": 0, "NAME": { @@ -30251,6 +30273,17 @@ "value": 16832235 } }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_566" + }, + "STRREF": { + "type": "dword", + "value": 16778241 + } + }, { "__struct_id": 0, "RESREF": { @@ -35120,6 +35153,17 @@ "type": "resref", "value": "prc_serpbolt" } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Essence Bolts" + }, + "RESREF": { + "type": "resref", + "value": "ra_wammbo_shdess" + } } ] }, @@ -35213,7 +35257,7 @@ "__struct_id": 0, "NAME": { "type": "cexostring", - "value": "RA_WAXMGR_KEEN01" + "value": "Keen Greataxe +1" }, "RESREF": { "type": "resref", diff --git a/_module/itp/storepalcus.itp.json b/_module/itp/storepalcus.itp.json index 93d27e5f..780ea821 100644 --- a/_module/itp/storepalcus.itp.json +++ b/_module/itp/storepalcus.itp.json @@ -177,6 +177,17 @@ "value": 14807 } }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Outcasts' Store" + }, + "RESREF": { + "type": "resref", + "value": "store_outcast" + } + }, { "__struct_id": 0, "NAME": { diff --git a/_module/jrl/module.jrl.json b/_module/jrl/module.jrl.json index 8499a02e..7cae9f74 100644 --- a/_module/jrl/module.jrl.json +++ b/_module/jrl/module.jrl.json @@ -481,6 +481,74 @@ }, { "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "Tracks the party's dealings with Drusilla the Dark Druid." + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've heard the locals talk about a druid that went feral after her companion was slain by loggers." + } + } + }, + { + "__struct_id": 1, + "End": { + "type": "word", + "value": 1 + }, + "ID": { + "type": "dword", + "value": 90 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "After hearing her threats, I have slain the dark druid residing in the Forest of Hope, no more will her pack terrorize loggers & hunters in the area." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "A Vengeful Druid" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 4 + }, + "Tag": { + "type": "cexostring", + "value": "VengefulDruid" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 6, "Comment": { "type": "cexostring", "value": "" @@ -565,7 +633,7 @@ } }, { - "__struct_id": 6, + "__struct_id": 7, "Comment": { "type": "cexostring", "value": "" @@ -633,7 +701,7 @@ } }, { - "__struct_id": 7, + "__struct_id": 8, "Comment": { "type": "cexostring", "value": "" @@ -701,7 +769,7 @@ } }, { - "__struct_id": 8, + "__struct_id": 9, "Comment": { "type": "cexostring", "value": "" @@ -752,7 +820,7 @@ } }, { - "__struct_id": 9, + "__struct_id": 10, "Comment": { "type": "cexostring", "value": "" @@ -837,7 +905,7 @@ } }, { - "__struct_id": 10, + "__struct_id": 11, "Comment": { "type": "cexostring", "value": "" @@ -905,7 +973,7 @@ } }, { - "__struct_id": 11, + "__struct_id": 12, "Comment": { "type": "cexostring", "value": "" @@ -990,7 +1058,7 @@ } }, { - "__struct_id": 12, + "__struct_id": 13, "Comment": { "type": "cexostring", "value": "" @@ -1058,7 +1126,7 @@ } }, { - "__struct_id": 13, + "__struct_id": 14, "Comment": { "type": "cexostring", "value": "" @@ -1160,7 +1228,7 @@ } }, { - "__struct_id": 14, + "__struct_id": 15, "Comment": { "type": "cexostring", "value": "" @@ -1245,7 +1313,7 @@ } }, { - "__struct_id": 15, + "__struct_id": 16, "Comment": { "type": "cexostring", "value": "" @@ -1364,7 +1432,7 @@ } }, { - "__struct_id": 16, + "__struct_id": 17, "Comment": { "type": "cexostring", "value": "" @@ -1432,7 +1500,7 @@ } }, { - "__struct_id": 17, + "__struct_id": 18, "Comment": { "type": "cexostring", "value": "" @@ -1500,7 +1568,7 @@ } }, { - "__struct_id": 18, + "__struct_id": 19, "Comment": { "type": "cexostring", "value": "" @@ -1585,7 +1653,7 @@ } }, { - "__struct_id": 19, + "__struct_id": 20, "Comment": { "type": "cexostring", "value": "" @@ -1755,7 +1823,7 @@ } }, { - "__struct_id": 20, + "__struct_id": 21, "Comment": { "type": "cexostring", "value": "" @@ -1857,7 +1925,7 @@ } }, { - "__struct_id": 21, + "__struct_id": 22, "Comment": { "type": "cexostring", "value": "" @@ -1942,7 +2010,7 @@ } }, { - "__struct_id": 22, + "__struct_id": 23, "Comment": { "type": "cexostring", "value": "" @@ -1993,7 +2061,7 @@ } }, { - "__struct_id": 23, + "__struct_id": 24, "Comment": { "type": "cexostring", "value": "" @@ -2044,7 +2112,7 @@ } }, { - "__struct_id": 24, + "__struct_id": 25, "Comment": { "type": "cexostring", "value": "" @@ -2163,7 +2231,7 @@ } }, { - "__struct_id": 25, + "__struct_id": 26, "Comment": { "type": "cexostring", "value": "" @@ -2214,7 +2282,7 @@ } }, { - "__struct_id": 26, + "__struct_id": 27, "Comment": { "type": "cexostring", "value": "" @@ -2282,7 +2350,7 @@ } }, { - "__struct_id": 27, + "__struct_id": 28, "Comment": { "type": "cexostring", "value": "" @@ -2350,7 +2418,7 @@ } }, { - "__struct_id": 28, + "__struct_id": 29, "Comment": { "type": "cexostring", "value": "" @@ -2418,7 +2486,7 @@ } }, { - "__struct_id": 29, + "__struct_id": 30, "Comment": { "type": "cexostring", "value": "" @@ -2503,7 +2571,7 @@ } }, { - "__struct_id": 30, + "__struct_id": 31, "Comment": { "type": "cexostring", "value": "" @@ -2588,7 +2656,7 @@ } }, { - "__struct_id": 31, + "__struct_id": 32, "Comment": { "type": "cexostring", "value": "" diff --git a/_module/ncs/drusilla_ondeath.ncs b/_module/ncs/drusilla_ondeath.ncs new file mode 100644 index 00000000..078f7af8 Binary files /dev/null and b/_module/ncs/drusilla_ondeath.ncs differ diff --git a/_module/ncs/drusilla_onperce.ncs b/_module/ncs/drusilla_onperce.ncs new file mode 100644 index 00000000..73d121d8 Binary files /dev/null and b/_module/ncs/drusilla_onperce.ncs differ diff --git a/_module/ncs/j_ai_destroyself.ncs b/_module/ncs/j_ai_destroyself.ncs deleted file mode 100644 index 33ee61d0..00000000 Binary files a/_module/ncs/j_ai_destroyself.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_detercombat.ncs b/_module/ncs/j_ai_detercombat.ncs deleted file mode 100644 index 2cafb986..00000000 Binary files a/_module/ncs/j_ai_detercombat.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_heart_aimat.ncs b/_module/ncs/j_ai_heart_aimat.ncs deleted file mode 100644 index 6459aab7..00000000 Binary files a/_module/ncs/j_ai_heart_aimat.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_heart_buff.ncs b/_module/ncs/j_ai_heart_buff.ncs deleted file mode 100644 index f6ea79d9..00000000 Binary files a/_module/ncs/j_ai_heart_buff.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_heart_serch.ncs b/_module/ncs/j_ai_heart_serch.ncs deleted file mode 100644 index 1d0f1957..00000000 Binary files a/_module/ncs/j_ai_heart_serch.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onblocked.ncs b/_module/ncs/j_ai_onblocked.ncs deleted file mode 100644 index 51cf877f..00000000 Binary files a/_module/ncs/j_ai_onblocked.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_oncombatrou.ncs b/_module/ncs/j_ai_oncombatrou.ncs deleted file mode 100644 index f0c4a9c6..00000000 Binary files a/_module/ncs/j_ai_oncombatrou.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onconversat.ncs b/_module/ncs/j_ai_onconversat.ncs deleted file mode 100644 index d0abf404..00000000 Binary files a/_module/ncs/j_ai_onconversat.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_ondamaged.ncs b/_module/ncs/j_ai_ondamaged.ncs deleted file mode 100644 index 7a453780..00000000 Binary files a/_module/ncs/j_ai_ondamaged.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_ondeath.ncs b/_module/ncs/j_ai_ondeath.ncs deleted file mode 100644 index 83b78b79..00000000 Binary files a/_module/ncs/j_ai_ondeath.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_ondisturbed.ncs b/_module/ncs/j_ai_ondisturbed.ncs deleted file mode 100644 index 50058da3..00000000 Binary files a/_module/ncs/j_ai_ondisturbed.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onheartbeat.ncs b/_module/ncs/j_ai_onheartbeat.ncs deleted file mode 100644 index 10b29f7a..00000000 Binary files a/_module/ncs/j_ai_onheartbeat.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onpercieve.ncs b/_module/ncs/j_ai_onpercieve.ncs deleted file mode 100644 index f3749f3f..00000000 Binary files a/_module/ncs/j_ai_onpercieve.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onphiattack.ncs b/_module/ncs/j_ai_onphiattack.ncs deleted file mode 100644 index d7d1260c..00000000 Binary files a/_module/ncs/j_ai_onphiattack.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onrest.ncs b/_module/ncs/j_ai_onrest.ncs deleted file mode 100644 index cf7c7156..00000000 Binary files a/_module/ncs/j_ai_onrest.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onspawn.ncs b/_module/ncs/j_ai_onspawn.ncs deleted file mode 100644 index fb19b739..00000000 Binary files a/_module/ncs/j_ai_onspawn.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onspellcast.ncs b/_module/ncs/j_ai_onspellcast.ncs deleted file mode 100644 index 5911c146..00000000 Binary files a/_module/ncs/j_ai_onspellcast.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_onuserdef.ncs b/_module/ncs/j_ai_onuserdef.ncs deleted file mode 100644 index a269fc44..00000000 Binary files a/_module/ncs/j_ai_onuserdef.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_setweapons.ncs b/_module/ncs/j_ai_setweapons.ncs deleted file mode 100644 index 8af268a2..00000000 Binary files a/_module/ncs/j_ai_setweapons.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_walkwaypoin.ncs b/_module/ncs/j_ai_walkwaypoin.ncs deleted file mode 100644 index 579b5489..00000000 Binary files a/_module/ncs/j_ai_walkwaypoin.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_wingbuffet.ncs b/_module/ncs/j_ai_wingbuffet.ncs deleted file mode 100644 index d8d559a1..00000000 Binary files a/_module/ncs/j_ai_wingbuffet.ncs and /dev/null differ diff --git a/_module/ncs/j_ai_wingflying.ncs b/_module/ncs/j_ai_wingflying.ncs deleted file mode 100644 index 9056c450..00000000 Binary files a/_module/ncs/j_ai_wingflying.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_archer.ncs b/_module/ncs/j_sp_archer.ncs deleted file mode 100644 index 8e00f10f..00000000 Binary files a/_module/ncs/j_sp_archer.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_dragon.ncs b/_module/ncs/j_sp_dragon.ncs deleted file mode 100644 index 2be4cbbd..00000000 Binary files a/_module/ncs/j_sp_dragon.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_highmage.ncs b/_module/ncs/j_sp_highmage.ncs deleted file mode 100644 index 9e95badc..00000000 Binary files a/_module/ncs/j_sp_highmage.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_humleader.ncs b/_module/ncs/j_sp_humleader.ncs deleted file mode 100644 index 2f49b7fb..00000000 Binary files a/_module/ncs/j_sp_humleader.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_lichboss.ncs b/_module/ncs/j_sp_lichboss.ncs deleted file mode 100644 index 0aacd94a..00000000 Binary files a/_module/ncs/j_sp_lichboss.ncs and /dev/null differ diff --git a/_module/ncs/j_sp_lowintel.ncs b/_module/ncs/j_sp_lowintel.ncs deleted file mode 100644 index 56a24026..00000000 Binary files a/_module/ncs/j_sp_lowintel.ncs and /dev/null differ diff --git a/_module/ncs/no_ai_atk.ncs b/_module/ncs/no_ai_atk.ncs new file mode 100644 index 00000000..f3c202c9 Binary files /dev/null and b/_module/ncs/no_ai_atk.ncs differ diff --git a/_module/ncs/no_ai_blk.ncs b/_module/ncs/no_ai_blk.ncs new file mode 100644 index 00000000..b7806759 Binary files /dev/null and b/_module/ncs/no_ai_blk.ncs differ diff --git a/_module/ncs/no_ai_cmb.ncs b/_module/ncs/no_ai_cmb.ncs new file mode 100644 index 00000000..21de9c08 Binary files /dev/null and b/_module/ncs/no_ai_cmb.ncs differ diff --git a/_module/ncs/no_ai_cnv.ncs b/_module/ncs/no_ai_cnv.ncs new file mode 100644 index 00000000..263c905d Binary files /dev/null and b/_module/ncs/no_ai_cnv.ncs differ diff --git a/_module/ncs/no_ai_dam.ncs b/_module/ncs/no_ai_dam.ncs new file mode 100644 index 00000000..97a0be19 Binary files /dev/null and b/_module/ncs/no_ai_dam.ncs differ diff --git a/_module/ncs/no_ai_dis.ncs b/_module/ncs/no_ai_dis.ncs new file mode 100644 index 00000000..c3cccd5c Binary files /dev/null and b/_module/ncs/no_ai_dis.ncs differ diff --git a/_module/ncs/no_ai_dth.ncs b/_module/ncs/no_ai_dth.ncs new file mode 100644 index 00000000..9c1b7a5e Binary files /dev/null and b/_module/ncs/no_ai_dth.ncs differ diff --git a/_module/ncs/no_ai_hrt.ncs b/_module/ncs/no_ai_hrt.ncs new file mode 100644 index 00000000..0f810401 Binary files /dev/null and b/_module/ncs/no_ai_hrt.ncs differ diff --git a/_module/ncs/no_ai_per.ncs b/_module/ncs/no_ai_per.ncs new file mode 100644 index 00000000..383ee690 Binary files /dev/null and b/_module/ncs/no_ai_per.ncs differ diff --git a/_module/ncs/no_ai_rst.ncs b/_module/ncs/no_ai_rst.ncs new file mode 100644 index 00000000..f869d466 Binary files /dev/null and b/_module/ncs/no_ai_rst.ncs differ diff --git a/_module/ncs/no_ai_spt.ncs b/_module/ncs/no_ai_spt.ncs new file mode 100644 index 00000000..8e0a38ed Binary files /dev/null and b/_module/ncs/no_ai_spt.ncs differ diff --git a/_module/ncs/no_scr_asclis.ncs b/_module/ncs/no_scr_asclis.ncs new file mode 100644 index 00000000..77142e54 Binary files /dev/null and b/_module/ncs/no_scr_asclis.ncs differ diff --git a/_module/ncs/no_scr_cleanvars.ncs b/_module/ncs/no_scr_cleanvars.ncs new file mode 100644 index 00000000..a1f44bdc Binary files /dev/null and b/_module/ncs/no_scr_cleanvars.ncs differ diff --git a/_module/ncs/no_scr_excorpse.ncs b/_module/ncs/no_scr_excorpse.ncs new file mode 100644 index 00000000..dad7af59 Binary files /dev/null and b/_module/ncs/no_scr_excorpse.ncs differ diff --git a/_module/ncs/no_scr_logeq.ncs b/_module/ncs/no_scr_logeq.ncs new file mode 100644 index 00000000..f0289591 Binary files /dev/null and b/_module/ncs/no_scr_logeq.ncs differ diff --git a/_module/ncs/no_scr_logspnloc.ncs b/_module/ncs/no_scr_logspnloc.ncs new file mode 100644 index 00000000..a5a56b06 Binary files /dev/null and b/_module/ncs/no_scr_logspnloc.ncs differ diff --git a/_module/ncs/no_scr_shutdown.ncs b/_module/ncs/no_scr_shutdown.ncs new file mode 100644 index 00000000..617dc8c2 Binary files /dev/null and b/_module/ncs/no_scr_shutdown.ncs differ diff --git a/_module/ncs/no_spn_beh.ncs b/_module/ncs/no_spn_beh.ncs new file mode 100644 index 00000000..5434833b Binary files /dev/null and b/_module/ncs/no_spn_beh.ncs differ diff --git a/_module/ncs/no_spn_clr.ncs b/_module/ncs/no_spn_clr.ncs new file mode 100644 index 00000000..599a8863 Binary files /dev/null and b/_module/ncs/no_spn_clr.ncs differ diff --git a/_module/ncs/no_spn_fiend.ncs b/_module/ncs/no_spn_fiend.ncs new file mode 100644 index 00000000..245e632f Binary files /dev/null and b/_module/ncs/no_spn_fiend.ncs differ diff --git a/_module/ncs/no_spn_ftr.ncs b/_module/ncs/no_spn_ftr.ncs new file mode 100644 index 00000000..ca0ee343 Binary files /dev/null and b/_module/ncs/no_spn_ftr.ncs differ diff --git a/_module/ncs/no_spn_melcast1.ncs b/_module/ncs/no_spn_melcast1.ncs new file mode 100644 index 00000000..20271ed9 Binary files /dev/null and b/_module/ncs/no_spn_melcast1.ncs differ diff --git a/_module/ncs/no_spn_melcast2.ncs b/_module/ncs/no_spn_melcast2.ncs new file mode 100644 index 00000000..06f61cfa Binary files /dev/null and b/_module/ncs/no_spn_melcast2.ncs differ diff --git a/_module/ncs/no_spn_melcast3.ncs b/_module/ncs/no_spn_melcast3.ncs new file mode 100644 index 00000000..b8ffad6b Binary files /dev/null and b/_module/ncs/no_spn_melcast3.ncs differ diff --git a/_module/ncs/no_spn_melenh.ncs b/_module/ncs/no_spn_melenh.ncs new file mode 100644 index 00000000..d4be9687 Binary files /dev/null and b/_module/ncs/no_spn_melenh.ncs differ diff --git a/_module/ncs/no_spn_rftr.ncs b/_module/ncs/no_spn_rftr.ncs new file mode 100644 index 00000000..ca0ee343 Binary files /dev/null and b/_module/ncs/no_spn_rftr.ncs differ diff --git a/_module/ncs/no_spn_rftrcast1.ncs b/_module/ncs/no_spn_rftrcast1.ncs new file mode 100644 index 00000000..f9657c30 Binary files /dev/null and b/_module/ncs/no_spn_rftrcast1.ncs differ diff --git a/_module/ncs/no_spn_rngcast3.ncs b/_module/ncs/no_spn_rngcast3.ncs new file mode 100644 index 00000000..b5e90017 Binary files /dev/null and b/_module/ncs/no_spn_rngcast3.ncs differ diff --git a/_module/ncs/no_spn_rog.ncs b/_module/ncs/no_spn_rog.ncs new file mode 100644 index 00000000..9ac7f79e Binary files /dev/null and b/_module/ncs/no_spn_rog.ncs differ diff --git a/_module/ncs/no_spn_rogcast1.ncs b/_module/ncs/no_spn_rogcast1.ncs new file mode 100644 index 00000000..de19c5a8 Binary files /dev/null and b/_module/ncs/no_spn_rogcast1.ncs differ diff --git a/_module/ncs/no_spn_rogcast3.ncs b/_module/ncs/no_spn_rogcast3.ncs new file mode 100644 index 00000000..d681badd Binary files /dev/null and b/_module/ncs/no_spn_rogcast3.ncs differ diff --git a/_module/ncs/no_spn_rogenh.ncs b/_module/ncs/no_spn_rogenh.ncs new file mode 100644 index 00000000..8060a270 Binary files /dev/null and b/_module/ncs/no_spn_rogenh.ncs differ diff --git a/_module/ncs/no_spn_rogtel.ncs b/_module/ncs/no_spn_rogtel.ncs new file mode 100644 index 00000000..a8638dba Binary files /dev/null and b/_module/ncs/no_spn_rogtel.ncs differ diff --git a/_module/ncs/no_spn_summ.ncs b/_module/ncs/no_spn_summ.ncs new file mode 100644 index 00000000..69728628 Binary files /dev/null and b/_module/ncs/no_spn_summ.ncs differ diff --git a/_module/ncs/no_spn_wiz.ncs b/_module/ncs/no_spn_wiz.ncs new file mode 100644 index 00000000..a00091d3 Binary files /dev/null and b/_module/ncs/no_spn_wiz.ncs differ diff --git a/_module/ncs/nw_c2_default1.ncs b/_module/ncs/nw_c2_default1.ncs deleted file mode 100644 index 10b29f7a..00000000 Binary files a/_module/ncs/nw_c2_default1.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default2.ncs b/_module/ncs/nw_c2_default2.ncs deleted file mode 100644 index a60346d2..00000000 Binary files a/_module/ncs/nw_c2_default2.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default3.ncs b/_module/ncs/nw_c2_default3.ncs deleted file mode 100644 index f0c4a9c6..00000000 Binary files a/_module/ncs/nw_c2_default3.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default4.ncs b/_module/ncs/nw_c2_default4.ncs deleted file mode 100644 index d0abf404..00000000 Binary files a/_module/ncs/nw_c2_default4.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default5.ncs b/_module/ncs/nw_c2_default5.ncs deleted file mode 100644 index d7d1260c..00000000 Binary files a/_module/ncs/nw_c2_default5.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default6.ncs b/_module/ncs/nw_c2_default6.ncs deleted file mode 100644 index 7a453780..00000000 Binary files a/_module/ncs/nw_c2_default6.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default7.ncs b/_module/ncs/nw_c2_default7.ncs deleted file mode 100644 index 83b78b79..00000000 Binary files a/_module/ncs/nw_c2_default7.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default8.ncs b/_module/ncs/nw_c2_default8.ncs deleted file mode 100644 index 50058da3..00000000 Binary files a/_module/ncs/nw_c2_default8.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_default9.ncs b/_module/ncs/nw_c2_default9.ncs deleted file mode 100644 index 4f44d5b1..00000000 Binary files a/_module/ncs/nw_c2_default9.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_defaulta.ncs b/_module/ncs/nw_c2_defaulta.ncs deleted file mode 100644 index cf7c7156..00000000 Binary files a/_module/ncs/nw_c2_defaulta.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_defaultb.ncs b/_module/ncs/nw_c2_defaultb.ncs deleted file mode 100644 index 5911c146..00000000 Binary files a/_module/ncs/nw_c2_defaultb.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_defaultd.ncs b/_module/ncs/nw_c2_defaultd.ncs deleted file mode 100644 index a269fc44..00000000 Binary files a/_module/ncs/nw_c2_defaultd.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_defaulte.ncs b/_module/ncs/nw_c2_defaulte.ncs deleted file mode 100644 index 51cf877f..00000000 Binary files a/_module/ncs/nw_c2_defaulte.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_dimdoors.ncs b/_module/ncs/nw_c2_dimdoors.ncs deleted file mode 100644 index 0f57c304..00000000 Binary files a/_module/ncs/nw_c2_dimdoors.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_dropin9.ncs b/_module/ncs/nw_c2_dropin9.ncs deleted file mode 100644 index 0c290fa2..00000000 Binary files a/_module/ncs/nw_c2_dropin9.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_gargoyle.ncs b/_module/ncs/nw_c2_gargoyle.ncs deleted file mode 100644 index 8420022a..00000000 Binary files a/_module/ncs/nw_c2_gargoyle.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_herbivore.ncs b/_module/ncs/nw_c2_herbivore.ncs deleted file mode 100644 index b1b9ef98..00000000 Binary files a/_module/ncs/nw_c2_herbivore.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_lycan_9.ncs b/_module/ncs/nw_c2_lycan_9.ncs deleted file mode 100644 index d2905cc3..00000000 Binary files a/_module/ncs/nw_c2_lycan_9.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_omnivore.ncs b/_module/ncs/nw_c2_omnivore.ncs deleted file mode 100644 index 6749ecef..00000000 Binary files a/_module/ncs/nw_c2_omnivore.ncs and /dev/null differ diff --git a/_module/ncs/nw_c2_stnkbtdie.ncs b/_module/ncs/nw_c2_stnkbtdie.ncs deleted file mode 100644 index d8db15bb..00000000 Binary files a/_module/ncs/nw_c2_stnkbtdie.ncs and /dev/null differ diff --git a/_module/ncs/nw_s2_layonhand.ncs b/_module/ncs/nw_s2_layonhand.ncs deleted file mode 100644 index e703a7fb..00000000 Binary files a/_module/ncs/nw_s2_layonhand.ncs and /dev/null differ diff --git a/_module/ncs/nw_s3_balordeth.ncs b/_module/ncs/nw_s3_balordeth.ncs deleted file mode 100644 index 63062162..00000000 Binary files a/_module/ncs/nw_s3_balordeth.ncs and /dev/null differ diff --git a/_module/ncs/ondeath_ostland.ncs b/_module/ncs/ondeath_ostland.ncs index 5cd9e156..6d215f99 100644 Binary files a/_module/ncs/ondeath_ostland.ncs and b/_module/ncs/ondeath_ostland.ncs differ diff --git a/_module/ncs/ostland_ondeath.ncs b/_module/ncs/ostland_ondeath.ncs new file mode 100644 index 00000000..6d215f99 Binary files /dev/null and b/_module/ncs/ostland_ondeath.ncs differ diff --git a/_module/ncs/ostland_onpercep.ncs b/_module/ncs/ostland_onpercep.ncs new file mode 100644 index 00000000..73d121d8 Binary files /dev/null and b/_module/ncs/ostland_onpercep.ncs differ diff --git a/_module/ncs/ra_ai_attacked.ncs b/_module/ncs/ra_ai_attacked.ncs new file mode 100644 index 00000000..118d3f3d Binary files /dev/null and b/_module/ncs/ra_ai_attacked.ncs differ diff --git a/_module/ncs/ra_ai_endcmbtrnd.ncs b/_module/ncs/ra_ai_endcmbtrnd.ncs new file mode 100644 index 00000000..359c3774 Binary files /dev/null and b/_module/ncs/ra_ai_endcmbtrnd.ncs differ diff --git a/_module/ncs/ra_ai_heartbeat.ncs b/_module/ncs/ra_ai_heartbeat.ncs new file mode 100644 index 00000000..7babb220 Binary files /dev/null and b/_module/ncs/ra_ai_heartbeat.ncs differ diff --git a/_module/ncs/ra_ai_onblocked.ncs b/_module/ncs/ra_ai_onblocked.ncs new file mode 100644 index 00000000..8501ab33 Binary files /dev/null and b/_module/ncs/ra_ai_onblocked.ncs differ diff --git a/_module/ncs/ra_ai_onconverse.ncs b/_module/ncs/ra_ai_onconverse.ncs new file mode 100644 index 00000000..197c230a Binary files /dev/null and b/_module/ncs/ra_ai_onconverse.ncs differ diff --git a/_module/ncs/ra_ai_ondamaged.ncs b/_module/ncs/ra_ai_ondamaged.ncs new file mode 100644 index 00000000..02961fd8 Binary files /dev/null and b/_module/ncs/ra_ai_ondamaged.ncs differ diff --git a/_module/ncs/ra_ai_ondeath.ncs b/_module/ncs/ra_ai_ondeath.ncs new file mode 100644 index 00000000..cf7df533 Binary files /dev/null and b/_module/ncs/ra_ai_ondeath.ncs differ diff --git a/_module/ncs/ra_ai_ondisturb.ncs b/_module/ncs/ra_ai_ondisturb.ncs new file mode 100644 index 00000000..20087378 Binary files /dev/null and b/_module/ncs/ra_ai_ondisturb.ncs differ diff --git a/_module/ncs/ra_ai_onpercept.ncs b/_module/ncs/ra_ai_onpercept.ncs new file mode 100644 index 00000000..b3df4991 Binary files /dev/null and b/_module/ncs/ra_ai_onpercept.ncs differ diff --git a/_module/ncs/ra_ai_onrested.ncs b/_module/ncs/ra_ai_onrested.ncs new file mode 100644 index 00000000..8335dd5f Binary files /dev/null and b/_module/ncs/ra_ai_onrested.ncs differ diff --git a/_module/ncs/ra_ai_onspawn.ncs b/_module/ncs/ra_ai_onspawn.ncs new file mode 100644 index 00000000..c341cc7f Binary files /dev/null and b/_module/ncs/ra_ai_onspawn.ncs differ diff --git a/_module/ncs/ra_ai_onspelled.ncs b/_module/ncs/ra_ai_onspelled.ncs new file mode 100644 index 00000000..66a4807e Binary files /dev/null and b/_module/ncs/ra_ai_onspelled.ncs differ diff --git a/_module/ncs/ra_ai_userdef.ncs b/_module/ncs/ra_ai_userdef.ncs new file mode 100644 index 00000000..edd56f76 Binary files /dev/null and b/_module/ncs/ra_ai_userdef.ncs differ diff --git a/_module/ncs/ra_bandit_spawn.ncs b/_module/ncs/ra_bandit_spawn.ncs index b6f7ae64..93a76131 100644 Binary files a/_module/ncs/ra_bandit_spawn.ncs and b/_module/ncs/ra_bandit_spawn.ncs differ diff --git a/_module/ncs/ra_drag_default9.ncs b/_module/ncs/ra_drag_default9.ncs deleted file mode 100644 index e26264df..00000000 Binary files a/_module/ncs/ra_drag_default9.ncs and /dev/null differ diff --git a/_module/ncs/ra_rnd_pirat_spw.ncs b/_module/ncs/ra_rnd_pirat_spw.ncs index ff149d64..6913f6c8 100644 Binary files a/_module/ncs/ra_rnd_pirat_spw.ncs and b/_module/ncs/ra_rnd_pirat_spw.ncs differ diff --git a/_module/ncs/ra_spbook_zana.ncs b/_module/ncs/ra_spbook_zana.ncs new file mode 100644 index 00000000..bf628692 Binary files /dev/null and b/_module/ncs/ra_spbook_zana.ncs differ diff --git a/_module/ncs/re_c2_commoner9.ncs b/_module/ncs/re_c2_commoner9.ncs deleted file mode 100644 index a2ff6f16..00000000 Binary files a/_module/ncs/re_c2_commoner9.ncs and /dev/null differ diff --git a/_module/ncs/spawn_chk_custom.ncs b/_module/ncs/spawn_chk_custom.ncs deleted file mode 100644 index ecb1c72d..00000000 Binary files a/_module/ncs/spawn_chk_custom.ncs and /dev/null differ diff --git a/_module/ncs/spawn_orig_hb.ncs b/_module/ncs/spawn_orig_hb.ncs index b476b8a0..a664b47d 100644 Binary files a/_module/ncs/spawn_orig_hb.ncs and b/_module/ncs/spawn_orig_hb.ncs differ diff --git a/_module/ncs/spawn_sample_hb.ncs b/_module/ncs/spawn_sample_hb.ncs index b476b8a0..a664b47d 100644 Binary files a/_module/ncs/spawn_sample_hb.ncs and b/_module/ncs/spawn_sample_hb.ncs differ diff --git a/_module/ncs/wererat_onspawn.ncs b/_module/ncs/wererat_onspawn.ncs deleted file mode 100644 index 5ed9d560..00000000 Binary files a/_module/ncs/wererat_onspawn.ncs and /dev/null differ diff --git a/_module/ncs/x0_s0_inflict.ncs b/_module/ncs/x0_s0_inflict.ncs deleted file mode 100644 index 6eeca94e..00000000 Binary files a/_module/ncs/x0_s0_inflict.ncs and /dev/null differ diff --git a/_module/ncs/x2_def_spawn.ncs b/_module/ncs/x2_def_spawn.ncs index 6865521a..403d7ece 100644 Binary files a/_module/ncs/x2_def_spawn.ncs and b/_module/ncs/x2_def_spawn.ncs differ diff --git a/_module/nss/drusilla_ondeath.nss b/_module/nss/drusilla_ondeath.nss new file mode 100644 index 00000000..63bf51d6 --- /dev/null +++ b/_module/nss/drusilla_ondeath.nss @@ -0,0 +1,242 @@ +//:://///////////////////////////////////////////// +//:: Name drusilla_ondeath +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + Drusilla the Druid's OnDeath script +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221129 +//::////////////////////////////////////////////// + +#include "sql_db_partywide" +#include "pqj_inc" + +void main() +{ + object oNPC = OBJECT_SELF; + object oPC = GetLastKiller(); + +// Makes sure armor's droppable flag is set to 0 +/* SetDroppableFlag(GetItemInSlot(INVENTORY_SLOT_CHEST, OBJECT_SELF), 0); + + if ((GetResRef(oNPC) == "ra_bandit001") || + (GetResRef(oNPC) == "ra_brigand001") || + (GetResRef(oNPC) == "ra_brigand002")) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC); + + // Give a 3% chance to drop armor &/or equipped weapon + int bDroppableA = d100() > 97; + int bDroppableW = d100() > 97; + int bDroppableS = d100() > 97; + + SetDroppableFlag(oArmor, bDroppableA); + SetDroppableFlag(oWeapon, bDroppableW); + SetDroppableFlag(oWeapon, bDroppableS); + + }*/ + +int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX"); + if(nVFX) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF); + } + int nFirey = GetLocalInt(OBJECT_SELF,"FIREY"); + if (nFirey) + { + effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY"); + if (nShadowy) + { + + effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nStony = GetLocalInt(OBJECT_SELF,"STONY"); + if (nStony) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nWoody = GetLocalInt(OBJECT_SELF,"WOODY"); + if (nWoody) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nIcy = GetLocalInt(OBJECT_SELF,"ICY"); + if (nIcy) + { + effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20"); + if (nConcealed20) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(20, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50"); + if (nConcealed50) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(50, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR"); + if (nGlow == 1) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 2) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 3) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 4) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 5) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 6) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 7) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 8) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 9) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 10) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 11) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 12) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 13) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 14) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + else if (nGlow == 15) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 16) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + +//:: Track which PC's have seen Drusilla dead + SQL_SetLocalIntOnAll(oPC, "bKilledDrusilla", 1); + +//:: Set quest stage & update DB. + AddPersistentJournalQuestEntry("VengefulDruid", 99, oPC); + +//:: Execute CODI AI NPC OnDeath script + ExecuteScript("no_ai_dth", OBJECT_SELF); + +//:: Execute Default NPC OnDeath script + //ExecuteScript("nw_c2_default7", OBJECT_SELF); + +//:: Execute PRC NPC OnDeath script + ExecuteScript("prc_npc_death", OBJECT_SELF); +} diff --git a/_module/nss/drusilla_onperce.nss b/_module/nss/drusilla_onperce.nss new file mode 100644 index 00000000..d435cd35 --- /dev/null +++ b/_module/nss/drusilla_onperce.nss @@ -0,0 +1,45 @@ +//:://///////////////////////////////////////////// +//:: drusilla_onpercep +//:: Copyright (c) 2022 Project RATDOG +//:://///////////////////////////////////////////// +/* + Makes the NPC speak to the PC upon seeing them + the first time. +*/ +//:://///////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221202 +//:://///////////////////////////////////////////// + +void main() +{ +//:: Declare major variables + object oPC = GetLastPerceived(); + object oNPC = OBJECT_SELF; + string sUUID = GetObjectUUID(oPC); + string sTag = GetTag(oNPC); + +//:: Only looks out for players + if (!GetIsPC(oPC)) return; + +//:: Must be seen & not just heard + if (!GetLastPerceptionSeen()) return; + +//:: If NPC has seen PC before stop + int DoOnce = GetLocalInt(oPC,"SeenBy"+sTag); + + if (DoOnce==TRUE) return; + +//:: Execute the PRC NPC OnPerception script + ExecuteScript("prc_npc_percep", OBJECT_SELF); + +//:: Mark that NPC has seen the PC before + SetLocalInt(oPC,"SeenBy"+sTag,GetLocalInt(oPC,"SeenBy"+sTag) + 1); + //SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE); + +//:: Execute the CODI AI NPC OnPerception script + ExecuteScript("no_ai_per", OBJECT_SELF); + +//:: Start conversation + ActionStartConversation(oPC, ""); +} diff --git a/_module/nss/j_ai_destroyself.nss b/_module/nss/j_ai_destroyself.nss deleted file mode 100644 index f1ce16a1..00000000 --- a/_module/nss/j_ai_destroyself.nss +++ /dev/null @@ -1,99 +0,0 @@ -/*/////////////////////// [Destroy Ourself] //////////////////////////////////// - Filename: J_AI_DestroySelf -///////////////////////// [Destroy Ourself] //////////////////////////////////// - This is executed OnDeath to clean up the corpse. It helps - clears all - non-droppable stuff. - - It is not fired if there are corpses or whatever :-) - - Sorts destroyed things. - - Oh, if this is executed any other time when they are dead, they are - destroyed instantly. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added to replace a include function for death. - - No locals are destroyed. The game should do that anyway. Items are, though. - 1.4 - -///////////////////////// [Workings] /////////////////////////////////////////// - this, if ever fired, will destroy the creature. It is not deleayed - there - is a special function in the death script to check the whole "Did I get - raised?" stuff. - - I suppose you can edit this to put a corpse in :-D -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A - none needed. -///////////////////////// [Destroy Ourself] //////////////////////////////////*/ - - -// Exectued from death, to speed things up. -#include "J_INC_CONSTANTS" - -// This will delete all un-droppable items, before they fade out. -void DeleteAllThings(); -// Used in DeleteAllThings. -void ClearSlot(int iSlotID); - -void main() -{ - // To not crash limbo. Destroying in limbo crashes a server (1.2 bugfix) - if(GetIsObjectValid(GetArea(OBJECT_SELF))) - { - // Must be dead. - if(GetIsDead(OBJECT_SELF)) - { - // Totally dead - no death file, no raising. - SetAIInteger(I_AM_TOTALLY_DEAD, TRUE); - // Ok, we are going to set we are lootable (maybe) - if(GetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER)) - { - // As it is now destroyable, it should destroy itself if it has - // no inventory. SetLootable is set up on spawn. - // 75: "[Dead] Setting to selectable/destroyable (so we go) for Bioware corpses." - DebugActionSpeakByInt(75); - SetIsDestroyable(TRUE, FALSE, TRUE); - } - else // Destroy self normally - { - // Debug - // 76: "[Dead] Destroying self finally." - DebugActionSpeakByInt(76); - DeleteAllThings(); - // Just in case, we set destroyable, but not raiseable. - SetIsDestroyable(TRUE, FALSE, FALSE); - // Remove plot/immoral/lootable flags JUST in case. - SetPlotFlag(OBJECT_SELF, FALSE); - SetImmortal(OBJECT_SELF, FALSE); - SetLootable(OBJECT_SELF, FALSE); - // Destroy ourselves - DestroyObject(OBJECT_SELF); - } - } - } - // Note: we never do more then one death removal check. DM's can re-raise and kill a NPC if they wish. -} - -// Used in DeleteAllThings. -void ClearSlot(int iSlotID) -{ - object oItem = GetItemInSlot(iSlotID); - if(GetIsObjectValid(oItem) && !GetDroppableFlag(oItem)) - DestroyObject(oItem); -} -// This will delete all un-droppable items, before they fade out. -void DeleteAllThings() -{ - // Destroy all equipped slots - 0 to 18 (18 = NUM_INVENTORY_SLOTS) - int iSlotID; - for(iSlotID = 0; iSlotID <= NUM_INVENTORY_SLOTS; iSlotID++) - { - ClearSlot(iSlotID); - } - // Destroy all inventory items - object oItem = GetFirstItemInInventory(); - while(GetIsObjectValid(oItem)) - { - if(!GetDroppableFlag(oItem)) - DestroyObject(oItem); - oItem = GetNextItemInInventory(); - } -} diff --git a/_module/nss/j_ai_detercombat.nss b/_module/nss/j_ai_detercombat.nss deleted file mode 100644 index 2a55c846..00000000 --- a/_module/nss/j_ai_detercombat.nss +++ /dev/null @@ -1,61 +0,0 @@ -/*/////////////////////// [Execute Combat Action] ////////////////////////////// - Filename: J_AI_DeterCombat -///////////////////////// [Execute Combat Action] ////////////////////////////// - Fired from other scripts, this runs an actual actions. - - It also contains the Pre-combat and Post-combat action events. In essense - they therefore fire if they percieve a target, or a new round, or maybe - a spell cast at - any combat action. - - Therefore, they only fire if the default AI is being used :-) - - Do NOT mess with this file, please. :-D -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - AI Include only fired from here. This script is executed from others, - as the default in place of custom AI scripts. - 1.4 - Mainly See the generic AI include file for changes. This is just - what calls DetermineCombatRound() and associated things. -///////////////////////// [Workings] /////////////////////////////////////////// - This is simple: - - - We execute it if there is no other AI files. - - We use a stored target for things like "On Percieve, attack seen", so - we react as normal. - - If there is a custom AI file specified, this won't fire. - - It cleans things up, and is the only script in the whole set that has - j_inc_generic_ai in, reducing file size, and compile times. AI is more - manageable too! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: See J_INC_GENERIC_AI -///////////////////////// [Execute Combat Action] ////////////////////////////*/ - -#include "J_INC_GENERIC_AI" - -void main() -{ - // Pre-combat-event - if(FireUserEvent(AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT, EVENT_COMBAT_ACTION_PRE_EVENT)) - // We may exit if it fires - if(ExitFromUDE(EVENT_COMBAT_ACTION_PRE_EVENT)) return; - - // Check: Are we imputting a target? We imputt it even if invalid - object oTarget = GetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET); - - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Speak combat round speakstring - SpeakArrayString(AI_TALK_ON_COMBAT_ROUND, TRUE); - } - - // Call combat round using include - AI_DetermineCombatRound(oTarget); - - // Delete it whatever happens - DeleteAIObject(AI_TEMP_SET_TARGET); - - // Fire end of combat action event. - FireUserEvent(AI_FLAG_UDE_COMBAT_ACTION_EVENT, EVENT_COMBAT_ACTION_EVENT); -} diff --git a/_module/nss/j_ai_heart_aimat.nss b/_module/nss/j_ai_heart_aimat.nss deleted file mode 100644 index cdc37c9c..00000000 --- a/_module/nss/j_ai_heart_aimat.nss +++ /dev/null @@ -1,39 +0,0 @@ -/*/////////////////////// [On Heartbeat - Animations] ////////////////////////// - Filename: J_AI_Heart_aimat -///////////////////////// [On Heartbeat - Animations] ////////////////////////// - To keep the heartbeat small, I've divided all the bits that MIGHT fire - into other scripts. This makes it smaller, and faster. - - I've also shortened the perception script too - and along with the heartbeat - is the largest, Out-Of-Combat script. It isn't divided up by execute scripts, - but should be leaner. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added to speed up heartbeat and keep filesize down on un-used parts. - 1.4 - Changed to nw_i0_generic, as to include all animations, whatever NwN version. -///////////////////////// [Workings] /////////////////////////////////////////// - This is executed as file HEARTBEAT_ANIMATIONS_FILE, from the heartbeat - script (Default1, or onheartbeat). It can run by itself, using the SoU - animations - better then me changing and making my own, as they are vastly - improved from NwN! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [On Heartbeat - Animations] ////////////////////////*/ - -// Generic Include File. This contains animations whatever NwN version it is. -#include "NW_I0_GENERIC" - -void main() -{ - if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)) - { - PlayMobileAmbientAnimations_NonAvian(); - } - else if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) - { - PlayMobileAmbientAnimations_Avian(); - } - else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)) - { - PlayImmobileAmbientAnimations(); - } -} diff --git a/_module/nss/j_ai_heart_buff.nss b/_module/nss/j_ai_heart_buff.nss deleted file mode 100644 index 8361f7b9..00000000 --- a/_module/nss/j_ai_heart_buff.nss +++ /dev/null @@ -1,188 +0,0 @@ -/*/////////////////////// [On Heartbeat - Buff] //////////////////////////////// - Filename: j_ai_heart_buff -///////////////////////// [On Heartbeat - Buff] //////////////////////////////// - This is ExecuteScript'ed from the heartbeat file, if they want to buff - themselves with spells to be prepared for any battle coming up. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - 1.4 - Will Add all the appropriate Hordes spells, notably the missing epic ones. -///////////////////////// [Workings] /////////////////////////////////////////// - This contains Advance Buffing - IE quick protection spells. - I've done what ones I think are useful - IE most protection ones & summons! - - This doesn't include any which are (potentionally) very short duration (IE: - 1 round/level, or a set value): - - Elemntal shield/Wounding whispers (though you can add all of these!) - Aid, bless, aura of vitality, aura of glory, blood frenzy, prayer, - divine* Range (Power, Might, Shield, Favor), Expeditious retreat, - holy/unholy aura (or protection from /magic circle against), - natures balance, one with the land, shield of faith, virtue, war cry, dirge, - death armor, mestals acid sheath. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [On Heartbeat - Buff] //////////////////////////////*/ - -// Constants for some unconstantanated spells -#include "J_INC_CONSTANTS" - -// Wrapper, to stop repeating the same lines! :-) -int BuffCastSpell(int nSpell); - -void main() -{ - // For summons counter. - int nCnt, bBreak; - // FAST BUFF SELF - // Stop what we are doing first, to perform the actions. - ClearAllActions(); - - // Always cast "Epic Warding" and "Epic Mage Armor". - BuffCastSpell(FEAT_EPIC_SPELL_EPIC_WARDING); - BuffCastSpell(FEAT_EPIC_SPELL_MAGE_ARMOUR); - - // Combat Protections - if(!BuffCastSpell(SPELL_PREMONITION)) - if(!BuffCastSpell(SPELL_GREATER_STONESKIN)) - BuffCastSpell(SPELL_STONESKIN); - - // Visage Protections - if(!BuffCastSpell(SPELL_SHADOW_SHIELD)) - if(!BuffCastSpell(SPELL_ETHEREAL_VISAGE)) - BuffCastSpell(SPELL_GHOSTLY_VISAGE); - - // Mantle Protections - if(!BuffCastSpell(SPELL_GREATER_SPELL_MANTLE)) - if(!BuffCastSpell(SPELL_SPELL_MANTLE)) - BuffCastSpell(SPELL_LESSER_SPELL_MANTLE); - - // True seeing, see invisibility. We take true seeing to be better then the latter. - if(BuffCastSpell(SPELL_TRUE_SEEING)) - BuffCastSpell(SPELL_SEE_INVISIBILITY); - - // Elemental Protections. 4 lots. From 40/- to 10/- - if(!BuffCastSpell(SPELL_ENERGY_BUFFER)) - if(!BuffCastSpell(SPELL_PROTECTION_FROM_ELEMENTS)) - if(!BuffCastSpell(SPELL_RESIST_ELEMENTS)) - BuffCastSpell(SPELL_ENDURE_ELEMENTS); - - // Mental Protections - if(!BuffCastSpell(SPELL_MIND_BLANK)) - if(!BuffCastSpell(SPELL_LESSER_MIND_BLANK)) - BuffCastSpell(SPELL_CLARITY); - - // Globes - if(!BuffCastSpell(SPELL_GLOBE_OF_INVULNERABILITY)) - BuffCastSpell(SPELL_MINOR_GLOBE_OF_INVULNERABILITY); - - // Invisibility - // Note: Improved has 50% consealment, etherealness has just invisiblity. - if(!BuffCastSpell(SPELL_IMPROVED_INVISIBILITY)) - BuffCastSpell(SPELL_DISPLACEMENT);//50% consealment - if(!BuffCastSpell(SPELL_ETHEREALNESS)) - if(!BuffCastSpell(SPELL_INVISIBILITY_SPHERE)) - if(!BuffCastSpell(SPELL_INVISIBILITY)) - BuffCastSpell(SPELL_SANCTUARY); - - // The stat-increasing ones. - if(!BuffCastSpell(SPELL_GREATER_BULLS_STRENGTH)) - BuffCastSpell(SPELL_BULLS_STRENGTH); - if(!BuffCastSpell(SPELL_GREATER_CATS_GRACE)) - BuffCastSpell(SPELL_CATS_GRACE); - if(!BuffCastSpell(SPELL_GREATER_EAGLE_SPLENDOR)) - BuffCastSpell(SPELL_EAGLE_SPLEDOR); - if(!BuffCastSpell(SPELL_GREATER_FOXS_CUNNING)) - BuffCastSpell(SPELL_FOXS_CUNNING); - if(!BuffCastSpell(SPELL_GREATER_ENDURANCE)) - BuffCastSpell(SPELL_ENDURANCE); - if(!BuffCastSpell(AI_SPELL_OWLS_INSIGHT)) - if(!BuffCastSpell(SPELL_GREATER_OWLS_WISDOM)) - BuffCastSpell(SPELL_OWLS_WISDOM); - - // Mage armor or shield. Don't stack them. - if(!BuffCastSpell(SPELL_SHIELD)) - BuffCastSpell(SPELL_MAGE_ARMOR); - // Entropic Shield (20% consealment, 1 turn/level) - BuffCastSpell(SPELL_ENTROPIC_SHIELD); - - // Protection from negative energy - if(!BuffCastSpell(SPELL_UNDEATHS_ETERNAL_FOE)) - BuffCastSpell(SPELL_DEATH_WARD); - //Misc Protections which have no more powerful. - BuffCastSpell(SPELL_BARKSKIN); - BuffCastSpell(SPELL_ENTROPIC_SHIELD); - BuffCastSpell(SPELL_PROTECTION_FROM_SPELLS); - BuffCastSpell(SPELL_REGENERATE); - BuffCastSpell(SPELL_DARKVISION); - BuffCastSpell(SPELL_REGENERATE); - BuffCastSpell(SPELL_SPELL_RESISTANCE); - BuffCastSpell(SPELL_FREEDOM_OF_MOVEMENT); - BuffCastSpell(SPELL_FREEDOM_OF_MOVEMENT); - -// Low durations (Rounds per caster level) -// if(!BuffCastSpell(SPELL_ELEMENTAL_SHIELD)) -// BuffCastSpell(SPELL_WOUNDING_WHISPERS); -// BuffCastSpell(SPELL_DEATH_ARMOR); - - - //Summon Ally. - // Spell ID's: These are quite odd. Spells.2da: -/* - 174 Summon_Creature_I 1 - 175 Summon_Creature_II 2 - 176 Summon_Creature_III 3 - 177 Summon_Creature_IV 4 - 178 Summon_Creature_IX 9 - 179 Summon_Creature_V 5 - 180 Summon_Creature_VI 6 - 181 Summon_Creature_VII 7 - 182 Summon_Creature_VIII 8 -*/ - // We can loop through. 9 first, then 8-5, then undead ones, then 4-1 - if(!BuffCastSpell(SPELL_SUMMON_CREATURE_IX))// 9 - { - // 8, 7, 6, 5. - for(nCnt = SPELL_SUMMON_CREATURE_VIII; - (nCnt >= SPELL_SUMMON_CREATURE_V && bBreak != TRUE); - nCnt--) - { - if(BuffCastSpell(nCnt)) bBreak = TRUE; - } - // Then undead - if(bBreak != TRUE) - { - if(!BuffCastSpell(SPELL_CREATE_GREATER_UNDEAD)) - { - if(!BuffCastSpell(SPELL_CREATE_UNDEAD)) - { - if(!BuffCastSpell(SPELL_ANIMATE_DEAD)) - { - // Lastly, the 4-1 ones. - for(nCnt = SPELL_SUMMON_CREATURE_IV; - nCnt >= SPELL_SUMMON_CREATURE_I; - nCnt--) - { - if(BuffCastSpell(nCnt)) break; - } - } - } - } - } - } - // Finally, equip the best melee weapon to look more prepared. - // Don't use a ranged, we can equip it manually if need be :=P - // but sneak attackers would have a field day if we didn't have - // a melee weapon out... - ActionEquipMostDamagingMelee(); -} - -// Wrapper, to stop repeating the same lines! :-) -int BuffCastSpell(int nSpell) -{ - if(GetHasSpell(nSpell)) - { - ActionCastSpellAtObject(nSpell, OBJECT_SELF, METAMAGIC_ANY, FALSE, FALSE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - return TRUE; - } - return FALSE; -} diff --git a/_module/nss/j_ai_heart_serch.nss b/_module/nss/j_ai_heart_serch.nss deleted file mode 100644 index b0d29641..00000000 --- a/_module/nss/j_ai_heart_serch.nss +++ /dev/null @@ -1,40 +0,0 @@ -/*/////////////////////// [On Heartbeat - Move Nearer PC] ////////////////////// - Filename: J_AI_Heart_Serch -///////////////////////// [On Heartbeat - Move Nearer PC] ////////////////////// - This is fired to perform moving nearer the PC, or searching towards them. - - Yes, like the Henchmen and Battle AI code. I am sure they won't mind - if - they do, I will remove it :-) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - 1.4 - Reformatted as with the rest of the AI -///////////////////////// [Workings] /////////////////////////////////////////// - This makes the NPC move nearer to a PC. Fires if the spawn condition - is on and the timer is not, and only 1/4 heartbeats to lessen the effect. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [On Heartbeat - Move Nearer PC] ////////////////////*/ - -#include "J_INC_CONSTANTS" - -void main() -{ - object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); - if(GetIsObjectValid(oPC) && GetIsEnemy(oPC) && - GetDistanceToObject(oPC) < - IntToFloat(GetBoundriedAIInteger(AI_SEARCH_IF_ENEMIES_NEAR_RANGE, 25, 50, 5))) - { - vector vPC = GetPosition(oPC); - // Whats the distance we use to move a bit nearer? - int nRandom = 10 + Random(10); - // Randomise a point nearby. - vPC.x += IntToFloat(nRandom - (Random(2 * nRandom + 1))); - vPC.y += IntToFloat(nRandom - (Random(2 * nRandom + 1))); - vPC.z += IntToFloat(nRandom - (Random(2 * nRandom + 1))); - // Define the location - location lNew = Location(GetArea(oPC), vPC, IntToFloat(Random(359))); - SetLocalTimer(AI_TIMER_SEARCHING, GetDistanceToObject(oPC)); - ClearAllActions(); - ActionMoveToLocation(lNew); - } -} diff --git a/_module/nss/j_ai_onblocked.nss b/_module/nss/j_ai_onblocked.nss deleted file mode 100644 index f7301cc8..00000000 --- a/_module/nss/j_ai_onblocked.nss +++ /dev/null @@ -1,332 +0,0 @@ -/*/////////////////////// [On Blocked] ///////////////////////////////////////// - Filename: J_AI_OnBlocked or nw_c2_defaulte -///////////////////////// [On Blocked] ///////////////////////////////////////// - Added in user defined constant - won't open any doors. - 0 = Default (even if not set) opens as appropriate - 1 = Always bashes the door. - 2 = Never open any doors - 3 = Never opens plot doors - - They will: (int is intellgience needed) - 1. Open if not trapped (7 int) - 2. Unlock if possible, and rank is high enough, and it needs no key and is not trapped (7 int) - 3. Untrap the door, if possible, if trapped (7 int) - 4. Else, if has high enough stats, try Knock. (10 int) - 6. Else Equip appropriate weapons and bash (5 int) - - Note: This also fires for blocking via. creatures. It is optimised, and - works by re-targeting and doing a few small things to do with blocking. -///////////////////////// [History] //////////////////////////////////////////// - 1.0 - Opens with Knock. Unlocks door. Ignores trapped doors. - 1.3 - Debug messages. - - New events, even if the change of using them is small! - - No ClearAllactions so any previous movings will carry on once the door is gone. - - Removed debug messages - - Added Creature reaction code - 1.4 - Need to add a "hands" check (done on spawn, to set a setting to not - open doors at all, IE: We do NOT have hands, do not open doors), so - its a little more realistic "out of the box" - - Fixed an instance of GetObjectSeen being repeated. - - Fixed the variable AI_DOOR_INTELLIGENCE not being got via GetAIInteger(). - - Removed unneeded else statement. -///////////////////////// [Workings] /////////////////////////////////////////// - Uses simple code to deal with a door in the best way possible. - - Uses DoDoorAction, which is added to the top of an action queue and doesn't, - therefore, delete any ActionAttack's and so on below it. (Or I hope it - is like this) - - Creatures are reacted by with ClearAllActions usually. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetBlockingDoor, GetIsDoorActionPossible, GetLocked, GetLockKeyRequired - GetLockKeyTag, GetLockUnlockDC, GetPlotFlag, DoDoorAction -///////////////////////// [On Blocked] ///////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -// Fires the end-blocked event. -void FireBlockedEvent(); -// Range attack oTarget. -int RangedAttack(object oTarget = OBJECT_INVALID); - -void main() -{ - // Pre-on blocked-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, EVENT_ON_BLOCKED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // This CAN return a blocking creature. - object oBlocker = GetBlockingDoor(); - int nBlockerType = GetObjectType(oBlocker); - - if(!GetIsObjectValid(oBlocker)) return; - - // Anyone blocked by an enemy will re-target them (and attack them), blocked - // by someone they cannot get they will cast seeing spells and react, and if - // blocked by a friend, they may run back and use a ranged weapon if they - // have one. - if(nBlockerType == OBJECT_TYPE_CREATURE) - { - // Are we doing something that should not be overriden? (even fleeing, - // if stuck, we can't do anything else then move again on heartbeat!) - if(GetIsPerformingSpecialAction()) return; - - // Blocked timer, we normally do an action. A small timer stops a lot - // of lag. - if(GetLocalTimer(AI_TIMER_BLOCKED)) return; - - // Set the timer for 1 second - SetLocalTimer(AI_TIMER_BLOCKED, 1.0); - - // Is it an enemy? - if(GetIsEnemy(oBlocker)) - { - // Check if seen or heard - if(GetObjectSeen(oBlocker) || GetObjectHeard(oBlocker)) - { - // Enemy :-) We can re-target (as know of thier presence), using - // them as a target. - // - This overrides even casting a spell - basically, as we should - // be moving, this will re-cast it at someone or something in range - SetAIObject(AI_ATTACK_SPECIFIC_OBJECT, oBlocker); - - // Check if we can do combat - if we cannot, we can re-do combat - // next time - if(!GetIsBusyWithAction()) - { - // Attacks if we are not attacking - ClearAllActions(); - DetermineCombatRound(oBlocker); - return; - } - } - else - { - // Invisible? Not there? Some odd error? We set that we know of - // someone invisible, and will attack if not in combat. - if(GetHasEffect(EFFECT_TYPE_INVISIBILITY, oBlocker) || - GetStealthMode(oBlocker) == STEALTH_MODE_ACTIVATED) - { - SetAIObject(AI_LAST_TO_GO_INVISIBLE, oBlocker); - } - // Shout to allies - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // Check if we can do combat - if(!GetIsBusyWithAction()) - { - // Attacks if we are not attacking - ClearAllActions(); - DetermineCombatRound(); - return; - } - } - } - // Else is non-enemy, a friend or neutral - else - { - // As we are blocked by them, we re-do combat - we have a choice of - // either using a Bow to attack our target (if that was what - // we were doing) and move back a little, or re-initiate combat - - // Were we attacking in combat? - object oPrevious = GetAttackTarget(); - - // Check action - if(GetCurrentAction() == ACTION_ATTACKOBJECT) - { - // This gets set to FALSE if we can cutthrough attack, - // or whatever. - - int bPreviousAttackFailed = FALSE; - // Check if we can see our previous target - if(GetObjectSeen(oPrevious) || - (GetObjectHeard(oPrevious) && LineOfSightObject(OBJECT_SELF, oPrevious))) - { - // We can! see if we can re-attack with ranged weapon, else - // doesn't matter we can see them - bPreviousAttackFailed = RangedAttack(oPrevious); - } - - // If we havn't added an action yet... - if(bPreviousAttackFailed == FALSE) - { - // We have not stopped the script - so determine combat - // round against nearest seen or heard enemy! - if(!RangedAttack()) - { - // Else normal round to try and get a new target - ClearAllActions(); - DetermineCombatRound(); - } - } - // Action attack, normally means melee attack. If we can, we - // attack our previous target if seen, ELSE we will re-initate - // combat. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // Fire the On blocked event as normal - FireBlockedEvent(); - return; - } - else // if(nAction == ACTION_CASTSPELL and others) - { - // Reinitate combat, but don't attack oPrevious - ClearAllActions(); - DetermineCombatRound(); - - // Action attack, normally means melee attack. If we can, we - // attack our previous target if seen, ELSE we will re-initate - // combat. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // Fire the On blocked event as normal - FireBlockedEvent(); - return; - } - } - } - // Placeable - Currently not returned, however, added just in case! - else if(nBlockerType == OBJECT_TYPE_PLACEABLE) - { - // Check for plot, and therefore attack it to bring it down. - // - Remember, ActionAttack will re-initiate when combat round fires - // again in 3 or 6 seconds (or less, if we just were moving) - if(!GetPlotFlag(oBlocker) && - GetIsPlaceableObjectActionPossible(oBlocker, PLACEABLE_ACTION_BASH)) - { - // Do placeable action - DoPlaceableObjectAction(oBlocker, PLACEABLE_ACTION_BASH); - FireBlockedEvent(); - return; - } - return; - } - // Door behaviour - else if(nBlockerType == OBJECT_TYPE_DOOR) - { - int nDoorIntelligence = GetAIInteger(AI_DOOR_INTELLIGENCE); - int nInt = GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE); - if(nDoorIntelligence == 1)// 1 = Always bashes the doors, plot, locked or anything. - { - DoDoorAction(oBlocker, DOOR_ACTION_BASH); - // We re-initiate combat. - FireBlockedEvent(); - return; - } - else if(nDoorIntelligence == 2)// 2 = Never open anything, bashing or not. - { - FireBlockedEvent(); - return; - } - else if(nDoorIntelligence == 3)// 3 = Never tries anything against plot doors. - { - if(GetPlotFlag(oBlocker)) - { - FireBlockedEvent(); - return; - } - } - if(nInt >= 5) - { - // Need some intelligence :-) - if(nInt >= 7) - { - // Right, first, we may...shock...open it!!! - // Checks Key, lock, trap and if the action is possible. - if(GetIsDoorActionPossible(oBlocker, DOOR_ACTION_OPEN) && - !GetLocked(oBlocker) && - !GetIsTrapped(oBlocker) && - (!GetLockKeyRequired(oBlocker) || - (GetLockKeyRequired(oBlocker) && GetItemPossessor(GetObjectByTag(GetLockKeyTag(oBlocker))) == OBJECT_SELF))) - { - DoDoorAction(oBlocker, DOOR_ACTION_OPEN); - FireBlockedEvent(); - return; - } - // Unlock it with the skill, if it is not trapped and we can :-P - // We take 20 off the door DC, thats our minimum roll, after all. - if(GetLocked(oBlocker) && - !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER) && - !GetLockKeyRequired(oBlocker) && GetHasSkill(SKILL_OPEN_LOCK) && - GetIsDoorActionPossible(oBlocker, DOOR_ACTION_UNLOCK) && !GetIsTrapped(oBlocker) && - (GetSkillRank(SKILL_OPEN_LOCK) >= (GetLockLockDC(oBlocker) - 20))) - { - DoDoorAction(oBlocker, DOOR_ACTION_UNLOCK); - FireBlockedEvent(); - return; - } - // Specilist thing - knock - if(nInt >= 10) - { - if((GetIsDoorActionPossible(oBlocker, DOOR_ACTION_KNOCK)) && - GetLockUnlockDC(oBlocker) <= 25 && - !GetLockKeyRequired(oBlocker) && GetHasSpell(SPELL_KNOCK)) - { - DoDoorAction(oBlocker, DOOR_ACTION_KNOCK); - FireBlockedEvent(); - return; - } - } - } - // If Our Int is over 5, we will bash after everything else. - if(GetIsDoorActionPossible(oBlocker, DOOR_ACTION_BASH) && !GetPlotFlag(oBlocker)) - { - if(GetAttackTarget() != oBlocker) - { - DoDoorAction(oBlocker, DOOR_ACTION_BASH); - } - FireBlockedEvent(); - return; - } - } - } - // Fire Blocked event - FireBlockedEvent(); -} -// Fires the end-blocked event. -void FireBlockedEvent() -{ - // Fire End-blocked-UDE - FireUserEvent(AI_FLAG_UDE_ON_BLOCKED_EVENT, EVENT_ON_BLOCKED_EVENT); -} -// Range attack oTarget. -int RangedAttack(object oTarget) -{ - // If we are primarily melee, don't use this - if(!GetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER)) return FALSE; - - object oRangedTarget = oTarget; - if(!GetIsObjectValid(oRangedTarget)) - { - oRangedTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oTarget)) - { - oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - // heard must be in LOS to attack, as we are probably stuck - if(!GetIsObjectValid(oTarget) && LineOfSightObject(OBJECT_SELF, oRangedTarget)) - { - return FALSE; - } - } - } - // Ranged weapon attack against oTarget - // doesn't matter we can see them - object oRanged = GetAIObject(AI_WEAPON_RANGED); - int nAmmo = GetAIInteger(AI_WEAPON_RANGED_AMMOSLOT); - - // Check ammo and validness - if(GetIsObjectValid(oRanged) && (nAmmo == INVENTORY_SLOT_RIGHTHAND || - GetIsObjectValid(GetItemInSlot(nAmmo)))) - { - // Attack with it - ClearAllActions(); - ActionEquipItem(oRanged, INVENTORY_SLOT_RIGHTHAND); - ActionAttack(oRangedTarget); - // Stop - return TRUE; - } - return FALSE; -} diff --git a/_module/nss/j_ai_oncombatrou.nss b/_module/nss/j_ai_oncombatrou.nss deleted file mode 100644 index 49589ab5..00000000 --- a/_module/nss/j_ai_oncombatrou.nss +++ /dev/null @@ -1,37 +0,0 @@ -/*/////////////////////// [On Combat Round End] //////////////////////////////// - Filename: nw_c2_default3 or J_AI_OnCombatrou -///////////////////////// [On Combat Round End] //////////////////////////////// - This is run every 3 or 6 seconds, if the creature is in combat. It is - executed only in combat automatically. - - It runs what the AI should do, bascially. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Executes same script as the other parts of the AI to cuase a new action - 1.4 - -///////////////////////// [Workings] /////////////////////////////////////////// - Calls the combat AI file using the J_INC_OTHER_AI include function, - DetermineCombatRound. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetAttackTarget, GetLastHostileActor, GetAttemptedAttackTarget, - GetAttemptedSpellTarget (Or these are useful at least!) -///////////////////////// [On Combat Round End] //////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-combat-round-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, EVENT_END_COMBAT_ROUND_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // It is our normal call (every 3 or 6 seconds, when we can change actions) - // so no need to delete, and we fire the UDE's. - - // Determine combat round against an invalid target (as default) - DetermineCombatRound(); - - // Fire End of end combat round event - FireUserEvent(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, EVENT_END_COMBAT_ROUND_EVENT); -} diff --git a/_module/nss/j_ai_onconversat.nss b/_module/nss/j_ai_onconversat.nss deleted file mode 100644 index d1ef2e5f..00000000 --- a/_module/nss/j_ai_onconversat.nss +++ /dev/null @@ -1,160 +0,0 @@ -/*/////////////////////// [On Conversation] //////////////////////////////////// - Filename: J_AI_OnConversat or nw_c2_default4 -///////////////////////// [On Conversation] //////////////////////////////////// - OnConversation/ Listen to shouts. - Documented, and checked. -Working- - - Added spawn in condition - Never clear actions when talking. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in conversation thing - IE we can set speakstrings, no need for conversation file. - - Sorted more shouts out. - - Should work right, and not cause too many actions (as we ignore - shouts for normally 12 or so seconds before letting them affect us again). - 1.4 - Deafness incorpreated. -///////////////////////// [Workings] /////////////////////////////////////////// - Uses RespondToShout to react to allies' shouts, and just attacks any enemy - who speaks, or at least moves to them. (OK, dumb if they are invisible, but - oh well, they shouldn't talk so loud!) - - Remember, whispers are never heard if too far away, speakstrings don't go - through walls, and shouts are always heard (so we don't go off to anyone - not in our area, remember) - - Deafness causes us to never hear battle, so unless we see the target speaking - we do not react. Doesn't apply to normal conversations - although if we cannot - talk (also restricted by deafness) then so be it. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetListenPatternNumber, GetLastSpeaker, TestStringAgainstPattern, - GetMatchedSubstring -///////////////////////// [On Conversation] //////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-conversation-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, EVENT_ON_DIALOGUE_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Declarations - int nMatch = GetListenPatternNumber(); - object oShouter = GetLastSpeaker(); - string sSpoken = GetMatchedSubstring(0); - - // We can ignore everything under special cases - EG no valid shouter, - // we are fleeing, its us, or we are not in the same area. - // - We break out of the script if this happens. - if(!GetIsObjectValid(oShouter) || /* Must be a valid speaker! */ - oShouter == OBJECT_SELF || /* Not us! */ - GetIsPerformingSpecialAction() || /* Not fleeing */ - GetIgnore(oShouter) || /* Not ignoring the shouter */ - GetArea(oShouter) != GetArea(OBJECT_SELF))/* Same area (Stops loud yellow shouts getting NPCs) */ - { - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); - return; - } - - // Conversation if not a shout. - if(nMatch == -1) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Make sure it is a PC and we are not fighting. - if(!GetIsFighting() && (GetIsPC(oShouter) || GetIsDMPossessed(oShouter))) - { - // If we have something random (or not) to say instead of - // the conversation, we will say that. - if(GetLocalInt(OBJECT_SELF, ARRAY_SIZE + AI_TALK_ON_CONVERSATION)) - { - ClearAllActions();// Stop - SetFacingPoint(GetPosition(oShouter));// Face - SpeakArrayString(AI_TALK_ON_CONVERSATION);// Speak string - PlayAnimation(ANIMATION_LOOPING_TALK_NORMAL, 1.0, 3.0);// "Talk", then resume potitions. - ActionDoCommand(ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF)); - } - else - { - // If we are set to NOT clear all actions, we won't. - if(!GetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER)) - { - ClearAllActions(); - } - BeginConversation(); - } - } - } - } - // If it is a valid shout...and a valid shouter. - // - Not a DM. Not ignoring shouting. Not a Debug String. - else if(!GetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID) &&// Not listening (IE heard already) - !GetIsDM(oShouter) && FindSubString(sSpoken, "[Debug]") == -1 && - // 1.4 - Deafness (or they are seen) check, for fun. - (!GetHasEffect(EFFECT_TYPE_DEAF) || GetObjectSeen(oShouter))) - { - if(GetIsFriend(oShouter) || GetFactionEqual(oShouter)) - { - // If they are a friend, not a PC, and a valid number, react. - // In the actual RespondToShout call, we do check to see if we bother. - // - Is PC - or is...master? - // - Shouts which are not negative, and not AI_ANYTHING_SAID_CONSTANT. - if(nMatch >= 0 && nMatch != AI_SHOUT_ANYTHING_SAID_CONSTANT && - !GetIsPC(oShouter) && !GetIsPC(GetMaster(oShouter))) - { - // Respond to the shout - RespondToShout(oShouter, nMatch); - } - // Else either is PC or is shout 0 (everything!) - // - not if we are in combat, or they are not. - else if(!CannotPerformCombatRound() && - GetIsInCombat(oShouter) && - GetObjectType(oShouter) == OBJECT_TYPE_CREATURE) - { - // 57: "[Shout] Friend (may be PC) in combat. Attacking! [Friend] " + GetName(oShouter) - DebugActionSpeakByInt(57, oShouter); - - // Respond to oShouter - IWasAttackedResponse(oShouter); - } - } - else if(GetIsEnemy(oShouter) && GetObjectType(oShouter) == OBJECT_TYPE_CREATURE) - { - // If we hear anything said by an enemy, and are not fighting, attack them! - if(!CannotPerformCombatRound()) - // the negatives are associate shouts, Normally (!) - // 0+ are my shouts. 0 is anything - { - // We make sure it isn't an emote (set by default) - if(nMatch == AI_SHOUT_ANYTHING_SAID_CONSTANT && - GetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER)) - { - // Jump out if its an emote - "*Nods*" - if(GetStringLeft(sSpoken, 1) == EMOTE_STAR && - GetStringRight(sSpoken, 1) == EMOTE_STAR) - { - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); - return; - } - } - // 58: "[Shout] Responding to shout [Enemy] " + GetName(oShouter) + " Who has spoken!" - DebugActionSpeakByInt(58, oShouter); - - // Short non-respond - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - - // Attack the enemy! - ClearAllActions(); - DetermineCombatRound(oShouter); - - // Shout to allies to attack the shouter - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - } - } - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); -} diff --git a/_module/nss/j_ai_ondamaged.nss b/_module/nss/j_ai_ondamaged.nss deleted file mode 100644 index 596caa3e..00000000 --- a/_module/nss/j_ai_ondamaged.nss +++ /dev/null @@ -1,241 +0,0 @@ -/*/////////////////////// [On Damaged] ///////////////////////////////////////// - Filename: nw_c2_default6 or J_AI_OnDamaged -///////////////////////// [On Damaged] ///////////////////////////////////////// - We attack any damager if same area (and not already fighting - then search for enemies (defaults to searching if there are no enemies left). -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - If we have a damager, not equal faction, and not a DM... - - We set Max Elemental damage. - - Sets the highest damager and amount (if the new damager is seen/heard) - - Polymorph improved a little - - Hide check - - Morale penalty (if set) - 1.4 - Elemental damage fixed with bugfixed introduced in later patches. - - Moved things around, more documentation, a little more ordered. - - Added the missing silent shout strings to get allies to attack. - - Damaged taunting will not happen if we are dead. -///////////////////////// [Workings] /////////////////////////////////////////// - Now with fixes, we can correctly set physical damage done (and elemental - damage). - - Otherwise, this acts like a hositile spell, or a normal attack or pickpocket - attempt would - and attack the damn person who dares damage us! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetTotalDamageDealt, GetLastDamager, GetCurrentHitPoints (and max), - GetDamageDealtByType (must be done seperatly for each, doesn't count melee damage) -///////////////////////// [On Damaged] ///////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-damaged-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DAMAGED_PRE_EVENT, EVENT_DAMAGED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Define Objects/Integers. - int nDamage = GetTotalDamageDealt(); - object oDamager = GetLastDamager(); - // Check to see if we will polymorph. - int nPolymorph = GetAIConstant(AI_POLYMORPH_INTO); - - // Total up the physical damage - - // Polymorph check. - if(nPolymorph >= 0) - { - // We won't polymorph if already so - if(!GetHasEffect(EFFECT_TYPE_POLYMORPH)) - { - // Polymorph into the requested shape. Cannot be dispelled. - effect eShape = SupernaturalEffect(EffectPolymorph(nPolymorph)); - effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); - DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eShape, OBJECT_SELF)); - DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF)); - } - DeleteAIConstant(AI_POLYMORPH_INTO);// We set it to invalid (sets to 0). - } - // First, we check AOE spells... - if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT) - { - // Set the damage done by it (the last damage) - // Set to the tag of the AOE, prefixed AI style to be sure. - // - Note, doesn't matter about things like - if(nDamage > 0) - { - // Set it to object to string, which we will delete later anywho. - SetAIInteger(ObjectToString(oDamager), nDamage); - } - } - // Hostile attacker...but it doesn't matter (at the moment) if they even - // did damage. - // * GetIgnoreNoFriend() wrappers DM, Validity, Faction Equal and Dead checks in one - else if(!GetIgnoreNoFriend(oDamager)) - { - // Adjust automatically if set. (and not an AOE) - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oDamager) && !GetFactionEqual(oDamager)) - { - AdjustReputation(oDamager, OBJECT_SELF, -100); - } - } - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oDamager); - - // Did they do damage to use? (IE: No DR) Some things are inapproprate - // to check if no damage was actually done. - if(nDamage > 0) - { - // Speak the damaged string, if applicable. - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - SpeakArrayString(AI_TALK_ON_DAMAGED); - } - // 1.4 note: These two variables are currently *unused* apart from - // healing. When healing a being (even another NPC) they are checked - // for massive damage. Can not bother to set the highest damager for now. - // NEW: - int nHighestDamage = GetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - if(nDamage >= nHighestDamage) - { - SetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT, nDamage); - } - - /* OLD: - - // Get the previous highest damager, and highest damage amount - object oHighestDamager = GetAIObject(AI_HIGHEST_DAMAGER); - int nHighestDamage = GetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - // Set the highest damager, if they are seen or heard, and have done loads. - if((GetObjectSeen(oDamager) || GetObjectHeard(oDamager)) && - nDamage >= nHighestDamage || !GetIsObjectValid(oHighestDamager)) - { - SetAIObject(AI_HIGHEST_DAMAGER, oDamager); - SetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT, nDamage); - } - // Else, if the original was not valid...or not seen/heard, we - // delete it so we don't bother to use it later. - else if(!GetIsObjectValid(oHighestDamager) || - (!GetObjectSeen(oHighestDamager) && !GetObjectHeard(oHighestDamager))) - { - DeleteAIObject(AI_HIGHEST_DAMAGER); - DeleteAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - } - */ - - // Get all the physical damage. Elemental damage is then nDamage minus - // the physical damage. - int nPhysical = GetDamageDealtByType(DAMAGE_TYPE_BASE_WEAPON | - DAMAGE_TYPE_BLUDGEONING | - DAMAGE_TYPE_PIERCING | - DAMAGE_TYPE_SLASHING); - // If they are all -1, then we make nPhysical 0. - if(nPhysical <= -1) nPhysical = 0; - - // Physical damage - only sets if the last damager is the last attacker. - if(GetAIObject(AI_STORED_LAST_ATTACKER) == oDamager) - { - // Get the previous highest damage and test it - if(nPhysical > GetAIInteger(AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT)) - { - // If higher, and was a melee/ranged attacker, set it. - // This does include other additional physical damage - EG: - // weapon property: Bonus Damage. - SetAIInteger(AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT, nPhysical); - } - } - - // Set the max elemental damage done, for better use of elemental - // protections. This is set for the most damage...so it could be - // 1 (for a +1 fire weapon, any number of hits) or over 50 (good - // fireball/flame storm etc.) - int nElemental = nDamage - nPhysical; - if(nElemental > GetAIInteger(MAX_ELEMENTAL_DAMAGE)) - { - SetAIInteger(MAX_ELEMENTAL_DAMAGE, nElemental); - } - // Set the last damage done, may set to 0 of course :-P - // * This is only set if they did damage us at all, however. - SetAIInteger(LAST_ELEMENTAL_DAMAGE, nElemental); - - // Morale: We may get a penalty if it does more than a cirtain amount of HP damage. - // Other: We set highest damager and amount. - if(!GetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER)) - { - // Get penalty and how much damage at once needs to be done - int nPenalty = GetBoundriedAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6, 50, 1); - int nToDamage = GetBoundriedAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6, GetMaxHitPoints(), 1); - if(nDamage > nToDamage) - { - // 61: "[Damaged] Morale Penalty for 600 seconds [Penalty]" + IntToString(iPenalty) - DebugActionSpeakByInt(61, OBJECT_INVALID, nPenalty); - // Apply penalty - SetMoralePenalty(nPenalty, 300.0); - } - } - } - // If we are not attacking anything, and not in combat, react! - if(!CannotPerformCombatRound()) - { - // 62: "[Damaged] Not in combat: DCR [Damager]" + GetName(oDamager) - DebugActionSpeakByInt(62, oDamager); - - // Check if they are in the same area. Can be a left AOE spell. - // Don't attack purposly across area's. - if(GetArea(oDamager) == GetArea(OBJECT_SELF)) - { - // Shout to allies to attack the enemy who attacked me - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - DetermineCombatRound(oDamager); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - DetermineCombatRound(); - } - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // Else it is friendly, or invalid damager - else - { - // Still will react - eg: A left AOE spell (which might mean a battle - // just happened) - if(!CannotPerformCombatRound()) - { - // Shout to allies to attack generally. No target to specifically attack, - // as it is an ally. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // 63: [Damaged] Not in combat: DCR. Ally hit us. [Damager(Ally?)]" + GetName(oDamager) - DebugActionSpeakByInt(63, oDamager); - DetermineCombatRound(); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // User defined event - for normally immoral creatures. - if(GetCurrentHitPoints() == 1) - { - // Fire the immortal damaged at 1 HP event. - FireUserEvent(AI_FLAG_UDE_DAMAGED_AT_1_HP, EVENT_DAMAGED_AT_1_HP); - } - // Fire End of Damaged event - FireUserEvent(AI_FLAG_UDE_DAMAGED_EVENT, EVENT_DAMAGED_EVENT); -} diff --git a/_module/nss/j_ai_ondeath.nss b/_module/nss/j_ai_ondeath.nss deleted file mode 100644 index c8fcf672..00000000 --- a/_module/nss/j_ai_ondeath.nss +++ /dev/null @@ -1,164 +0,0 @@ -/*/////////////////////// [On Death] /////////////////////////////////////////// - Filename: J_AI_OnDeath or nw_c2_default7 -///////////////////////// [On Death] /////////////////////////////////////////// - Speeded up no end, when compiling, with seperate Include. - Cleans up all un-droppable items, all ints and all local things when destroyed. - - Check down near the bottom for a good place to add XP or corpse lines ;-) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in Turn of corpses toggle - - Added in appropriate space for XP awards, marked with ideas (effect death) - 1.4 - Removed the redudnant notes on the "You have gained 0 experience" message -///////////////////////// [Workings] /////////////////////////////////////////// - You can edit this for experience, there is a seperate section for it. - - It will use DeathCheck to execute a cleanup-and-destroy script, that removes - any coprse, named "j_ai_destroyself". -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastKiller. -///////////////////////// [On Death] /////////////////////////////////////////*/ - -// We only require the constants/debug file. We have 1 function, not worth another include. -#include "J_INC_CONSTANTS" - -// We need a wrapper. If the amount of deaths, got in this, is not equal to iDeaths, -// we don't execute the script, else we do. :-P -void DeathCheck(int nDeaths); - -void main() -{ - // If we are set to, don't fire this script at all - if(GetAIInteger(I_AM_TOTALLY_DEAD)) return; - - // Pre-death-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DEATH_PRE_EVENT, EVENT_DEATH_PRE_EVENT)) return; - - // Note: No AI on/off check here. - - // Who killed us? (alignment changing, debug, XP). - object oKiller = GetLastKiller(); - - // Stops if we just applied EffectDeath to ourselves. - if(GetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH)) return; - - // Special: To stop giving out multiple amounts of XP, we use EffectDeath - // to change the killer, so the XP systems will NOT award MORE XP. - // - Even the default one suffers from this! - if(GetAIInteger(WE_HAVE_DIED_ONCE)) - { - if(!GetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH)) - { - // Don't apply effect death to self more then once per 2 seconds. - SetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH, 2.0); - // This should make the last killer us. - ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF); - ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(GetMaxHitPoints()), OBJECT_SELF); - } - } - else if(oKiller != OBJECT_SELF) - { - // Set have died once, stops giving out mulitple amounts of XP. - SetAIInteger(WE_HAVE_DIED_ONCE, TRUE); - -/*/////////////////////// [Experience] ///////////////////////////////////////// - THIS is the place for it, below this comment. - - It is useful to use GetFirstFactionMember (and Next), GiveXPToCreature, - GetXP, SetXP, GetChallengeRating (of self) all are really useful. - - Bug note: GetFirstFactionMember/Next with the PC parameter means either ONLY PC, - and so NPC henchmen, unless FALSE is used, will not be even recognised. -///////////////////////// [Experience] ///////////////////////////////////////*/ - // Do XP things (Use object "oKiller" for who killed us). - - - -/*/////////////////////// [Experience] ///////////////////////////////////////*/ - } - - // Note: Here we do a simple way of checking how many times we have died. - // Nothing special. Debugging most useful aspect. - int nDeathCounterNew = GetAIInteger(AMOUNT_OF_DEATHS); - nDeathCounterNew++; - SetAIInteger(AMOUNT_OF_DEATHS, nDeathCounterNew); - - // Here is the last time (in game seconds) we died. It is used in the executed script - // to make sure we don't prematurly remove areselves. - - // We may want some sort of visual effect - like implosion or something, to fire. - int nDeathEffect = GetAIConstant(AI_DEATH_VISUAL_EFFECT); - - // Valid constants from 0 and up. Apply to our location (not to us, who will go!) - if(nDeathEffect >= 0) - { - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nDeathEffect), GetLocation(OBJECT_SELF)); - } - // Default Commoner alignment changing. (If the commoner is not evil!) - if(GetLevelByClass(CLASS_TYPE_COMMONER) > 0 && - GetAlignmentGoodEvil(OBJECT_SELF) != ALIGNMENT_EVIL && - !GetSpawnInCondition(AI_FLAG_OTHER_NO_COMMONER_ALIGNMENT_CHANGE, AI_OTHER_MASTER)) - { - if(GetIsPC(oKiller)) - { - AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); - } - else - { - // If it is a summon, henchmen or familar of a PC, we adust the PC itself - // Clever, eh? - object oMaster = GetMaster(oKiller); - if(GetIsObjectValid(oMaster) && GetIsPC(oMaster)) - { - AdjustAlignment(oMaster, ALIGNMENT_EVIL, 5); - } - } - } - // Always shout when we are killed. Reactions - Morale penalty, and - // attack the killer. - AISpeakString(AI_SHOUT_I_WAS_KILLED); - - // Speaks the set death speak, like "AGGGGGGGGGGGGGGGGGGG!! NOOOO!" for instance :-) - // Note for 1.4: No need for "CanSpeak()" for this, of course. - SpeakArrayString(AI_TALK_ON_DEATH); - - // First check - do we use "destroyable corpses" or not? (default, yes) - if(!GetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER)) - { - // We will actually dissapear after 30.0 seconds if not raised. - int nTime = GetAIInteger(AI_CORPSE_DESTROY_TIME); - if(nTime == 0) // Error checking - { - nTime = 30; - } - // 64: "[Death] Checking corpse status in " + IntToString(nTime) + " [Killer] " + GetName(oKiller) + " [Times Died Now] " + IntToString(nDeathCounterNew) - DebugActionSpeakByInt(64, oKiller, nTime, IntToString(nDeathCounterNew)); - // Delay check - DelayCommand(IntToFloat(nTime), DeathCheck(nDeathCounterNew)); - } - else - { -/************************ [Alternative Corpses] ******************************** - This is where you can add some alternative corpse code - EG looting - and so on, without disrupting the rest of the AI (as the corpses - are turned off). -************************* [Alternative Corpses] *******************************/ - // Add alternative corpse code here - - -/************************ [Alternative Corpses] *******************************/ - } - // Signal the death event. - FireUserEvent(AI_FLAG_UDE_DEATH_EVENT, EVENT_DEATH_EVENT); -} - -// We need a wrapper. If the amount of deaths, got in this, is not equal to iDeaths, -// we don't execute the script, else we do. :-P -void DeathCheck(int nDeaths) -{ - // Do the deaths imputted equal the amount we have suffered? - if(GetAIInteger(AMOUNT_OF_DEATHS) == nDeaths) - { - // - This now includes a check for Bioware's lootable functions and using them. - ExecuteScript(FILE_DEATH_CLEANUP, OBJECT_SELF); - } -} diff --git a/_module/nss/j_ai_ondisturbed.nss b/_module/nss/j_ai_ondisturbed.nss deleted file mode 100644 index 1eb8f908..00000000 --- a/_module/nss/j_ai_ondisturbed.nss +++ /dev/null @@ -1,85 +0,0 @@ -/*/////////////////////// [On Disturbed] /////////////////////////////////////// - Filename: J_AI_OnDisturbed or nw_c2_default8 -///////////////////////// [On Disturbed] /////////////////////////////////////// - This will attack pickpockets, and inventory disturbers. Note: Stupidly, Bioware - made this only affect the creature by stealing. Still, oh well :-( - - This means that the only event which fires it is pickpocketing. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Changed why we determine combat round - - Any change in inventory will trigger appropriate SetWeapons again. - - Added turn of hide things. - 1.4 - Cleaned up a bit. Removed unused declared variable. -///////////////////////// [Workings] /////////////////////////////////////////// - Only fired by stealing, great. Oh well, it will attack any disturber anyway. - - It *might* not be fired if the natural spot check to notice a theft doesn't - work. No idea personally. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetInventoryDisturbItem, GetLastDisturbed, - GetInventoryDisturbType (I think it is always be stolen :-( ). -///////////////////////// [On Disturbed] /////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-disturbed-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DISTURBED_PRE_EVENT, EVENT_DISTURBED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Declare major variables - object oDisturber = GetLastDisturbed(); - object oItem = GetInventoryDisturbItem(); - int nType = GetInventoryDisturbType(); - int nBase = GetBaseItemType(oItem); - - // We will reset weapons if it is a weapon. - // Reset weapons, or specifically healers kits. - if(GetIsObjectValid(oItem)) - { - // Kits - if(nBase == BASE_ITEM_HEALERSKIT) - { - SetLocalInt(OBJECT_SELF, AI_WEAPONSETTING_SETWEAPONS, 2); - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - else // Think it is a weapon. Saves time :-) - { - SetLocalInt(OBJECT_SELF, AI_WEAPONSETTING_SETWEAPONS, 1); - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - } - // Fight! Or search! - if(!GetIgnoreNoFriend(oDisturber) && - (nType == INVENTORY_DISTURB_TYPE_STOLEN || GetIsEnemy(oDisturber))) - { - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oDisturber); - - // Can we attack? - if(!CannotPerformCombatRound()) - { - // Someone specific to attack - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // One debug speak. We always do one. - // 65: "[Disturbed] (pickpocket) Attacking Enemy Distrube [Disturber] " + GetName(oTarget) + " [Type] " + IntToString(iType) - DebugActionSpeakByInt(65, oDisturber, nType); - - // Attack the disturber - DetermineCombatRound(oDisturber); - } - else - { - // Get allies interested. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_DISTURBED_EVENT, EVENT_DISTURBED_EVENT); -} diff --git a/_module/nss/j_ai_onheartbeat.nss b/_module/nss/j_ai_onheartbeat.nss deleted file mode 100644 index e32ef925..00000000 --- a/_module/nss/j_ai_onheartbeat.nss +++ /dev/null @@ -1,114 +0,0 @@ -/*/////////////////////// [On Heartbeat] /////////////////////////////////////// - Filename: nw_c2_default1 or J_AI_OnHeartbeat -///////////////////////// [On Heartbeat] /////////////////////////////////////// - Removed stupid stuff, special behaviour, sleep. - - Also, note please, I removed waypoints and day/night posting from this. - It can be re-added if you like, but it does reduce heartbeats. - - Added in better checks to see if we should fire this script. Stops early if - some conditions (like we can't move, low AI settings) are set. - - Hint: If nothing is used within this script, either remove it from creatures - or create one witch is blank, with just a "void main(){}" at the top. - - Hint 2: You could add this very small file to your catche of scripts in the - module properties, as it runs on every creature every 6 seconds (ow!) - - This also uses a system of Execute Script :-D This means the heartbeat, when - compiled, should be very tiny. - - Note: NO Debug strings! - Note 2: Remember, I use default SoU Animations/normal animations. As it is - executed, we can check the prerequisists here, and then do it VIA - execute script. - - -Working- Best possible, fast compile. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added more "buffs" to fast buff. - - Fixed animations (they both WORK and looping ones do loop right!) - - Loot behaviour! - - Randomly moving nearer a PC in 25M if set. - - Removed silly day/night optional setting. Anything we can remove, is a good idea. - 1.4 - Removed AI level setting. Not good to use, I mistakenly added it. -///////////////////////// [Workings] /////////////////////////////////////////// - This fires off every 6 seconds (with PCs in the area, or AI_LEVEL_HIGH without) - and therefore is intensive. - - It fires of ExecutesScript things for the different parts - saves CPU stuff - if the bits are not used. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: Basically, none. Nothing activates this script. Fires every 6 seconds. -///////////////////////// [On Heartbeat] /////////////////////////////////////*/ - -// - This includes J_Inc_Constants -#include "J_INC_HEARTBEAT" - -void main() -{ - // Special - Runner from the leader shouts, each heartbeat, to others to get thier - // attention that they are being attacked. - // - Includes fleeing making sure (so it resets the ActionMoveTo each 6 seconds - - // this is not too bad) - // - Includes door bashing stop heartbeat - if(PerformSpecialAction()) return; - - // Pre-heartbeat-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, EVENT_HEARTBEAT_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff() || GetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER)) return; - - // Define the enemy and player to use. - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); - - // We can skip to the end if we are in combat, or something... - if(!JumpOutOfHeartBeat() && // We don't stop due to effects. - !GetIsInCombat() && // We are not in combat. - !GetIsObjectValid(GetAttackTarget()) && // Second combat check. - !GetObjectSeen(oEnemy)) // Nearest enemy is not seen. - { - // Fast buffing...if we have the spawn in condition... - if(GetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER) && - GetIsObjectValid(oEnemy) && GetDistanceToObject(oEnemy) <= 40.0) - { - // ...we may do an advanced buff. If we cannot see/hear oEnemy, but oEnemy - // is within 40M, we cast many defensive spells instantly... - ExecuteScript(FILE_HEARTBEAT_TALENT_BUFF, OBJECT_SELF); - //...if TRUE (IE it does something) we turn of future calls. - DeleteSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // This MUST STOP the heartbeat event - else, the actions may be interrupted. - return; - } - // Execute waypoints file if we have waypoints set up. - if(GetWalkCondition(NW_WALK_FLAG_CONSTANT)) - { - ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF); - } - // We can't have any waypoints for the other things - else - { - // We must have animations set, and not be "paused", so doing a - // longer looping one - // - Need a valid player. - if(GetIsObjectValid(oPlayer) && !IsInConversation(OBJECT_SELF)) - { - // We may search for PC enemies, 25% chance to move closer to PC's - if(GetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER) && - !GetLocalTimer(AI_TIMER_SEARCHING) && d4() == 1) - { - ExecuteScript(FILE_HEARTBEAT_WALK_TO_PC, OBJECT_SELF); - } - // Else, Do we have any animations to speak of? - // If we have a nearby PC, we do animations. - else if(GetHasValidAnimations()) - { - ExecuteScript(FILE_HEARTBEAT_ANIMATIONS, OBJECT_SELF); - } - } - } - } - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_HEARTBEAT_EVENT, EVENT_HEARTBEAT_EVENT); -} diff --git a/_module/nss/j_ai_onpercieve.nss b/_module/nss/j_ai_onpercieve.nss deleted file mode 100644 index 99987231..00000000 --- a/_module/nss/j_ai_onpercieve.nss +++ /dev/null @@ -1,220 +0,0 @@ -/*/////////////////////// [On Percieve] //////////////////////////////////////// - Filename: J_AI_OnPercieve or nw_c2_default2 -///////////////////////// [On Percieve] //////////////////////////////////////// - If the target is an enemy, attack - Will determine combat round on that person, is an enemy, basically. - Includes shouting for a big radius - if the spawn in condition is set to this. - - NOTE: Debug strings in this file will be uncommented for speed by default. - - It is one of the most intensive scripts as it runs so often. - - Attempted to optimise as much as possible. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - We include j_inc_other_ai to initiate combat (or go into combat again) - - j_inc_other_ai holds all other needed functions/integers ETC. - - Turn off hide things. - - Added "Only attack if attacked" - - Removed special conversation things. Almost no one uses them, and the taunt system is easier. - - Should now search around if they move to a dead body, and only once they get there. - 1.4 - TO DO: - - 1. Perception needs checking - attacking outside perception ranges! - 2. Vanishing targets, etc. test, improve. - 3. Problems with dispelling invisibility. Maybe either do change the line to create placable, or, of course, cast at location (dispells cannot be metamagiked or whatever) Source - 4. No Effect Type Ethereal. Source -///////////////////////// [Workings] /////////////////////////////////////////// - It fires: - - - When a creature enters it perception range (Set in creature properties) and - is seen or heard. - * Tests show (and in general) it fires HEARD first, then immediantly SEEN if, - of course, they are visible. Odd really, but true. - - When a creature uses invisiblity/leaves the area in the creatures perception - range - - When a creature appears suddenly, already in the perception range (not - the other way round, normally) - - When a creature moves out of the creatures perception range, and therefore - becomes unseen. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastPerceived, GetLastPerceptionSeen, GetLastPerceptionHeard, - GetLastPerceptionVanished, GetLastPerceptionInaudible. -///////////////////////// [On Percieve] //////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-percieve-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, EVENT_PERCIEVE_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Declare main things. - // - We declare OUTSIDE if's JUST IN CASE! - object oPerceived = GetLastPerceived(); - object oAttackTarget = GetAttackTarget(); - // 1.4: Very rarely is our attack target valid, so we will set it to - // what we would have melee attacked when DCR was called. - if(GetIgnoreNoFriend(oAttackTarget) || oAttackTarget == OBJECT_SELF) - { - oAttackTarget = GetAIObject(AI_LAST_MELEE_TARGET); - } - int bSeen = GetLastPerceptionSeen(); - int bHeard = GetLastPerceptionHeard(); - int bVanished = GetLastPerceptionVanished(); - int bInaudiable = GetLastPerceptionInaudible(); - - // Debug - DebugActionSpeak("*** PER ***: " + GetName(oPerceived) + "| SEEN: " + IntToString(bSeen) + - "| HEARD: " + IntToString(bHeard) + "| VANISHED: " + IntToString(bVanished) + - "| INAUDIABLE: " + IntToString(bInaudiable)); - - // Need to be valid and not ignorable. - if(GetIsObjectValid(oPerceived) && - !GetIsDM(oPerceived) && - !GetIgnore(oPerceived)) - { - // First, easy enemy checks. - if(GetIsEnemy(oPerceived) && !GetFactionEqual(oPerceived)) - { - DebugActionSpeak("*** PER *** ENEMY"); - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oPerceived); - - // Well, are we both inaudible and vanished? - // * the GetLastPerception should only say what specific event has fired! - if(bVanished || bInaudiable) - { - DebugActionSpeak("*** PER *** VANISHED OR INAUDIBLE"); - // If they just became invisible because of the spell - // invisiblity, or improved invisiblity...we set a local object. - // - Beta: Added in ethereal as well. - if(GetHasEffect(EFFECT_TYPE_INVISIBILITY, oPerceived) || - GetHasEffect(EFFECT_TYPE_SANCTUARY, oPerceived) || - GetStealthMode(oPerceived) == STEALTH_MODE_ACTIVATED) - { - // Set object, AND the location they went invisible! - SetAIObject(AI_LAST_TO_GO_INVISIBLE, oPerceived); - // We also set thier location for AOE dispelling - same name - SetAILocation(AI_LAST_TO_GO_INVISIBLE, GetLocation(oPerceived)); - } - - // If they were our target, follow! >:-D - // - Optional, on spawn option, for following through areas. - if(oAttackTarget == oPerceived) - { - DebugActionSpeak("*** PER *** VANISHED OR INAUDIBLE AND IS CURRENT TARGET"); - // This means they have exited the area! follow! - if(GetArea(oPerceived) != GetArea(OBJECT_SELF)) - { - ClearAllActions(); - // 51: "[Perception] Our Enemy Target changed areas. Stopping, moving too...and attack... [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(51, oPerceived); - // Call to stop silly moving to enemies if we are fleeing - ActionMoveToEnemy(oPerceived); - } - // - Added check for not casting a spell. If we are, we finnish - // (EG: AOE spell) and automatically carry on. - // 1.4: If we are using a targetted spell, we do cancle our - // spellcasting if it is them. - else if(GetCurrentAction() != ACTION_CASTSPELL || - GetAttackTarget() == oPerceived) - { - ClearAllActions(); - // 52: "[Perception] Enemy Vanished (Same area) Retargeting/Searching [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(52, oPerceived); - DetermineCombatRound(oPerceived); - } - } - }// End if just gone out of perception - // ELSE they have been SEEN or HEARD. We don't check specifics. - else //if(bSeen || bHeard) - { - // If they have been made seen, and they are our attack target, - // we must re-do combat round - unless we are casting a spell. - if(bSeen && GetCurrentAction() != ACTION_CASTSPELL && - (oAttackTarget == oPerceived || !GetObjectSeen(oAttackTarget))) - { - // 53: "[Perception] Enemy seen, and was old enemy/cannot see current. Re-evaluating (no spell) [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(53, oPerceived); - DetermineCombatRound(oPerceived); - - // Shout to allies to attack oPerceived - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - // Else We check if we are already attacking. - else if(!CannotPerformCombatRound() && - !GetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER)) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Special shout, d1000 though! - SpeakArrayString(AI_TALK_ON_PERCIEVE_ENEMY, TRUE); - } - - // Stop stuff because of facing point - New enemy - HideOrClear(); - - // Get all allies in 60M to come to thier aid. Talkvolume silent - // shout does not seem to work well. - // - void function. Checks for the spawn int. in it. - // - Turns it off in it too (5 minutes - 1.4) - // - Variable range On Spawn - ShoutBossShout(oPerceived); - - // 54: "[Perception] Enemy Seen. Not in combat, attacking. [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(54, oPerceived); - - // 1.4 change: SetFacingPoint(GetPosition(oPerceived)); - // Is now part of DetermineCombatRound(). - // * This means other events will work similarily. - DetermineCombatRound(oPerceived); - - // Warn others - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - } - } - // Else, they are an equal faction, or not an enemy (or both) - else - { - // If they are dead, or fighting, eg: we saw something on - // waypoints, we charge in to investigate. - // * Higher intelligence will buff somewhat as well! - if((GetIsDead(oPerceived) || GetIsInCombat(oPerceived)) && - (bSeen || bHeard)) - { - if(GetIsDead(oPerceived)) - { - // 55: "[Perception] Percieved Dead Friend! Moving into investigate [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(55, oPerceived); - } - else - { - // 56: "[Perception] Percieved Alive Fighting Friend! Moving to and attacking. [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(56, oPerceived); - } - // Check if we can attack - if(!CannotPerformCombatRound()) - { - // Hide or clear actions - HideOrClear(); - - // If we were called to arms, react - CallToArmsResponse(oPerceived); - } - else - { - // Warn others even if we don't, or cannot, attack - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - } - } - - // Fire End of Percieve event - FireUserEvent(AI_FLAG_UDE_PERCIEVE_EVENT, EVENT_PERCIEVE_EVENT); -} diff --git a/_module/nss/j_ai_onphiattack.nss b/_module/nss/j_ai_onphiattack.nss deleted file mode 100644 index d529a447..00000000 --- a/_module/nss/j_ai_onphiattack.nss +++ /dev/null @@ -1,136 +0,0 @@ -/*/////////////////////// [On Phisical Attacked] /////////////////////////////// - Filename: J_AI_OnPhiAttack or nw_c2_default5 -///////////////////////// [On Phisical Attacked] /////////////////////////////// - On Attacked - No checking for fleeing or warnings. - Very boring really! -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added hiding things - 1.4 - Missing Silent Shouts have been added. -///////////////////////// [Workings] /////////////////////////////////////////// - Got some simple Knockdown timer, so that we use heal sooner if we keep getting - a creature who is attempting to knock us down. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastAttacker, GetLastWeaponUsed, GetLastAttackMode, GetLastAttackType -///////////////////////// [On Phisical Attacked] /////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-attacked-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ATTACK_PRE_EVENT, EVENT_ATTACK_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Set up objects. - object oAttacker = GetLastAttacker(); - object oWeapon = GetLastWeaponUsed(oAttacker); - //int nMode = GetLastAttackMode(oAttacker); // Currently unused - int nAttackType = GetLastAttackType(oAttacker); - - // Check if they are valid, a DM, we are ignoring them, they are dead now, or invalid - if(!GetIgnoreNoFriend(oAttacker)) - { - // Adjust automatically if set. - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oAttacker)) - { - AdjustReputation(oAttacker, OBJECT_SELF, -100); - } - } - - // If we were attacked by knockdown, for a timer of X seconds, we make - // sure we attempt healing at a higher level. - if(!GetLocalTimer(AI_TIMER_KNOCKDOWN) && - (nAttackType == SPECIAL_ATTACK_IMPROVED_KNOCKDOWN || - nAttackType == SPECIAL_ATTACK_KNOCKDOWN) && - !GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_KNOCKDOWN) && - GetBaseAttackBonus(oAttacker) + 20 >= GetAC(OBJECT_SELF)) - { - SetLocalTimer(AI_TIMER_KNOCKDOWN, 30.0); - } - - // Set last hostile, valid attacker (Used in the On Damaged event) - SetAIObject(AI_STORED_LAST_ATTACKER, oAttacker); - - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Speak the phisically attacked string, if applicable. - // Speak the damaged string, if applicable. - SpeakArrayString(AI_TALK_ON_PHISICALLY_ATTACKED); - } - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oAttacker); - - // We set if we are attacked in HTH onto a low-delay timer. - // - Not currently used - /*if(!GetLocalTimer(AI_TIMER_ATTACKED_IN_HTH)) - { - // If the weapon is not ranged, or is not valid, set the timer. - if(!GetIsObjectValid(oWeapon) || - !GetWeaponRanged(oWeapon)) - { - SetLocalTimer(AI_TIMER_ATTACKED_IN_HTH, f18); - } - }*/ - - // If we are not fighting, and they are in the area, attack. Else, determine anyway. - if(!CannotPerformCombatRound()) - { - // Must be in our area to go after now. - if(GetArea(oAttacker) == GetArea(OBJECT_SELF)) - { - // 59: "[Phisically Attacked] Attacking back. [Attacker(enemy)] " + GetName(oAttacker) - DebugActionSpeakByInt(59, oAttacker); - - // Attack the attacker - DetermineCombatRound(oAttacker); - - // Shout to allies to attack the enemy who attacked me - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // 60: "[Phisically Attacked] Not same area. [Attacker(enemy)] " + GetName(oAttacker) - DebugActionSpeakByInt(60, oAttacker); - - // May find another hostile to attack... - DetermineCombatRound(); - } - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // Else, invalid, DM, ally, etc...must be prepared at least (could be - // they are charmed or something!) - else - { - // If we are not fighting, prepare for battle. Something bad must have - // happened. - if(!CannotPerformCombatRound()) - { - // Respond to oAttacker as if they shouted for help. - IWasAttackedResponse(oAttacker); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - - // Fire End of Attacked event - FireUserEvent(AI_FLAG_UDE_ATTACK_EVENT, EVENT_ATTACK_EVENT); -} diff --git a/_module/nss/j_ai_onrest.nss b/_module/nss/j_ai_onrest.nss deleted file mode 100644 index 42015fd0..00000000 --- a/_module/nss/j_ai_onrest.nss +++ /dev/null @@ -1,84 +0,0 @@ -/*/////////////////////// [On Rested] ////////////////////////////////////////// - Filename: J_AI_OnRest or nw_c2_defaulta -///////////////////////// [On Rested] ////////////////////////////////////////// - This will play the sitting animation for 6 seconds, just something for resting. - Also, walks waypoints (as resting would stop this) :-) and signals event (if so be) - Feel free to edit. - - It does have the spell trigger information resetting, however. This can - only be removed if they have no spell triggers, although it is hardly worth it. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added sitting. - 1.4 - Will be editing this down. No need to reset anything on rest, for a - better working AI. - IDEA: Change so that we will work through all spells/feats in order. - If, at cirtain levels, we do not have any spells to cast from that - level (set in a global stored integer in the general AI) we ignore all - spells in that level. Same for each talent category (no need to use - talents for them in the spawn script). - - If not in combat (EG: In heartbeat) we reset the integers saying "don't - bother checking those spells" to false. -///////////////////////// [Workings] /////////////////////////////////////////// - This fires once, at the END of resting. - - If ClearAllActions is added, the resting is actually stopped, or so it seems. - - It doesn't fire more then once. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: None, it seems. -///////////////////////// [On Rested] ////////////////////////////////////////*/ - -#include "J_INC_CONSTANTS" - -// Resets all spell triggers used for sString -void LoopResetTriggers(string sString, object oTrigger); - -void main() -{ - // Pre-rest-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_RESTED_PRE_EVENT, EVENT_RESTED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Simple debug. - // 66: "[Rested] Resting. Type: " + IntToString(GetLastRestEventType()) - DebugActionSpeakByInt(66, OBJECT_INVALID, GetLastRestEventType()); - - // Reset all spell triggers. - // Set all triggers - object oTrigger = GetAIObject(AI_SPELL_TRIGGER_CREATURE); - if(GetIsObjectValid(oTrigger)) - { - LoopResetTriggers(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, oTrigger); - LoopResetTriggers(SPELLTRIGGER_DAMAGED_AT_PERCENT, oTrigger); - LoopResetTriggers(SPELLTRIGGER_IMMOBILE, oTrigger); - LoopResetTriggers(SPELLTRIGGER_START_OF_COMBAT, oTrigger); - } - // Some sitting for a few seconds. - ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 6.0); - DelayCommand(9.0, ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF)); - - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_RESTED_EVENT, EVENT_RESTED_EVENT); -} - -// Resets all spell triggers used for sString -void LoopResetTriggers(string sString, object oTrigger) -{ - int nCnt, bBreak, bUsed; - for(nCnt = 1; bBreak != TRUE; nCnt++) - { - // Check max for this setting - bUsed = GetLocalInt(oTrigger, sString + USED); - if(bUsed) - { - DeleteLocalInt(oTrigger, sString + USED); - } - else - { - bBreak = TRUE; - } - } -} diff --git a/_module/nss/j_ai_onspawn.nss b/_module/nss/j_ai_onspawn.nss deleted file mode 100644 index 56a2db06..00000000 --- a/_module/nss/j_ai_onspawn.nss +++ /dev/null @@ -1,644 +0,0 @@ -/*/////////////////////// [On Spawn] /////////////////////////////////////////// - Filename: J_AI_OnSpawn or nw_c2_default9 -///////////////////////// [On Spawn] /////////////////////////////////////////// - This file contains options that will determine some AI behaviour, and a lot - of toggles for turning things on/off. A big read, but might be worthwhile. - - The documentation is actually fully in the readme files, under the name - "On Spawn.html", under "AI File Explanations". - - The order of the options: - - - Important Spawn Settings N/A - - Targeting & Fleeing (AI_TARGETING_FLEE_MASTER) - - Fighting & Spells (AI_COMBAT_MASTER) - - Other Combat - Healing, Skills & Bosses (AI_OTHER_COMBAT_MASTER) - - Other - Death corpses, minor things (AI_OTHER_MASTER) - - User Defined (AI_UDE_MASTER) - - Shouts N/A - - Default Bioware settings (WP's, Anims) (NW_GENERIC_MASTER) - - The OnSpawn file is a settings file. These things are set onto a creature, to - define cirtain actions. If more than one creature has this script, they all - use the settings, unless If/Else statements are used somehow. There is also - the process of setting any spells/feats availible, and hiding and walk waypoints - are started. - - Other stuff: - - Targeting is imporant :-D - - If you delete this script, there is a template for the On Spawn file - in the zip it came in, for use in the "scripttemplate" directory. -///////////////////////// [History] //////////////////////////////////////////// - Note: I have removed: - - Default "Teleporting" and exit/return (this seemed bugged anyway, or useless) - - Spawn in animation. This can be, of course, re-added. - - Day/night posting. This is uneeded, with a changed walk waypoints that does it automatically. - - 1.0-1.2 - Used short amount of spawn options. - 1.3 - All constants names are changed, I am afraid. - - Added Set/Delete/GetAIInteger/Constant/Object. This makes sure that the AI - doesn't ever interfere with other things - it pre-fixes all stored things - with AI_INTEGER_ (and so on) - 1.4 - TO DO: Clear up some old non-working ones - - Added in User Defined part of the script, an auto-turn-off-spells for - Ranger and Paladin classes. Need to test - perhaps 1.64 fixed it? - - - Spawn options changed: - - Removed AI level settings (can still be done manually) - - Added optional (and off by default) fear-visual for fleeing - - -///////////////////////// [Workings] /////////////////////////////////////////// - Note: You can do without all the comments (it may be that you don't want - the extra KB it adds or something, although it does not at all slow down a module) - so as long as you have these at the end: - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0, SpawnWalkWayPoints()); - - Oh, and the include file (Below, "j_inc_spawnin") must be at the top like - here. Also recommended is the AI_INTELLIGENCE and AI_MORALE being set (if - not using custom AI). -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetIsEncounterCreature -///////////////////////// [On Spawn] /////////////////////////////////////////*/ - -// Treasure Includes - See end of spawn for uncomment options. - -//#include "nw_o2_coninclude" -// Uncomment this if you want default NwN Treasure - Uses line "GenerateNPCTreasure()" at the end of spawn. -// - This generates random things from the default pallet based on the creatures level + race - -//#include "x0_i0_treasure" -// Uncomment this if you want the SoU Treasure - Uses line "CTG_GenerateNPCTreasure()" at the end of spawn. -// - This will spawn treasure based on chests placed in the module. See "x0_i0_treasure" for more information. - -// This is required for all spawn in options! -#include "J_INC_SPAWNIN" - -void main() -{ -/************************ [Important Spawn Settings] **************************/ - SetAIInteger(AI_INTELLIGENCE, 10); - // Intelligence value of the creauture. Can be 1-10, read readme's for help. - SetAIInteger(AI_MORALE, 10); - // Will save (See readme). Remember: -1 or below means they always flee. - //SetCustomAIFileName("CUSTOM_AI_FILE"); - // Sets our custom AI file. Really, only animation settings will apply when this is set. - // - Can sort actions against a imputted target (EG: On Percieved enemy) by - // "GetLocalObject(OBJECT_SELF, "AI_TEMP_SET_TARGET");" -/************************ [Important Spawn Settings] **************************/ - -/************************ [Targeting] ****************************************** - All targeting settings. -************************* [Targeting] *****************************************/ - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HP, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest current HP. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_AC, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest AC (as in 1.2). - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HD, AI_TARGETING_FLEE_MASTER); - // Target the lowest hit dice - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_MAGE_CLASSES, AI_TARGETING_FLEE_MASTER); - // We go straight for mages/sorcerors. Nearest one. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_ARCHERS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest enemy with a ranged weapon equipped. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_PCS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest seen PC enemy. - - //SetAIConstant(AI_FAVOURED_ENEMY_RACE, RACIAL_TYPE_HUMAN); - // The AI attacks the nearest enemy, seen, of this race. Use the RACIAL_* constants. - //SetAIConstant(AI_FAVOURED_ENEMY_CLASS, CLASS_TYPE_BARD); - // The AI attacks the nearest enemy, seen, of this class. Use the CLASS_* constants. - - // Target changing - see readme for info. - //SetAIInteger(AI_MAX_TURNS_TO_ATTACK_ONE_TARGET, 6); - // Maximum rounds to attack the current target, before re-checking. - // % Chance to re-set each target type each round (Could result in current target still) - //SetAIInteger(AI_MELEE_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_RANGED_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_SPELL_LAST_TO_NEW_TARGET_CHANCE, 20); - - // We only target PC's if there are any in range if this is set - //SetSpawnInCondition(AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS, AI_TARGETING_FLEE_MASTER); - - // Main explanation of AI_SetAITargetingValues, see the AI readme (spawn file) - // - Remember, uncommenting one will just ignore it (so will never check target's - // AC without TARGETING_AC on) - - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12); - // Spell mantals are checked only for the spell target. Either Absense of or got any. - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 2, 6); - // AC is used for all phisical attacks. Lower targets lower (By default). - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 2, 4); - // Used for spell attacks. Saves are sorta a AC versus spells. - - // Phisical protections. Used by spells, ranged and melee. - // Jasperre - simple check if we are a fighter (hit lower phisicals) or a - // mage (attack higher!) - if(GetBaseAttackBonus(OBJECT_SELF) > ((GetHitDice(OBJECT_SELF)/2) + 1)) - { - // Fighter/Clerics (It is over a mages BAB + 1 (IE 0.5 BAB/Level) target lower - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_LOWER, 2, 6); - } - else - { - // Mages target higher (so dispel/elemental attack those who fighters - // cannot hit as much). (the lowest BAB, under half our hit dice in BAB) - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5); - } - // Base attack bonus. Used for spells and phisical attacks. Checked with GetBaseAttackBonus. - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - // Hit dice - how powerful in levels the enemy is. Used for all checks. - AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3); - - //AI_SetAITargetingValues(TARGETING_HP_PERCENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_CURRENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_MAXIMUM, TARGET_LOWER, 1, 3); - // The HP's are the last thing to choose a target with. -/************************ [Targeting] *****************************************/ - -/************************ [Fleeing] ******************************************** - Fleeing - these are toggled on/off by FEARLESS flag. - - 3 or under intelligence will just run away. 4 or more will know where allies - are, and if there are none, will not run. -************************* [Fleeing] *******************************************/ - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Forces them to not flee. This may be set with AI_SetMaybeFearless at the end. - //SetSpawnInCondition(AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS, AI_TARGETING_FLEE_MASTER); - // This will make the creature never fight against impossible odds (8HD+ different) - //SetSpawnInCondition(AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER); - // This turns OFF any sort of group morale bonuses. - - //SetAIInteger(AMOUNT_OF_HD_DIFFERENCE_TO_CHECK, -2); - // If enemy is within this amount of HD, we do not check morale. - //SetAIInteger(BASE_MORALE_SAVE, 20); - // Base DC of the will save. It is set to 20 + HD difference - Morale - Group morale mod. - //SetAIInteger(HP_PERCENT_TO_CHECK_AT, 80); - // %HP needed to be at to check morale. This doesn't affect "Never fight impossible odds" - //SetSpawnInCondition(AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT, AI_TARGETING_FLEE_MASTER); - // This will turn off overriding HP checks. AI may decide to run even - // not at the %HP above, this turns the checks off. - - //SetAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6); - // Damage needed to be done at once to get a massive morale penalty (Below) - //SetAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6); - // Penalty for the above, set for some time to negativly affect morale. Added to save DC for fleeing. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER); - // If set, just runs to nearest non-seen ally, and removes the loop for a good group of allies to run to. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER); - // They will flee to the nearest object of the tag below, if set. - //SetLocalString(OBJECT_SELF, AI_FLEE_OBJECT, "BOSS_TAG_OR_WHATEVER"); - // This needs setting if the above is to work. - - //SetSpawnInCondition(AI_FLAG_FLEEING_USE_VISUAL_EFFECT, AI_TARGETING_FLEE_MASTER); - // If this is on, we play a visual effect while we flee. -/************************ [Fleeing] *******************************************/ - -/************************ [Combat - Fighters] ********************************** - Fighter (Phiscal attacks, really) specific stuff - disarmed weapons, better - at hand to hand, and archer behaviour. -************************* [Combat - Fighters] *********************************/ - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - - //SetAIInteger(AI_RANGED_WEAPON_RANGE, 3); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - //SetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER); - // Set if you want them to move forwards into HTH sooner. Will always - // if the enemy is a mage/archer, else % based on range. - - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER); - // For archers. If they have ally support, they'd rather move back & shoot then go into HTH. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER); - // This forces the move back from attackers, and shoot bows. Very small chance to go melee. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER); - // This will make the creature ALWAYs use any bows it has. ALWAYS. - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL, AI_COMBAT_MASTER); - // Turns off any attempts to kill dying PCs, or attack low hit point people. - // This is only ever attempted at 9 or 10 intelligence anyway. -/************************ [Combat - Fighters] *********************************/ - -/************************ [Combat - Spell Casters] ***************************** - Spellcaster AI has been improved significantly. As well as adding all new spells, - now spellcasters more randomly choose spells from the same level (EG: they - may choose not to cast magic missile, and cast negative energy ray instead). - - There are also options here for counterspelling, fast buffing, Cheat cast spells, - dispelling, spell triggers, long ranged spells first, immunity toggles, and AOE settings. -************************* [Combat - Spell Casters] ****************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - // Casts spells only if the caster would not move into range to cast them. - // IE long range spells, then medium, then short (unless the enemy comes to us!) - //SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // When an enemy comes in 40M, we fast-cast many defensive spells, as if prepared. - //SetSpawnInCondition(AI_FLAG_COMBAT_SUMMON_FAMILIAR, AI_COMBAT_MASTER); - // The caster summons thier familiar/animal companion. Either a nameless Bat or Badger respectivly. - - // Counterspelling/Dispelling... - // It checks for these classes within the 20M counterspell range. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Arcane (Mage/Sorceror) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Divine (Cleric/Druid) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP, AI_COMBAT_MASTER); - // Recommended. Only counterspells with 5+ allies in group. - - //SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_MAGES_MORE, AI_COMBAT_MASTER); - // Targets seen mages to dispel, else uses normal spell target. - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - // This will make the mage not dispel just anything all the time, but important (spell-stopping) - // things first, others later, after some spells. If off, anything is dispelled. - - // AOE's - //SetSpawnInCondition(AI_FLAG_COMBAT_NEVER_HIT_ALLIES, AI_COMBAT_MASTER); - // Override toggle. Forces to never cast AOE's if it will hit an ally + harm them. - //SetSpawnInCondition(AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE, AI_COMBAT_MASTER); - // Allies who will survive the blast are ignored for calculating best target. - //SetAIInteger(AI_AOE_ALLIES_LOWEST_IN_AOE, 3); - // Defualt: 3. If amount of allies in blast radius are equal or more then - // this, then that location is ignored. - //SetAIInteger(AI_AOE_HD_DIFFERENCE, -8); - // Very weak allies (who are not comparable to us) are ignored if we would hit them. - - // For these 2, if neither are set, the AI will choose AOE more if there are - // lots of enemies, or singles if there are not many. - //SetSpawnInCondition(AI_FLAG_COMBAT_SINGLE_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, single target spells are used first. - //SetSpawnInCondition(AI_FLAG_COMBAT_MANY_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, AOE spells are used first. - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - // A few Death spells may be cast top-prioritory if the enemy will always fail saves. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - // Will use a better target to summon a creature at (EG: Ranged attacker) - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - // Turns On "GetIsImmune" checks. Auto on for 7+ Intel. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - // Turns On checks for Globes & levels of spells. Auto on for 9+ Intel. - - //SetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER); - // This will make the caster buff more allies - or, in fact, use spells - // to buff allies which they might have not used before. - - //SetSpawnInCondition(AI_FLAG_COMBAT_USE_ALL_POTIONS, AI_COMBAT_MASTER); - // Uses all buffing spells before melee. - - //SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_ICE_DAGGER, SPELL_HORIZIKAULS_BOOM, SPELL_MELFS_ACID_ARROW, SPELL_NEGATIVE_ENERGY_RAY, SPELL_FLAME_ARROW); - // Special: Mages cast for ever with this set. - - // Spell triggers - //SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION); - // This is just an example. See readme for more info. - -/************************ [Combat - Spell Casters] ****************************/ - -/************************ [Combat - Dragons] *********************************** - I have a fondness for dragons - in NWN they are deprived of many abilities. Here - are some new ones for your enjoyment! Switches and flying for ANYTHING! :-) -************************* [Combat - Dragons] **********************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_WING_BUFFET, AI_COMBAT_MASTER); - //This sets so there is no Dragon wing buffet. Readme has details of it. - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BUFFET, 3); - // Min. Amount of Rounds between each buffet. See readme for counter defaults. Def: 3 - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BREATH, 3); - // Min. Amount of Rounds between each breath use. See readme for counter defaults. Def: 3 - - // Default checks for dragon flying automatic turning on of flying. - if(GetLevelByClass(CLASS_TYPE_DRAGON) || MyPRCGetRacialType(OBJECT_SELF) == RACIAL_TYPE_DRAGON) - { - SetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER); - // This turns ON combat flying. I think anything winged looks A-OK. See readme for info. - } -/************************ [Combat - Dragons] **********************************/ - -/************************ [Combat Other - Healers/Healing] ********************* - Healing behaviour - not specifically clerics. See readme. -************************* [Combat Other - Healers/Healing] ********************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_HEAL_AT_PERCENT_NOT_AMOUNT, AI_OTHER_COMBAT_MASTER); - // if this is set, we ignore the amount we need to be damaged, as long - // as we are under AI_HEALING_US_PERCENT. - //SetAIInteger(AI_HEALING_US_PERCENT, 50); - // % of HP we need to be at until we heal us at all. Default: 50 - //SetAIInteger(AI_HEALING_ALLIES_PERCENT, 60); - // % of HP allies would need to be at to heal them Readme = info. Default: 60 - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER); - // Turns on rasing dead with Resurrection/Raise dead. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER); - // This turns off all healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_RESTORE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally restoring (Remove/Restoration). - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_USE_BAD_HEALING_SPELLS, AI_OTHER_COMBAT_MASTER); - // This forces all cure spells to be used, check readme. - //SetAIInteger(SECONDS_BETWEEN_STATUS_CHECKS, 30); - // Seconds between when we loop everyone for bad effects like Fear/stun ETC. If not set, done each round. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER); - // ActionGiveItem standard healing potion's to allies who need them, if they possess them. - -/************************ [Combat Other - Healers/Healing] ********************/ - -/************************ [Combat Other - Skills] ****************************** - Skills are a part of fighting - EG Taunt. These are mainly on/off switches. - A creature will *may* use it if they are not set to "NO_" for the skill. -************************* [Combat Other - Skills] *****************************/ - - // "NO" - This is for forcing the skill NEVER to be used by the combat AI. - // "FORCE" - This forces it on (and to be used), except if they have no got the skill. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_SEARCH, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_SEARCH, AI_OTHER_COMBAT_MASTER); - // - Concentration - special notes in the readme - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - -/************************ [Combat Other - Skills] *****************************/ - -/************************ [Combat Other - Leaders] ***************************** - Leaders/Bosses can be set to issue some orders and inspire more morale - and bring - a lot of allies to a battle at once! -************************* [Combat Other - Leaders] ****************************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Special leader. Can issuse some orders. See readme for details. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER); - // Boss shout. 1 time use - calls all creatures in X meters (below) for battle! - //SetAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60); - // Defaults to a 60 M range. This can change it. Note: 1 toolset square = 10M. - -/************************ [Combat Other - Leaders] ****************************/ - -/************************ [Other - Behaviour/Generic] ************************** - This is generic behaviours - alright, really it is all things that cannot - really be categorised. -************************* [Other - Behaviour/Generic] *************************/ - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER); - // No ClearAllActions() before BeginConversation. May keep a creature sitting. - //SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - //SetSpawnInCondition(AI_FLAG_OTHER_CHEAT_MORE_POTIONS, AI_OTHER_MASTER); - // If at low HP, and no potion, create one and use it. - //SetAIConstant(AI_POLYMORPH_INTO, POLYMORPH_TYPE_WEREWOLF); - // Polymorph to this creature when damaged (once, natural effect). - - //AI_CreateRandomStats(-3, 3, 6); - // Create (Effect-applied) random statistics. - //AI_CreateRandomOther(-2, 2, -2, 2, -2, 2, -2, 2); - // Create (Effect-applied) random HP, saves, AC. - - //SetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER); - // This will store our spawn location, and then move back there after combat. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - //SetSpawnInCondition(AI_FLAG_OTHER_DONT_SHOUT, AI_OTHER_MASTER); - // Turns off all silent talking NPC's do to other NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER); - // Move randomly closer to enemies in range set below. - //SetAIInteger(AI_SEARCH_IF_ENEMIES_NEAR_RANGE, 25); - // This is the range creatures use, in metres. - - //SetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER); - // One shot. We won't instantly attack a creature we see. See readme. - - //SetAIInteger(AI_DOOR_INTELLIGENCE, 1); - // 3 Special "What to do with Doors" settings. See readme. Good for animals. - - //SetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER); - // When combat is over, creature rests. Useful for replenising health. - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER); - // Stops any use of "PlayVoiceChat". Use with Custom speakstrings. - - /*** Death settings - still under AI_OTHER_MASTER ***/ - - //AI_SetDeathResRef("Resref Here"); - // Creates a creature from the string set. Instantly destroys this creatures body on death. - - //SetAIConstant(AI_DEATH_VISUAL_EFFECT, VFX_FNF_IMPLOSION); - // Fires this visual effect number instantly on death. Use FNF and IMP ones. - - //SetAIInteger(AI_CORPSE_DESTROY_TIME, 30); - // Seconds before body finally gets destroyed. Used for Clerical Raise Dead on NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER); - // This turns off the SetDestroyable() usually performed, and the above timer. - - //SetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER); - // Makes the death file use Bioware's cool SetLootable() feature when corpses would disappear. - - /*** Lag and a few performance settings - still under AI_OTHER_MASTER ***/ - - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - // The creature doesn't check for, or use any items that cast spells. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - //The creature doesn't ever cast spells (and never checks them) - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_LISTENING, AI_OTHER_MASTER); - // The creature doesn't have SetListening() set. Turns of the basic listening for shouts. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER); - // Uses EquipMostDamaging(), like Bioware code. No shield/second weapon equipped. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_CURING_ALLIES, AI_OTHER_MASTER); - // This will stop checks for and curing of allies ailments. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER); - // Stops the heartbeat running (Except Pre-Heartbeat-event). - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER); - // Ignores targeting settings. VERY good for lag/bad AI. Attacks nearest seen enemy. - -/************************ [Other - Behaviour/Generic] *************************/ - -/************************ [User Defined and Shouts] **************************** - The user defined events, set up to fire here. - - New "Start combat attack" and "End Combat Attack" events - - New "Pre" events. Use these to optionally stop a script from firing - under cirtain circumstances as well! (Read nw_c2_defaultd or j_ai_onuserdef) - (User Defined Event = UDE) -************************* [User Defined and Shouts] ***************************/ - - // This is REQUIRED if we use any Pre-events. If not there, it will default - // to the default User Defined Event script for the default AI. - SetCustomUDEFileName("k_ai_onuserdef"); - - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_EVENT, AI_UDE_MASTER); // UDE 1001 - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER); // UDE 1021 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_EVENT, AI_UDE_MASTER); // UDE 1002 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, AI_UDE_MASTER); // UDE 1022 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, AI_UDE_MASTER); // UDE 1003 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, AI_UDE_MASTER); // UDE 1023 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_EVENT, AI_UDE_MASTER); // UDE 1004 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, AI_UDE_MASTER); // UDE 1024 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); // UDE 1005 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_PRE_EVENT, AI_UDE_MASTER); // UDE 1025 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_EVENT, AI_UDE_MASTER); // UDE 1006 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_PRE_EVENT, AI_UDE_MASTER); // UDE 1026 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_EVENT, AI_UDE_MASTER); // UDE 1007 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_PRE_EVENT, AI_UDE_MASTER); // UDE 1027 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_EVENT, AI_UDE_MASTER); // UDE 1008 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_PRE_EVENT, AI_UDE_MASTER); // UDE 1028 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_EVENT, AI_UDE_MASTER); // UDE 1009 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_PRE_EVENT, AI_UDE_MASTER); // UDE 1029 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, AI_UDE_MASTER); // UDE 1011 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, AI_UDE_MASTER); // UDE 1031 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_EVENT, AI_UDE_MASTER); // UDE 1015 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, AI_UDE_MASTER); // UDE 1035 - - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_EVENT, AI_UDE_MASTER); // UDE 1012 - // Fires when we have finnished all combat actions. - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT, AI_UDE_MASTER); // UDE 1032 - // This fires at the start of DetermineCombatRound() *IF they can do an action*. - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_AT_1_HP, AI_UDE_MASTER); // UDE 1014 - // Fires when we are damaged, and are at 1 HP. Use for immortal-flagged creatures. - - /*** Speakstrings - as it were, said under cirtain conditions % chance each time ***/ - - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CONVERSATION, 100, 4, "Hello there", "I hope you enjoy your stay", "Do you work here too?", "*Hic*"); - // On Conversation - see readme. Replaces BeginConversation(). - - // Morale - //AI_SetSpawnInSpeakArray(AI_TALK_ON_MORALE_BREAK, 100, 3, "No more!", "I'm outta here!", "Catch me if you can!"); - // Spoken at running point, if they run to a group of allies. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CANNOT_RUN, 100, 3, "Never give up! Never surrender!", "I've no where to run, so make my day!", "RRRAAAAA!!!"); - // Spoken at running point, if they can find no ally to run to, and 4+ Intelligence. See readme - //AI_SetSpawnInSpeakValue(AI_TALK_ON_STUPID_RUN, "Ahhhhgggg! NO MORE! Run!!"); - // As above, when morale breaks + no ally, but they panic and run from enemy at 3 or less intelligence. - - // Combat - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 5, 4, "Come on!", "You won't win!", "We are not equals! I am better!", "Nothing will stop me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 5, 4, "I'll try! try! and try again!", "Tough man, are we?", "Trying out your 'skills'? Pathetic excuse!", "Nothing good will come from killing me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 5, 4, "My strength is mighty then yours!", "You will definatly die!", "NO chance for you!", "No mercy! Not for YOU!"); - // Spoken each DetermineCombatRound. % is /1000. See readme for Equal/Over/Under values. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_TAUNT, 100, 3, "You're going down!", "No need to think, let my blade do it for you!", "Time to meet your death!"); - // If the creature uses thier skill, taunt, on an enemy this will be said. - - // Event-driven. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PERCIEVE_ENEMY, 70, 6, "Stand and fight, lawbreaker!", "Don't run from the law!", "I have my orders!", "I am ready for violence!", "CHARGE!", "Time you died!"); - // This is said when they see/hear a new enemy, and start attacking them. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_DAMAGED, 20, 2, "Ouch, damn you!", "Haha! Nothing will stop me!"); - // A random value is set to speak when damaged, and may fire same time as below ones. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PHISICALLY_ATTACKED, 20, 2, "Hah! Mear weapons won't defeat me!", "Pah! You cannot defeat me with such rubbish!"); - // This is said when an enemy attacks the creature with a melee/ranged weapon. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_HOSTILE_SPELL_CAST_AT, 20, 2, "No one spell will stop me!", "Is that all you have!?!"); - // This is said when an enemy attacks the creature with a hostile spell. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_DEATH, "Agggggg!"); - // This will ALWAYS be said, whenever the creature dies. - - // Specific potion ones. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_PASS_POTION, "Here! Catch!"); - // This will be spoken when the creature passes a potion to an ally. See readme. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_GOT_POTION, "Got it!"); - // This will be spoken by the creature we pass the potion too, using AssignCommand(). - - // Leader ones - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_SEND_RUNNER, "Quickly! We need help!"); - // This will be said when the leader, if this creature, sends a runner. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_ATTACK_TARGET, "Help attack this target!"); - // When the leader thinks target X should be attacked, it will say this. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_BOSS_SHOUT, "Come my minions! To battle!"); - // This will be said when the leader, if this creature, sees an enemy and uses his "Boss Monster Shout", if turned on. - - -/************************ [User Defined and Shouts] ***************************/ - -/************************ [Bioware: Animations/Waypoints/Treasure] ************* - All Bioware Stuff. I'd check out "x0_c2_spwn_def" for the SoU/Hordes revisions. -************************* [Bioware: Animations/Waypoints/Treasure] ************/ - - // SetSpawnInCondition(NW_FLAG_STEALTH, NW_GENERIC_MASTER); - // SetSpawnInCondition(NW_FLAG_SEARCH, NW_GENERIC_MASTER); - // Uses said skill while WalkWaypoints() - - // SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING, NW_GENERIC_MASTER); - // Separate the NPC's waypoints into day & night. See comment in "nw_i0_generic" for use. - - // SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // This will cause an NPC to use common animations it possesses, - // and use social ones to any other nearby friendly NPCs. - // SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Same as above, except NPC will wander randomly around the area. - - // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); - // Interacts with placeables + More civilized actions. See Readme. - // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); - // Will use random voicechats during animations, if Civilized - // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); - // Will move around the area a bit more, if using Immobile Animations. See readme. - - // Treasure generating. - //CTG_GenerateNPCTreasure(); - // SoU. Requires "x0_i0_treasure" to be uncommented. See readme. - //GenerateNPCTreasure(); - // Default NwN. Requires "nw_o2_coninclude" to be uncommented. See readme. - -/************************ [Bioware: Animations/Waypoints/Treasure] ************/ - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - -/************************ [User] *********************************************** - This is the ONLY place you should add user things, on spawn, such as - visual effects or anything, as it is after SetUpEndOfSpawn. By default, this - does have encounter animations on. This is here, so is easily changed :-D - - Be careful otherwise. - - Notes: - - SetListening is already set to TRUE, unless AI_FLAG_OTHER_LAG_NO_LISTENING is on. - - SetListenPattern's are set from 0 to 7. - - You can use the wrappers AI_SpawnInInstantVisual and AI_SpawnInPermamentVisual - for visual effects (Instant/Permament as appropriate). -************************* [User] **********************************************/ - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - // Leave this in if you use the variable for creature attacks, as for golems. Bioware's code. - int nNumber = GetLocalInt(OBJECT_SELF, "CREATURE_VAR_NUMBER_OF_ATTACKS"); - if(nNumber > 0) - { - SetBaseAttackBonus(nNumber); - } - - // If we are a ranger or paladin class, do not cast spells. This can be - // manually removed if wished. To get the spells they have working correctly, - // remove this, and use Monster Abilties instead of thier normal class spells. -// if(GetLevelByClass(CLASS_TYPE_RANGER) >= 1 || GetLevelByClass(CLASS_TYPE_PALADIN) >= 1) -// { -// SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); -// } - -/************************ [User] **********************************************/ - - // Note: You shouldn't really remove this, even if they have no waypoints. - DelayCommand(2.0, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/j_ai_onspellcast.nss b/_module/nss/j_ai_onspellcast.nss deleted file mode 100644 index 6bee0e66..00000000 --- a/_module/nss/j_ai_onspellcast.nss +++ /dev/null @@ -1,493 +0,0 @@ -/*/////////////////////// [On Spell Cast At] /////////////////////////////////// - Filename: j_ai_onspellcast or nw_c2_defaultb -///////////////////////// [On Spell Cast At] /////////////////////////////////// - What does this do? Well... - - Any AOE spell effects are set in a timer, so we can react to them right - - Reacts to hostile casters, or allies in combat - - And the normal attack :-) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added special AOE checks. - - Hide checks. - 1.4 - Added more silent shouts. Edited the formatting. Moved a few things around. -///////////////////////// [Workings] /////////////////////////////////////////// - This is fired when EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE) - is signaled on the creature. - - GetLastSpellCaster() = oCaster (Door, Placeable, Creature who cast it) - GetLastSpell() = nSpell (The spell cast at us) - GetLastSpellHarmful()= bHarmful (If it is harmful!) -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastSpellCaster, GetLastSpellHarmful GetLastSpell() -///////////////////////// [On Spell Cast At] /////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -// Sets a local timer if the spell is an AOE one -void SetAOESpell(int nSpellCast, object oCaster); -// Gets the nearest AOE cast by oCaster, of sTag. -object GetNearestAOECastBy(string sTag, object oCaster); -// Gets the amount of protections we have - IE globes -int GetOurSpellLevelImmunity(); - -void main() -{ - // Pre-spell cast at-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, EVENT_SPELL_CAST_AT_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - object oCaster = GetLastSpellCaster(); - int bHarmful = GetLastSpellHarmful(); - int nSpellCast = GetLastSpell(); - object oAttackerOfCaster; - - // If harmful, we set the spell to a timer, if an AOE one. - if(bHarmful && GetIsObjectValid(oCaster)) - { - // Might set AOE spell to cast. - SetAOESpell(nSpellCast, oCaster); - } - // If not a creature, probably an AOE or trap. - if(GetObjectType(oCaster) != OBJECT_TYPE_CREATURE) - { - // 67: "[Spell] Caster isn't a creature! May look for target [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(67, oCaster); - - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // Attack anyone else around - if(!CannotPerformCombatRound()) - { - // Determine Combat Round - DetermineCombatRound(); - } - } - // If a friend, or dead, or a DM, or invalid, or self, we ignore them. - else if(!GetIgnoreNoFriend(oCaster) && oCaster != OBJECT_SELF) - { - // 1.3 changes here: - // - We do NOT need to know if it is hostile or not, except if it is hostile - // and they are not our faction! We do, however, use bHarmful for speakstrings. - - // If harmful, we attack anyone! (and if is enemy) - // 1.4: Faction equal check in GetIgnoreNoFriend() - if(bHarmful || GetIsEnemy(oCaster)) - { - // Spawn in condition hostile thingy - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oCaster)) - { - AdjustReputation(oCaster, OBJECT_SELF, -100); - } - } - - if(bHarmful) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Hostile spell speaksting, if set. - SpeakArrayString(AI_TALK_ON_HOSTILE_SPELL_CAST_AT); - } - } - - // Turn of hiding check - TurnOffHiding(oCaster); - - // We attack - if(!CannotPerformCombatRound()) - { - // 68: "[Spell:Enemy/Hostile] Not in combat. Attacking: [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(68, oCaster); - DetermineCombatRound(oCaster); - } - - // Shout to allies to attack the enemy who attacked me, got via. Last Hostile Actor. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - // Else, was neutral perhaps. Don't attack them anyway. - else - { - // 69: "[Spell] (ally). Not in combat. May Attack/Move [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(69, oCaster); - - // Set special action to investigate - as if this event was triggered - // by I_WAS_ATTACKED. - - // If we are already attacking, we do not move - if(CannotPerformCombatRound()) - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - else - { - // We react as if the caster, a neutral, called for help ala - // I_WAS_ATTACKED (they might not have, might just be - // preperation for something), but normally, this is a neutral - // casting a spell. Do not respond to PC's. - if(!GetIsPC(oCaster)) - { - IWasAttackedResponse(oCaster); - } - } - } - } - // If they are not a faction equal, and valid, we help them. - else if(GetIsObjectValid(oCaster) && GetFactionEqual(oCaster)) - { - IWasAttackedResponse(oCaster); - } - // Fire End-spell cast at-UDE - FireUserEvent(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, EVENT_SPELL_CAST_AT_EVENT); -} - -// Sets a local timer if the spell is an AOE one -void SetAOESpell(int nSpellCast, object oCaster) -{ - // Check it is one we can check - int bStop = TRUE; - switch(nSpellCast) - { - case SPELL_ACID_FOG: - case SPELL_MIND_FOG: - case SPELL_STORM_OF_VENGEANCE: - case SPELL_GREASE: - case SPELL_CREEPING_DOOM: - case SPELL_SILENCE: - case SPELL_BLADE_BARRIER: - case SPELL_CLOUDKILL: - case SPELL_STINKING_CLOUD: - case SPELL_WALL_OF_FIRE: - case SPELL_INCENDIARY_CLOUD: - case SPELL_ENTANGLE: - case SPELL_EVARDS_BLACK_TENTACLES: - case SPELL_CLOUD_OF_BEWILDERMENT: - case SPELL_STONEHOLD: - case SPELL_VINE_MINE: - case SPELL_SPIKE_GROWTH: - case SPELL_VINE_MINE_HAMPER_MOVEMENT: - case SPELL_VINE_MINE_ENTANGLE: - { - bStop = FALSE; - } - break; - } - // Check immune level - int nImmuneLevel = GetOurSpellLevelImmunity(); - if(nImmuneLevel >= 9) - { - bStop = TRUE; - } - // Check - if(bStop == TRUE) - { - return; - } - // We do use intelligence here... - int nAIInt = GetBoundriedAIInteger(AI_INTELLIGENCE); - int bIgnoreSaves; - int bIgnoreImmunities; - object oAOE; - - // If it is low, we ignore all things that we could ignore with it... - if(nAIInt <= 3) - { - bIgnoreSaves = TRUE; - bIgnoreImmunities = TRUE; - } - // Average ignores saves - else if(nAIInt <= 7) - { - bIgnoreSaves = TRUE; - bIgnoreImmunities = FALSE; - } - // Else, we do both. - else - { - bIgnoreSaves = FALSE; - bIgnoreImmunities = FALSE; - } - - int bSetAOE = FALSE;// TRUE means set to timer - int nSaveDC = 11; - - // Get the caster DC, the most out of WIS, INT or CHA... - int nInt = GetAbilityModifier(ABILITY_INTELLIGENCE, oCaster); - int nWis = GetAbilityModifier(ABILITY_WISDOM, oCaster); - int nCha = GetAbilityModifier(ABILITY_CHARISMA, oCaster); - - if(nInt > nWis && nInt > nCha) - { - nSaveDC += nInt; - } - else if(nWis > nCha) - { - nSaveDC += nWis; - } - else - { - nSaveDC += nCha; - } - // Note: - // - No reaction type/friendly checks. Signal Event is only fired if the - // spell WILL pierce any PvP/Friendly/Area settings - - // We check immunities here, please note... - switch(nSpellCast) - { - // First: IS GetIsReactionTypeHostile ones. - case SPELL_EVARDS_BLACK_TENTACLES: - // Fortitude save, but if we are immune to the hits, its impossible to hurt us - { - // If save immune OR AC immune, we ignore this. - if(25 >= GetAC(OBJECT_SELF) && nImmuneLevel < 4 && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 2) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Nearest string of tag - oAOE = GetNearestAOECastBy(AI_AOE_PER_EVARDS_BLACK_TENTACLES, oCaster); - } - } - case SPELL_SPIKE_GROWTH: - case SPELL_VINE_MINE_HAMPER_MOVEMENT: - // d4 damage. LOTS of speed loss. - // Reflex save, or immunity, would stop the speed - { - if(nImmuneLevel < 3 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 5) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Both use ENTANGLE AOE's - oAOE = GetNearestAOECastBy(AI_AOE_PER_ENTANGLE, oCaster); - } - } - break; - case SPELL_ENTANGLE: - case SPELL_VINE_MINE_ENTANGLE: - { - if(nImmuneLevel < 1 && - (!GetHasFeat(FEAT_WOODLAND_STRIDE) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_ENTANGLE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 4) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Both use ENTANGLE AOE's - oAOE = GetNearestAOECastBy(AI_AOE_PER_ENTANGLE, oCaster); - } - } - break; - case SPELL_WEB: - { - if(nImmuneLevel < 1 && - (!GetHasFeat(FEAT_WOODLAND_STRIDE) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_ENTANGLE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 4) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Web AOE - oAOE = GetNearestAOECastBy(AI_AOE_PER_WEB, oCaster); - } - } - break; - // Fort save - case SPELL_STINKING_CLOUD: - { - if(nImmuneLevel < 3 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_POISON) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_DAZED) || bIgnoreImmunities) && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 6) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Stinking cloud persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGSTINK, oCaster); - } - } - break; - // Fort save - case SPELL_CLOUD_OF_BEWILDERMENT: - { - if(nImmuneLevel < 2 && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 7) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Bewilderment cloud persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGBEWILDERMENT, oCaster); - } - } - break; - // Special: Mind save is the effect. - case SPELL_STONEHOLD: - { - if(nImmuneLevel < 6 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_MIND_SPELLS) || bIgnoreImmunities) && - ((GetWillSavingThrow(OBJECT_SELF) < nSaveDC + 7) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Stonehold persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_STONEHOLD, oCaster); - } - } - break; - // Special: EFFECT_TYPE_SAVING_THROW_DECREASE is the effect. - case SPELL_MIND_FOG: - { - if(nImmuneLevel < 5 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_SAVING_THROW_DECREASE) || bIgnoreImmunities) && - ((GetWillSavingThrow(OBJECT_SELF) < nSaveDC + 6) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Mind fog - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGMIND, oCaster); - } - } - break; - // Special: Feats, knockdown - case SPELL_GREASE: - { - if(nImmuneLevel < 1 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_KNOCKDOWN) || bIgnoreImmunities) && - (!GetHasFeat(FEAT_WOODLAND_STRIDE, OBJECT_SELF) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 2) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Grease - oAOE = GetNearestAOECastBy(AI_AOE_PER_GREASE, oCaster); - } - } - break; - // All other ReactionType ones. Some have different saves though! - case SPELL_BLADE_BARRIER: // Reflex - case SPELL_INCENDIARY_CLOUD:// reflex - case SPELL_WALL_OF_FIRE:// Reflex - { - if(nImmuneLevel < 6 && - (((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 6) && - !GetHasFeat(FEAT_IMPROVED_EVASION) && - !GetHasFeat(FEAT_EVASION)) || bIgnoreSaves)) - { - bSetAOE = TRUE; - if(nSpellCast == SPELL_BLADE_BARRIER) - { - // BB - oAOE = GetNearestAOECastBy(AI_AOE_PER_WALLBLADE, oCaster); - } - else if(nSpellCast == SPELL_INCENDIARY_CLOUD) - { - // Fog of fire - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGFIRE, oCaster); - } - else if(nSpellCast == SPELL_WALL_OF_FIRE) - { - // Wall of fire - oAOE = GetNearestAOECastBy(AI_AOE_PER_WALLFIRE, oCaster); - } - } - } - break; - case SPELL_ACID_FOG: // Fort: Half. No check, always damages. - case SPELL_CLOUDKILL:// No save! - case SPELL_CREEPING_DOOM: // No save! - { - if(nImmuneLevel < 6) - { - bSetAOE = TRUE; - if(nSpellCast == SPELL_ACID_FOG) - { - // Acid fog - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGACID, oCaster); - } - else if(nSpellCast == SPELL_CLOUDKILL) - { - // Cloud Kill - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGKILL, oCaster); - } - else if(nSpellCast == SPELL_CREEPING_DOOM) - { - // Creeping doom - oAOE = GetNearestAOECastBy(AI_AOE_PER_CREEPING_DOOM, oCaster); - } - } - } - // Storm - because the AI likes it, we stay in it if it is ours :-) - case SPELL_STORM_OF_VENGEANCE: // Reflex partial. No check, always damages. - { - if(oCaster != OBJECT_SELF && nImmuneLevel < 9) - { - bSetAOE = TRUE; - // Storm of vengance - oAOE = GetNearestAOECastBy(AI_AOE_PER_STORM, oCaster); - } - } - } - if(bSetAOE) - { - if(!GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast))) - { - SetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast), 18.0); - // Set nearest AOE - if(GetIsObjectValid(oAOE)) - { - // Set nearest AOE of this spell to the local - object oNearest = GetAIObject(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast)); - if(GetDistanceToObject(oAOE) < GetDistanceToObject(oNearest) || - !GetIsObjectValid(oNearest)) - { - SetAIObject(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast), oAOE); - } - } - } - } -} -// Gets the nearest AOE cast by oCaster, of sTag. -object GetNearestAOECastBy(string sTag, object oCaster) -{ - int nCnt = 1; - object oAOE = GetNearestObjectByTag(sTag, OBJECT_SELF, nCnt); - object oReturn = OBJECT_INVALID; - // Loop - while(GetIsObjectValid(oAOE) && !GetIsObjectValid(oReturn)) - { - // Check creator - if(GetAreaOfEffectCreator(oAOE) == oCaster) - { - oReturn = oAOE; - } - nCnt++; - oAOE = GetNearestObjectByTag(sTag, OBJECT_SELF, nCnt); - } - return oReturn; -} - -// Gets the amount of protections we have - IE globes -int GetOurSpellLevelImmunity() -{ - int nNatural = GetLocalInt(OBJECT_SELF, AI_SPELL_IMMUNE_LEVEL); - // Stop here, if natural is over 4 - if(nNatural > 4) return nNatural; - - // Big globe affects 4 or lower spells - if(GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, OBJECT_SELF) || nNatural >= 4) - return 4; - // Minor globe is 3 or under - if(GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, OBJECT_SELF) || - // Shadow con version - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, OBJECT_SELF) || - nNatural >= 3) - return 3; - // 2 and under is ethereal visage. - if(GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, OBJECT_SELF) || nNatural >= 2) - return 2; - // Ghostly Visarge affects 1 or 0 level spells, and any spell immunity. - if(GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, OBJECT_SELF) || nNatural >= 1 || - // Or shadow con version. - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE, OBJECT_SELF)) - return 1; - // Return nNatural, which is 0-9 - return FALSE; -} diff --git a/_module/nss/j_ai_onuserdef.nss b/_module/nss/j_ai_onuserdef.nss deleted file mode 100644 index f676cf33..00000000 --- a/_module/nss/j_ai_onuserdef.nss +++ /dev/null @@ -1,326 +0,0 @@ -/*/////////////////////// [On User Defined] //////////////////////////////////// - Filename: J_AI_OnUserDef or nw_c2_defaultd -///////////////////////// [Workings] /////////////////////////////////////////// - 1.4 Adds proper Pre-event functionality. Use this to make sure you keep the - AI working, but making small additions using this event. - - Can be deleted to save space if you want :-) - - How to use user defined events (brief): - - There are a set of optional Spawn In values you can set within the spawn file. - If you set one of the Events to fire, it will activate this script. Then, - under the correct choice (EG I choose the Pre-Heartbeat event, then I - uncomment the line "SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER);" - and find, in this file, the section with EVENT_HEARTBEAT_PRE_EVENT above it). - add in whatever to do. - - With my Pre-heartbeat example, if I wanted it to check for a PC, then - check for a combat dummy, and attack it, I'd add this between the brackets: - - // Code: - - // Not in combat, of course! - if(!GetIsInCombat()) - { - // Function in j_inc_npc_attack to get nearest PC - object oPC = GetNearestPCCreature(); - // Why check for a PC? Well, it saves memory - if(GetIsObjectValid(oPC) && GetDistanceToObject(oPC) <= 40.0) - { - object oDummy = GetNearestObjectByTag("DUMMY"); - if(GetIsObjectValid(oDummy)) - { - ClearAllActions(); - ActionAttack(oDummy); - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_HEARTBEAT_PRE_EVENT); - // Stop rest of script - return; - } - } - } - - // End code - - Simple, no? - - You can delete sections you don't need, and is recommended as long as you know - how to use User Defined events. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in with some documentation - 1.4 - Changed Pre-events. Now, it uses Execute Script. Will need to set - a special string on the creature to now what script to fire. - - It means they work correctly, however! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: Dependant on event. See seperate event scripts. -///////////////////////// [On User Defined] //////////////////////////////////*/ - -// This contains a lot of useful things. -// - Combat starting -// - Constant values -// - Get/Set spawn in values. -#include "J_INC_OTHER_AI" -// This contains some useful things to get NPC's to attack and so on. -#include "J_INC_NPC_ATTACK" - -/************************ [UDE Values] ***************************************** - These are uneeded, but here for reference. Use the constants in the file - "j_inc_constants" like "EVENT_HEARTBEAT_PRE_EVENT" which is classed as 1021. - * The normal death event might not fire before the creature has vanished. - Use the Pre-event (but with no stopping the death event) if you want a special - death event to happen. - - Name Normal-End event - Pre-Event - Heartbeat Event 1001 1021 - Percieve Event 1002 1022 - Combat Round Event 1003 1023 - Dialog Event 1004 1024 - Attack Event 1005 1025 - Damaged Event 1006 1026 - Death Event 1007 1027 - Disturbed Event 1008 1028 - Rested Event 1009 1029 - Spell Cast At Event 1011 1031 - Combat Action Event 1012 1032 - Damaged 1HP Event 1014 - - Blocked Event 1015 1035 -************************* [UDE Values] ****************************************/ - -void main() -{ - // Get the user defined number. - // * NOTE: YOU MUST USE AI_GetUDENumber(), not GetUserDefinedEventNumber()! - int nEvent = AI_GetUDENumber(); - - // Events. - switch(nEvent) - { - // Event Heartbeat - // Arguments: Basically, none. Nothing activates this script. Fires every 6 seconds. - case EVENT_HEARTBEAT_PRE_EVENT: - { - // This fires before the rest of the On Heartbeat file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_HEARTBEAT_PRE_EVENT); - } - break; - case EVENT_HEARTBEAT_EVENT: - { - // This fires after the rest of the On Heartbeat file does - - } - break; - - // Event Percieve - // Arguments: GetLastPerceived, GetLastPerceptionSeen, GetLastPerceptionHeard, - // GetLastPerceptionVanished, GetLastPerceptionInaudible. - case EVENT_PERCIEVE_PRE_EVENT: - { - // This fires before the rest of the On Percieve file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_PERCIEVE_PRE_EVENT); - } - break; - case EVENT_PERCIEVE_EVENT: - { - // This fires after the rest of the On Percieve file does - - } - break; - - // Event Combat Round End - // Arguments: GetAttackTarget, GetLastHostileActor, GetAttemptedAttackTarget, - // GetAttemptedSpellTarget (Or these are useful at least!) - case EVENT_END_COMBAT_ROUND_PRE_EVENT: - { - // This fires before the rest of the On Combat Round End file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_END_COMBAT_ROUND_PRE_EVENT); - } - break; - case EVENT_END_COMBAT_ROUND_EVENT: - { - // This fires after the rest of the On Combat Round End file does - - } - break; - - // Event Dialogue - // Arguments: GetListenPatternNumber, GetLastSpeaker, TestStringAgainstPattern, - // GetMatchedSubstring (I think), - case EVENT_ON_DIALOGUE_PRE_EVENT: - { - // This fires before the rest of the dialog file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ON_DIALOGUE_PRE_EVENT); - } - break; - case EVENT_ON_DIALOGUE_EVENT: - { - // This fires after the rest of the dialog file does - - } - break; - - // Event Attacked - // Arguments: GetLastAttacker, GetLastWeaponUsed, GetLastAttackMode, - // GetLastAttackType - case EVENT_ATTACK_PRE_EVENT: - { - // This fires before the rest of the Attacked file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ATTACK_PRE_EVENT); - } - break; - case EVENT_ATTACK_EVENT: - { - // This fires after the rest of the Attacked file does - - } - break; - - // Event Damaged - // Arguments: GetTotalDamageDealt, GetLastDamager, GetCurrentHitPoints - // (and max), GetDamageDealtByType - case EVENT_DAMAGED_PRE_EVENT: - { - // This fires before the rest of the damaged file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DAMAGED_PRE_EVENT); - } - break; - case EVENT_DAMAGED_EVENT: - { - // This fires after the rest of the damaged file does - - } - break; - - // Event Death - // Arguments: GetLastKiller - case EVENT_DEATH_PRE_EVENT: - { - // This fires before the rest of the death file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DEATH_PRE_EVENT); - } - break; - case EVENT_DEATH_EVENT: - { - // This fires after the rest of the death file does - - } - break; - - // Event Distrubed - // Arguments: GetInventoryDisturbItem, GetLastDisturbed, - // GetInventoryDisturbType (should always be stolen :-( ). - case EVENT_DISTURBED_PRE_EVENT: - { - // This fires before the rest of the disturbed file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DISTURBED_PRE_EVENT); - } - break; - case EVENT_DISTURBED_EVENT: - { - // This fires after the rest of the disturbed file does - - } - break; - - // Event Rested - // Arguments: None - // Note: Not sure if this fires at the end of rest event, but the actual - // duration of the rest is 0, so you never "see" it. - case EVENT_RESTED_PRE_EVENT: - { - // This fires before the rest of the rested file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_RESTED_PRE_EVENT); - } - break; - case EVENT_RESTED_EVENT: - { - // This fires after the rest of the rested file does - - } - break; - - // Event Spell cast at - // Arguments: GetLastSpellCaster, GetLastSpellHarmful GetLastSpell() - case EVENT_SPELL_CAST_AT_PRE_EVENT: - { - // This fires before the rest of the Spell Cast At file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_SPELL_CAST_AT_PRE_EVENT); - } - break; - case EVENT_SPELL_CAST_AT_EVENT: - { - // This fires after the rest of the Spell Cast At End file does - - } - break; - - // Event Blocked - // Arguements: GetBlockingDoor, GetIsDoorActionPossible, GetLocked, - // GetLockKeyRequired, GetLockKeyTag, GetLockUnlockDC, GetPlotFlag. - case EVENT_ON_BLOCKED_PRE_EVENT: - { - // This fires before the rest of the on blocked file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ON_BLOCKED_PRE_EVENT); - } - break; - case EVENT_ON_BLOCKED_EVENT: - { - // This fires after the rest of the on blocked file does - - } - break; - - // Event Combat Action - // Arguments: GetAttackTarget(), and lots of others. - // Note: Fires when DetermineCombatRound runs to perform an action. - case EVENT_COMBAT_ACTION_PRE_EVENT: - { - // This fires before the rest of the Determine Combat Round call does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_COMBAT_ACTION_PRE_EVENT); - } - break; - case EVENT_COMBAT_ACTION_EVENT: - { - // This fires after the rest of the Determine Combat Round call does - // Calling ClearAllActions should stop any actions added in the call. - - } - break; - - // Event Damaged at 1 HP. - // Arguments: None really. - // Note: Fires OnDamaged, when we have exactly 1HP. Use for Immortal Creatures. - case EVENT_DAMAGED_AT_1_HP: - { - // This fires after the rest of the On Combat Round End file does - - } - break; - - // End all in-built events. Add more in here, if you wish. - } -} diff --git a/_module/nss/j_ai_setweapons.nss b/_module/nss/j_ai_setweapons.nss deleted file mode 100644 index b5dd79e7..00000000 --- a/_module/nss/j_ai_setweapons.nss +++ /dev/null @@ -1,31 +0,0 @@ -/*/////////////////////// [Set Weapons] //////////////////////////////////////// - Filename: J_AI_SetWeapons -///////////////////////// [Set Weapons] //////////////////////////////////////// - Executed to re-set any weapons, or set them at spawn, using ExecuteScript. - - It isn't included in the generic AI or onspawn to try and speed it up a little -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added to a new file, removed from spawn include. - 1.4 - Nothing changed here. Include file might have changed however. -///////////////////////// [Workings] /////////////////////////////////////////// - It can be easily re-added to the spawn include, however, the generic AI calls - it so little, that it may well be useful to keep a seperate file anyway. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: RESET_HEALING_KITS -///////////////////////// [Set Weapons] //////////////////////////////////////*/ - -#include "J_INC_SETWEAPONS" - -void main() -{ - if(GetAIInteger(RESET_HEALING_KITS)) - { - ResetHealingKits(OBJECT_SELF); - DeleteAIInteger(RESET_HEALING_KITS); - } - else - { - // Set weapons if not - SetWeapons(OBJECT_SELF); - } -} diff --git a/_module/nss/j_ai_walkwaypoin.nss b/_module/nss/j_ai_walkwaypoin.nss deleted file mode 100644 index 530dce28..00000000 --- a/_module/nss/j_ai_walkwaypoin.nss +++ /dev/null @@ -1,98 +0,0 @@ -/*/////////////////////// [Resume Waypoint Walking] //////////////////////////// - Filename: j_ai_walkwaypoin -///////////////////////// [Resume Waypoint Walking] //////////////////////////// - Executed On Spawn, and from the end of combat, to resume walking - - Notes: - Needed my own file as to execute and be sure it exsisted. This means - the Non-override version will not use 2 different waypoint files most of the - time. -///////////////////////// [History] //////////////////////////////////////////// - 1.0 - Added - 1.3 - Changed to SoU waypoints. fired from End of Spawn and heartbeat. - It also returns to start location if set. - 1.4 - -///////////////////////// [Workings] /////////////////////////////////////////// - Might change to SoU waypoints, this, at the moment, will just - walk normal waypoints. - - GEORG: - - Short rundown on WalkWaypoints - - You can create a set of waypoints with their tag constructed like this: - - WP_[TAG]_XX where [TAG] is the exact, case sensitive tag of the creature - you want to walk these waypoints and XX the number of the waypoint. - - Numbers must be ascending without a gap and must always contain 2 digits. - - If your creature's tag is MY_Monster, the tags would be - WP_MY_Monster_01, WP_MY_Monster_02, ... - - You can auto-create a first waypoint in the toolset by rightclicking on a - creature and selecting the "Create Waypoint" option. You can create - subsequent waypoints by rightclicking on the ground while the creature is - still selected and choosing "Create Waypoint". - - If you want to make your creature have a different patrol route at night, - you can create a different set of WayPoints prefixed with WN_ (i.e. - WN_MY_Monster_01, WN_MY_Monster_02, ...). - - You can also define so called POST waypoints for creatures that do not have - a route of waypoints but you want to return to their position after a combat - (i.e. Guards at a gate). This can be done by creating a single Waypoint with - the tag POST_[TAG] for day and NIGHT_[TAG] for night posts. Creatures will - automaticall switch between those posts when day changes to night and vice - versa. - - Waypoints can be between areas and creatures will move there, if you set a - global integer variable called X2_SWITCH_CROSSAREA_WALKWAYPOINTS on your - module to 1. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: WAYPOINT_RUN, WAYPOINT_PAUSE are set On Spawn to remember - the pause/run actions. -///////////////////////// [Resume Waypoint Walking] //////////////////////////*/ - -#include "NW_I0_GENERIC" -#include "J_INC_DEBUG" - -const string WAYPOINT_RUN = "WAYPOINT_RUN"; -const string WAYPOINT_PAUSE = "WAYPOINT_PAUSE"; -const int AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION = 0x00020000; -const string AI_OTHER_MASTER = "AI_OTHER_MASTER"; -const string AI_LOCATION = "AI_LOCATION"; -const string AI_RETURN_TO_POINT = "AI_RETURN_TO_POINT"; - - -// For return to. -int AI_GetSpawnInCondition(int nCondition, string sName, object oTarget = OBJECT_SELF); - -void main() -{ - // FIRST, if we are meant to move back to the start location, do it. - if(AI_GetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER)) - { - location lReturnPoint = GetLocalLocation(OBJECT_SELF, AI_LOCATION + AI_RETURN_TO_POINT); - object oReturnArea = GetAreaFromLocation(lReturnPoint); - if(GetIsObjectValid(oReturnArea)) - { - if((GetArea(OBJECT_SELF) == oReturnArea && - GetDistanceBetweenLocations(GetLocation(OBJECT_SELF), lReturnPoint) > 3.0) || - GetArea(OBJECT_SELF) != oReturnArea) - { - // 77: "[Waypoints] Returning to spawn location. [Area] " + GetName(oInput) - DebugActionSpeakByInt(77, GetAreaFromLocation(lReturnPoint)); - ActionForceMoveToLocation(lReturnPoint); - return; - } - } - } - // Use on-spawn run/pauses. - WalkWayPoints(GetLocalInt(OBJECT_SELF, WAYPOINT_RUN), GetLocalFloat(OBJECT_SELF, WAYPOINT_PAUSE)); -} - -int AI_GetSpawnInCondition(int nCondition, string sName, object oTarget) -{ - return (GetLocalInt(oTarget, sName) & nCondition); -} diff --git a/_module/nss/j_ai_wingbuffet.nss b/_module/nss/j_ai_wingbuffet.nss deleted file mode 100644 index c919d160..00000000 --- a/_module/nss/j_ai_wingbuffet.nss +++ /dev/null @@ -1,109 +0,0 @@ -/*/////////////////////// [Ability - Dragon Wing Buffet] /////////////////////// - Filename: J_AI_WingBuffet -///////////////////////// [Ability - Dragon Wing Buffet] /////////////////////// - "The dragon will launch into the air, knockdown - all opponents who fail a Reflex Save and then - land on one of those opponents doing damage - up to a maximum of the Dragons HD + 10." - - This is modified by Jasperre for use by Dragons in the AI. Instead of - crashing, using effect appear, disspear, it just uses effect appear. - -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Made the "action attack" work better, getting the nearest - seen and heard instead of the nearest (which may not be seen or heard). - - Added in random damage for each target! - - Faction Equal as well as GetIsFriend check. - 1.4 - Cleaned it up a bit, to be more readable. -///////////////////////// [Workings] /////////////////////////////////////////// - Executed via. ExecuteScript from the AI file, it is seperate because it is - almost a new AI ability. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Ability - Dragon Wing Buffet] /////////////////////*/ - -void main() -{ - // Stop the creature's actions. - ClearAllActions();// To rid errors. - - // Declare major variables - int nDamage; - int nDC = GetHitDice(OBJECT_SELF); - location lSelf = GetLocation(OBJECT_SELF); - string sMessage = GetName(OBJECT_SELF) + " is using its wing buffet against you!"; - location lTarget; - float fRandomKnockdown; - // Use a delay based on range, - float fDelay; - - // Declare effects - effect eDam; - effect eKnockDown = EffectKnockdown(); - effect eVis = EffectVisualEffect(VFX_IMP_PULSE_WIND); - - // Pulse of wind applied... - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lSelf); - - // Get first target in spell area - object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lSelf); - while(GetIsObjectValid(oTarget)) - { - // Get thier location (for visual) and the delay. - lTarget = GetLocation(oTarget); - fDelay = GetDistanceToObject(oTarget)/20.0; - - // Wind pulse to all - DelayCommand(fDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget)); - - // Do not effect allies. - if(!GetIsFriend(oTarget) && !GetFactionEqual(oTarget)) - { - // Send a message about the wing buffet (allies do not see this) - SendMessageToPC(oTarget, sMessage); - - // Huge creatures (IE: Dragon size) are not affected. - if(GetCreatureSize(oTarget) != CREATURE_SIZE_HUGE) - { - // A standard (not spell) reflex save negates the damage and knockdown - if(!ReflexSave(oTarget, nDC)) - { - // Randomise damage. (nDC = Hit dice) - nDamage = Random(nDC) + 11; - - // Define the damage - eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING); - - // Randomise knockdown duration, to minimum of 6.0 (1.0/2 = 0.5. + 5.5 = 6.0) - fRandomKnockdown = 5.5 + ((IntToFloat(Random(30)) + 1.0)/10.0); - - // We'll have a windy effect..depending on range - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, fRandomKnockdown)); - } - } - } - // Get next target in spell area - oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lSelf); - } - - // Do a great flapping wings on land effect. - effect eAppear = EffectAppear(); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eAppear, OBJECT_SELF); - - // Attack the nearest seen (so not to stand there for 6 seconds, but get - // back in the action!). - object oNearest = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(GetIsObjectValid(oNearest)) - { - DelayCommand(1.0, ActionAttack(oNearest)); - } - else - { - oNearest = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(GetIsObjectValid(oNearest)) - { - DelayCommand(1.0, ActionAttack(oNearest)); - } - } -} diff --git a/_module/nss/j_ai_wingflying.nss b/_module/nss/j_ai_wingflying.nss deleted file mode 100644 index 3f8f8b31..00000000 --- a/_module/nss/j_ai_wingflying.nss +++ /dev/null @@ -1,133 +0,0 @@ -/*/////////////////////// [Ability - Dragon Flying] //////////////////////////// - Filename: J_AI_WingFlying -///////////////////////// [Ability - Dragon Flying] //////////////////////////// - Hey, a dragon can fly (if we are set to, mind you!) this is executed from - the default AI, using local objects to "fly" to, a duration based on the - distance between the 2 places. - - When we fly down, we apply knockdown to the targets in the area's affected - if not huge size, like wing buffet. - - NOTE: - - - Can be used with NPC's who are not dragons, but if they are not huge, - the damage is not done (only the pulses at thier location and the target - location) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - 1.4 - Added an actual spell event fire for the damage. It might not have - registered with some hostile monsters otherwise! (EG: DR) -///////////////////////// [Workings] /////////////////////////////////////////// - Executed via. ExecuteScript from the AI file, it is seperate because it is - almost a new AI ability. - - It is a 6 second or more fly - note it adds 1/10 second more for each - 1M between targets. Not too much, but enough. - - Does damage to landing and taking off sites too :-) -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Ability - Dragon Flying] //////////////////////////*/ - -#include "J_INC_CONSTANTS" - -// Damages area with blast of flying -void DoDamageToArea(location lLocation); - -void main() -{ - // Get the target location - object oJumpTo = GetAIObject(AI_FLYING_TARGET); - location lJumpTo = GetLocation(oJumpTo); - - DeleteAIObject(AI_FLYING_TARGET); - - // Errors - if(!GetIsObjectValid(oJumpTo)) return; - - ClearAllActions();// To rid errors. - SetFacingPoint(GetPosition(oJumpTo)); - - // Get location of ourselves, to damage those as we fly away. - location lSelf = GetLocation(OBJECT_SELF); - // Jump to the next location, using a delay of 3.0 seconds + Distance/10 - float fDuration = 3.0 + (GetDistanceBetweenLocations(lSelf, lJumpTo)/10.0); - - if(GetCreatureSize(OBJECT_SELF) == CREATURE_SIZE_HUGE) - { - // Damage instantly - DelayCommand(1.0, DoDamageToArea(lSelf)); - // Delay the jump down damage - a little extra delay mind you. - DelayCommand(fDuration + 1.2, DoDamageToArea(lJumpTo)); - } - else - { - // Visual effects only - effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_WIND); - // Pulse of wind applied... - DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lSelf)); - // Delay the new wind - DelayCommand(fDuration + 1.2, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lJumpTo)); - } - // New determine combat round - via. Action attacking. - DelayCommand(fDuration + 1.5, ActionAttack(oJumpTo)); - - effect eFly = EffectDisappearAppear(lJumpTo); - DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, OBJECT_SELF, fDuration - 1.0)); -} - -// Damages area with blast of flying -void DoDamageToArea(location lLocation) -{ - // Declare effects - effect eKnockDown = EffectKnockdown(); - int nDamage; - int nDC = GetHitDice(OBJECT_SELF); - effect eDam; - effect eVis = EffectVisualEffect(VFX_IMP_PULSE_WIND); - // Use a delay based on range, - float fDelay; - - string sMessage = GetName(OBJECT_SELF) + " is flying!"; - location lTarget; - float fRandomKnockdown; - // Pulse of wind applied... - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lLocation); - //Apply the VFX impact and effects - //Get first target in spell area - object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lLocation); - while(GetIsObjectValid(oTarget)) - { - lTarget = GetLocation(oTarget); - fDelay = GetDistanceBetweenLocations(lTarget, lLocation)/20.0; - // Visual wind pulse - DelayCommand(fDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget)); - //Get next target in spell area - // Do not effect allies. - if(!GetIsFriend(oTarget) && !GetFactionEqual(oTarget)) - { - SendMessageToPC(oTarget, sMessage); - // Can't knock over huge things! - if(GetCreatureSize(oTarget) != CREATURE_SIZE_HUGE) - { - // Signal spell cast at event - // * Using: SPELLABILITY_DRAGON_WING_BUFFET - just so something is used - SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_WING_BUFFET)); - - // Reflex save for damage - if(!ReflexSave(oTarget, nDC)) - { - // Randomise damage. (nDC = Hit dice) - nDamage = Random(nDC) + 11; - eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING); - // Randomise knockdown, to minimum of 6.0 (1.0/2 = 0.5. + 5.5 = 6.0) - fRandomKnockdown = 5.5 + ((IntToFloat(Random(30)) + 1.0)/10.0); - // We'll have a windy effect..depending on range - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, fRandomKnockdown)); - } - } - } - oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lLocation); - } -} diff --git a/_module/nss/j_inc_constants.nss b/_module/nss/j_inc_constants.nss deleted file mode 100644 index 2fe4fd58..00000000 --- a/_module/nss/j_inc_constants.nss +++ /dev/null @@ -1,2244 +0,0 @@ -/*/////////////////////// [Include - Constants] //////////////////////////////// - Filename: J_INC_Constants -///////////////////////// [Include - Constants] //////////////////////////////// - This file just holds many constants, and many common functions (EG: Set - and Get spawn in conditions) to stop repeating code. - - See workings for more information. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added to make sure things are not repeated + constants in one place - 1.4 - Removed the silly (well, now I think it is silly) definitions of - i1, i2 etc. It looks annoying anyway. Won't save much code (or any) - as the constants mearly put the 1 to where i1 is in the code anyway. - - TO DO: - - Sort out constants. Add new ones for sea hag, and other new abilities. - - - Fixed a few minor errors. - - Formatted correctly now - - Removed all i0, i1 etc. And make sure the AI has all of them removed. -///////////////////////// [Workings] /////////////////////////////////////////// - By using the SoU implimented way of defining static variables, "const" means - I can have a whole include which will include all used variables - this - keeps it all uniformed, and compiles better - as in all variable names - will be valid. - - It may also help speed, as variables which are repeated, are going to be - there to pick up from memory. - - If it does cause a lot of lag, more updates should clean this up. - - - To Do - Impliment better Debug system (see j_inc_debug) which you can - uncomment them long debug strings so that they don't get added to compiled - scripts if not used. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Constants] //////////////////////////////*/ - -// This makes most scripts have debug anyway, and so its there :-). -// Multiple includes are ignored anyway :-D -#include "J_INC_DEBUG" - -// This is a seperate script from all others. It is executed if a creature wants -// to DetermineCombatRound. It must be seperate to have override and non-override -// versions working together. -const string COMBAT_FILE = "j_ai_detercombat"; // FILENAME - -// Byond that, do NOT change the rest of these constants, unless you know -// what you are doing! -// I recommend not adding to this file either. Making your own constants -// file will make it full-proof. -//nw_walk_wp -// - FILE_ -const string FILE_WALK_WAYPOINTS = "j_ai_walkwaypoin"; // FILENAME -const string FILE_RE_SET_WEAPONS = "j_ai_setweapons"; // FILENAME -// If we are dead when this fires, it destroys us -const string FILE_DEATH_CLEANUP = "j_ai_destroyself"; // FILENAME - -// Heartbeat files. Speeds up (hopefully!) heartbeat calls and cirtainly heartbeat file size. -const string FILE_HEARTBEAT_TALENT_BUFF = "j_ai_heart_buff"; -const string FILE_HEARTBEAT_LOOT = "j_ai_heart_loot"; -const string FILE_HEARTBEAT_ANIMATIONS = "j_ai_heart_aimate"; -const string FILE_HEARTBEAT_WALK_TO_PC = "j_ai_heart_serch"; - -const string FILE_DRAGON_WING_BUFFET = "j_ai_wingbuffet"; -const string FILE_FLY_ATTACK = "j_ai_wingflying"; - -// Special for "I_WAS_OPENED" shout. -const string FILE_SET_OPENER = "j_ai_setopener"; - -// Spell trigger creation file -const string FILE_SPELLTRIGGER_START = "j_ai_spelltrig1"; - -// Default User Defined Event file name - for the default AI file -const string FILE_DEFAULT_UDE = "nw_c2_defaultd"; - -// Special: custom AI script set to a standard local string to this: -const string AI_CUSTOM_AI_SCRIPT = "AI_CUSTOM_AI_SCRIPT"; - -/******************************************************************************/ -// Special constants -/******************************************************************************/ - -// Ranges for spells - from Ranges.2da -const float fTouchRange = 2.25; -const float fShortRange = 8.0; -const float fMediumRange = 20.0; -const float fLongRange = 40.0; - -// Types: -// S. = Stored -// FILENAME - -// S.CONSTANT -// S.INTEGER -// S.OBJECT -// S.FLOAT - -/******************************************************************************/ -// Global overriding actions -/******************************************************************************/ -// Leader thing -const int AI_SPECIAL_ACTIONS_ME_RUNNER = 1; -// Fleeing -const int AI_SPECIAL_ACTIONS_FLEE = 2; -// Moving out of a pre-set AOE. -const int AI_SPECIAL_ACTIONS_MOVE_OUT_OF_AOE = 3; -// Searching around after combat. -const int AI_SPECIAL_ACTIONS_SEARCH_AROUND = 4; -// Move to combat - we buff (and only buff again after 1 minute of running) -// and either follow the person who wants us to help them, or we will run to the -// location set. -// * Can be set via. most shouts. -const int AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT = 5; - -// Special for "move to combat". If there was something who called to us, we will -// follow them - or at least move to them - if there is no location to move to. -const string AI_MOVE_TO_COMBAT_OBJECT = "AI_MOVE_TO_COMBAT_OBJECT"; -// Another special. This will be set to the location that can be used for -// the "special actions move to combat" action. -const string AI_MOVE_TO_COMBAT_LOCATION = "AI_MOVE_TO_COMBAT_LOCATION"; -// Timer constant - set for 60 seconds to stop lots of spells being cast before -// we move, but we do cast 1. -const string AI_TIMER_MOVE_TO_COMBAT_BUFF = "AI_TIMER_MOVE_TO_COMBAT_BUFF"; - -// Needed for overriding search action: -// * Amount of rounds left to search using special action on heartbeat -const string AI_SEARCH_ROUNDS_REMAINING = "AI_SEARCH_ROUNDS_REMAINING"; -// * Target (dead body?) to move near to search around -const string AI_SEARCH_TARGET = "AI_SEARCH_TARGET"; - -// This is trap thing. If we (on heartbeat) start disarming a trap, can we -// ignore it in combat? -const string TRAP_CAN_IGNORE_IN_COMBAT = "TRAP_CAN_IGNORE_IN_COMBAT";// S.INTEGER - -// Override for all AI scripts -const string AI_TOGGLE = "AI_TOGGLE"; // INTEGER - -// Set to a local int...special AI executed like Bioware's -const string AI_SPECIAL_AI = "AI_SPECIAL_AI"; -// 1 = Beholder AI -const int AI_SPECIAL_AI_BEHOLDER = 1; -// 2 = Mindflayer AI -const int AI_SPECIAL_AI_MINDFLAYER = 2; - -// Set to the last AI spell category cast. -const string ITEM_TALENT_VALUE = "ITEM_TALENT_VALUE"; // S.CONSTANT - - /*************************** Constant set-up ******************************* - We set up all global Spawn In Constants - hex numbers, used to check - one integer stored OnSpawn for settings the AI should use. - - Also constants for strings, and local variables. - **************************** Constant set-up ******************************/ - -/******************************************************************************/ -// String constants not associated with On Spawn options. Usually values. -/******************************************************************************/ -const string AI_INTELLIGENCE = "AI_INTELLIGENCE"; // S.INTEGER -const string AI_MORALE = "AI_MORALE"; // S.INTEGER -// Used for spontaeous spells, in the combat AI include and spell files. -const string AI_SPONTAEUOUSLY_CAST_HEALING = "AI_SPONTAEUOUSLY_CAST_HEALING";// S.INTEGER -// The last level of what summoned animal we cast. -const string AI_LAST_SUMMONED_LEVEL = "AI_LAST_SUMMONED_LEVEL"; // S.INTEGER -// Stores (if got FEAT_TURN_UNDEAD) the max level of undead we can turn. -const string AI_TURNING_LEVEL = "AI_TURNING_LEVEL"; // S.INTEGER -// Stores the amount of spell levels we are totally immune to -// - Set to a local int. -const string AI_SPELL_IMMUNE_LEVEL = "AI_SPELL_IMMUNE_LEVEL"; // S.INTEGER - -// Effects constants, actually set on the PC's too for performance :-) -const string AI_EFFECT_HEX = "AI_EFFECT_HEX"; -const string AI_SPELL_HEX = "AI_SPELL_HEX"; -const string AI_ABILITY_DECREASE = "AI_ABILITY_DECREASE"; -// This is a timer for checking allies for spell effects, for buffing. -// - If TRUE, it won't loop around until it finds one to cast at. -// AI_TIMER_BUFF_ALLY_SPELL + IntToString(iSpell); -const string AI_TIMER_BUFF_ALLY_SPELL = "AI_TIMER_BUFF_ALLY_SPELL"; - -// When set to TRUE, it will stop heartbeat flee casting spells -// Deleted when we reach our flee target. -const string AI_HEARTBEAT_FLEE_SPELLS = "AI_HEARTBEAT_FLEE_SPELLS";// S.INTEGER - -// Timer for blocking creatures, and allies re-initiating combat -const string AI_TIMER_BLOCKED = "AI_TIMER_BLOCKED"; - -// this is set for 0.1 second to stop multiple DetermineCombatRound scripts being called -// in a short space of time. -const string AI_DEFAULT_AI_COOLDOWN = "AI_DEFAULT_AI_COOLDOWN"; - -// If this timer is set On Death, it means we do NOT apply EffectDeath to self. -const string AI_TIMER_DEATH_EFFECT_DEATH = "AI_TIMER_DEATH_EFFECT_DEATH"; - -/******************************************************************************/ -// Spell Trigger numbers/constants/settings -/******************************************************************************/ - -// Sets to a cirtain condition -const string SPELLTRIGGER_NOT_GOT_FIRST_SPELL = "AIST_FRST";// - When we !GetHasSpellEffect(iFirstSpell); -const string SPELLTRIGGER_DAMAGED_AT_PERCENT = "AIST_DAMA";// - When we are below X percent of HP, it fires -const string SPELLTRIGGER_IMMOBILE = "AIST_IMMB";// - When we are uncommandable/paralyzed/sleeping, etc. -const string SPELLTRIGGER_START_OF_COMBAT = "AIST_STCM";// - Fired first, whatever condition - -// Set up as: -// ASST_FRSTXY -// X - Spell trigger number (1-9) -// Y - Spell trigger spell stored (1-9) -// Local integer -// MAXINT_ASST_FRST1 -// Max number of spells in this trigger -// ASS_FRSTUSED -// This is set to TRUE if used up this round. -const string USED = "USED"; -// This is used for damage %, and is 1-100 for damage at % triggers. -const string VALUE = "VALUE"; -// Our spell trigger creature object -const string AI_SPELL_TRIGGER_CREATURE = "AI_SPELL_TRIGGER_CREATURE"; - -// When max is set to -1, we actually reset this on rest event. - -// Local on casters -// - Max no. of spells -const string AI_SPELLTRIG_MAXSPELLS = "AI_SPELLTRIG_MAXSPELLS"; -// - Constant for prefix - EG: AIST_IMMB3 for the third Immobile spell trig. -const string AI_SPELLTRIG_PREFIX = "AI_SPELLTRIG_PREFIX"; - -/******************************************************************************/ -// These are the "forgotten" constants, for spells/feats in SoU. -/******************************************************************************/ -// FEATS -// THese are the forgotten ones. Others are remembered. -// I have left OUT the ones which we cannot "use" -// 1.4: Removed ones now added in 1.64. Added some needed for AI_ActionUseSpellLikeFeat(). - -// These are blackguard. Note that they are under spell abilities, but I'd rather -// use them as ActionUseFeat. -// 1.64: BG_CREATE_UNDEAD still under constant FEAT_INFLICT_LIGHT_WOUNDS -const int AI_FEAT_BG_CREATE_UNDEAD = 474; -// 1.64: Still under FEAT_INFLICT_MODERATE_WOUNDS. -const int AI_FEAT_BG_FIENDISH_SERVANT = 475; - -// Used in tunr undead checking. Faster then looping effects - GetHasSpellEffect(AI_SPELL_FEAT_TURN_UNDEAD); -const int AI_SPELL_FEAT_TURN_UNDEAD = 308; -const int AI_SPELL_FEAT_PLANAR_TURNING = 643; -// We are missing the feat for planar turning *still* in 1.64 -const int AI_FEAT_EPIC_PLANAR_TURNING = 854; - -// Missing *actual* spell constant, still missing in 1.64. -const int AI_SPELL_EVIL_BLIGHT = 566; - -// Epic constants. 1.64: Only the spell for Epic Warding is missing. -const int AI_SPELL_EPIC_WARDING = 695; - -// healing ones missed -// Harm self - undead heal! -const int AI_SPELLABILITY_UNDEAD_HARM_SELF = 759; -// Cure Others Critical Wounds -const int AI_SPELLABILITY_CURE_CRITICAL_WOUNDS_OTHER= 567; -// Restoration others -const int AI_SPELLABILITY_RESTORATION_OTHERS = 568; - - -// 1.4: WHAT IS THIS?!??!? -// Subspell set to this: -const string AI_SPELL_SUB_SPELL_CAST = "AI_SPELL_SUB_SPELL_CAST"; - -// All invalid spell instances are -1. -const int AI_SPELL_INVALID = -1; - -// For checking if they have this spell's effects. Most are feats, if not all. -const int AI_SPELLABILITY_BARD_SONG = 411; -// * 1.4: Curse song is now under SPELLABILITY_EPIC_CURSE_SONG. -// - hordes - still not in! -const int AI_SPELL_OWLS_INSIGHT = 438; - -// These are not anywhere, even though blackguard and AA ones are -const int AI_SPELLABILITY_HARPER_SLEEP = 480; -const int AI_SPELLABILITY_HARPER_CATS_GRACE = 481; -const int AI_SPELLABILITY_HARPER_EAGLE_SPLEDOR = 482; -const int AI_SPELLABILITY_HARPER_INVISIBILITY = 483; - -// Shifter only spells (monster abilities) that are limited -const int AI_SPELLABILITY_BLINDING_SPEED = 647; -const int AI_SPELLABILITY_GWILDSHAPE_STONEGAZE = 687; -const int AI_SPELLABILITY_GWILDSHAPE_DRIDER_DARKNESS= 688; -const int AI_SPELLABILITY_DIS_BREATH = 690;// Dragon Disciple breath. -const int AI_SPELLABILITY_GWILDSHAPE_SPIKES = 692;// Manticore Spikes - no limit -const int AI_SPELLABILITY_GWILDSHAPE_MINDBLAST = 693;// GWildShape_Mindblast -const int AI_SPELLABILITY_VAMPIRE_DOMINATION_GAZE = 800;// Dom gaze. - -// Special monster abilities/other hordes spells -// - Some are shifter. Marked by SHIFT at end -const int AI_SPELLABILITY_HARPYSONG = 686;// SHIFT - Harpysong -const int AI_SPELLABILITY_SUMMON_BAATEZU = 701; -const int AI_SPELLABILITY_EYEBALL_RAY_0 = 710;// EyeballRay0 -const int AI_SPELLABILITY_EYEBALL_RAY_1 = 711;// EyeballRay1 -const int AI_SPELLABILITY_EYEBALL_RAY_2 = 712;// EyeballRay2 -const int AI_SPELLABILITY_MINDFLAYER_MINDBLAST_10 = 713;// Mindflayer Mindblast 10 -const int AI_SPELLABILITY_MINDFLAYER_PARAGON_MINDBLAST = 714;// Mindflayer Paragon Mindblast -const int AI_SPELLABILITY_GOLEM_RANGED_SLAM = 715;// Ranged slam, pretty neat. -const int AI_SPELLABILITY_SUCKBRAIN = 716;// SuckBrain -const int AI_SPELLABILITY_ETHEREALNESS = 724;// Missing constant - and a monster ability only! -const int AI_SPELLABILITY_BEHOLDER_MAGIC_CONE = 727;// Beholder_Anti_Magic_Cone -const int AI_SPELLABILITY_BEBELITH_WEB = 731;// Bebelith Web -const int AI_SPELLABILITY_BEHOLDER_ALLRAYS = 736;// Beholder_Special_Spell_AI -const int AI_SPELLABILITY_PSIONIC_INERTIAL_BARRIER = 741;// Psionic Inertial Barrier -const int AI_SPELLABILITY_SHADOWBLEND = 757;// ShadowBlend - Shadow dragon. -const int AI_SPELLABILITY_AURA_OF_HELLFIRE = 761;// Aura -const int AI_SPELLABILITY_HELL_INFERNO = 762;// Hell Inferno - worse then SPELL_INFERNO -const int AI_SPELLABILITY_PSIONIC_MASS_CONCUSSION = 763;// Damage to AOE - psiconic mass concussion -const int AI_SPELLABILITY_SHADOW_ATTACK = 769;// SHIFTER Shadow Attack - also shifter -const int AI_SPELLABILITY_SLAAD_CHAOS_SPITTLE = 770;// SHIFTER Slaad Chaos Spittle - also shifter -const int AI_SPELLABILITY_BATTLE_BOULDER_TOSS = 773;// Battle - hordes only, but added as it is an actual thing -const int AI_SPELLABILITY_PRISMATIC_DEFLECTING_FORCE= 774;// Deflecting_Force -const int AI_SPELLABILITY_GIANT_HURL_ROCK = 775;// Cool - Giant hurls a large rock -const int AI_SPELLABILITY_ILLITHID_MINDBLAST = 789;// Ilithid mindblast. -const int AI_SPELLABILITY_VAMPIRE_INVISIBILITY = 799;// SHIFTER Vampire Invis. -const int AI_SPELLABILITY_AZER_FIRE_BLAST = 801;// SHIFTER Fire Blast. -const int AI_SPELLABILITY_SHIFTER_SPECTRE_ATTACK = 802;// SHIFTER Spectire Attack. - -// Constants for AOE's -const string AI_AOE_PER_STORM = "AOE_PER_STORM"; -const string AI_AOE_PER_CREEPING_DOOM = "AOE_PER_CREEPING_DOOM"; -const string AI_AOE_PER_FOGSTINK = "AOE_PER_FOGSTINK"; -const string AI_AOE_PER_GREASE = "AOE_PER_GREASE"; -const string AI_AOE_PER_WALLFIRE = "AOE_PER_WALLFIRE"; -const string AI_AOE_PER_WALLBLADE = "AOE_PER_WALLBLADE"; -const string AI_AOE_PER_FOGACID = "VFX_PER_FOGACID"; -const string AI_AOE_PER_FOGFIRE = "VFX_PER_FOGFIRE"; -const string AI_AOE_PER_FOGKILL = "AOE_PER_FOGKILL"; -const string AI_AOE_PER_FOGMIND = "VFX_PER_FOGMIND"; -const string AI_AOE_PER_ENTANGLE = "VFX_PER_ENTANGLE"; -const string AI_AOE_PER_EVARDS_BLACK_TENTACLES = "VFX_PER_EVARDS_BLACK_TENTACLES"; -const string AI_AOE_PER_FOGBEWILDERMENT = "VFX_PER_FOGBEWILDERMENT"; -const string AI_AOE_PER_STONEHOLD = "VFX_PER_STONEHOLD"; -const string AI_AOE_PER_WEB = "VFX_PER_WEB"; - -// When we ActionAttack -const int AI_NORMAL_MELEE_ATTACK = 1000; -const int AI_NORMAL_RANGED_ATTACK = 1500; -const int AI_PARRY_ATTACK = 2000; - -/******************************************************************************/ -// The ignore string. If a creature has this set to anything but 0, then the AI ignores them. -/******************************************************************************/ -const string AI_IGNORE_TOGGLE = "AI_IGNORE_TOGGLE"; // S.INTEGER - -/******************************************************************************/ -// String constants not associated with Different Workings during play. -/******************************************************************************/ - -// In Other AI, this is set on high damage -const string AI_MORALE_PENALTY = "AI_MORALE_PENALTY"; // S.INTEGER -// Set via. SetCurrentAction -const string AI_CURRENT_ACTION = "AI_CURRENT_ACTION"; // S.INTEGER -// This is set to TRUE once we have died once. -const string WE_HAVE_DIED_ONCE = "WE_HAVE_DIED_ONCE"; // S.INTEGER -// Amount of deaths. -const string AMOUNT_OF_DEATHS = "AMOUNT_OF_DEATHS"; // S.INTEGER -// Turns off death script firing at all - used for Bioware lootable stuff. -const string I_AM_TOTALLY_DEAD = "I_AM_TOTALLY_DEAD"; // S.INTEGER - -const string MAX_ELEMENTAL_DAMAGE = "MAX_ELEMENTAL_DAMAGE"; // S.INTEGER -const string LAST_ELEMENTAL_DAMAGE = "LAST_ELEMENTAL_DAMAGE"; // S.INTEGER -// For this, it sets AI_HIGHEST_DAMAGER to the damager. -const string AI_HIGHEST_DAMAGE_AMOUNT = "AI_HIGHEST_DAMAGE_AMOUNT";// S.INTEGER -// This needs the damager to be the stored "AI_STORED_LAST_ATTACKER" -const string AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT = "AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT";// S.INTEGER -// Healing kits -const string AI_VALID_HEALING_KIT_OBJECT = "AI_VALID_HEALING_KIT_OBJECT";// S.INTEGER -const string AI_VALID_HEALING_KITS = "AI_VALID_HEALING_KITS"; // S.INTEGER -// Set to TRUE before re-setting things, it ignores weapons, only does healing kits. -const string RESET_HEALING_KITS = "RESET_HEALING_KITS"; // S.INTEGER - -// The amounts set to these are waypoint things -const string WAYPOINT_RUN = "WAYPOINT_RUN"; -const string WAYPOINT_PAUSE = "WAYPOINT_PAUSE"; - -/******************************************************************************/ -// Shout strings. -/******************************************************************************/ -// 0 - Anything said -const int AI_SHOUT_ANYTHING_SAID_CONSTANT = 0; -// 1 - I was attacked. :-P -const int AI_SHOUT_I_WAS_ATTACKED_CONSTANT = 1; -const string AI_SHOUT_I_WAS_ATTACKED = "I_WAS_ATTACKED"; -// 2 is blocked NWN thingy -const int AI_SHOUT_BLOCKER_CONSTANT = 2; -// 3 - Call to arms - Determines combat round -const int AI_SHOUT_CALL_TO_ARMS_CONSTANT = 3; -const string AI_SHOUT_CALL_TO_ARMS = "CALL_TO_ARMS"; -// 4 - Runner shout (shouts on heartbeat if running) -const int AI_SHOUT_HELP_MY_FRIEND_CONSTANT = 4; -const string AI_SHOUT_HELP_MY_FRIEND = "HELP_MY_FRIEND"; -// 5 - Leader flee now. Does what it says on the tin. -const int AI_SHOUT_LEADER_FLEE_NOW_CONSTANT = 5; -const string AI_SHOUT_LEADER_FLEE_NOW = "LEADER_FLEE_NOW"; -// 6 - Attack target X (specific target) -const int AI_SHOUT_LEADER_ATTACK_TARGET_CONSTANT = 6; -const string AI_SHOUT_LEADER_ATTACK_TARGET = "LEADER_ATTACK_TARGET"; -// 7 - I was killed - May flee if lots die! -const int AI_SHOUT_I_WAS_KILLED_CONSTANT = 7; -const string AI_SHOUT_I_WAS_KILLED = "I_WAS_KILLED"; -// 8 - 1.3 - PLaceables/doors which shout this get responded to! -const int AI_SHOUT_I_WAS_OPENED_CONSTANT = 8; -const string AI_SHOUT_I_WAS_OPENED = "I_WAS_OPENED"; - -// Extra - runner location variable (local location) -const string AI_HELP_MY_FRIEND_LOCATION = "AI_HELP_MY_FRIEND_LOCATION";// LOCATION -// Set on a placeable, by the placeable - thier last opener. -const string AI_PLACEABLE_LAST_OPENED_BY = "AI_PLACEABLE_LAST_OPENED_BY";// Object - -/******************************************************************************/ -// All timers (the end bits. Not the prefixes.) -/******************************************************************************/ -const string AI_TIMER_TURN_OFF_HIDE = "AI_TURN_OFF_HIDE"; // S.INTEGER -const string AI_TIMER_JUST_CAST_INVISIBILITY = "AI_TIMER_JUST_CAST_INVISIBILITY";//S.INTEGER -const string AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID = "AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID";// S.INTEGER -// Heartbeat "move to PC" searching -const string AI_TIMER_SEARCHING = "AI_TIMER_SEARCHING"; // S.INTEGER -const string AI_TIMER_STILL_PICKING_UP_ITEMS = "AI_TIMER_STILL_PICKING_UP_ITEMS";// S.INTEGER -const string AI_TIMER_AIMATIONS_PAUSE = "AI_TIMER_AIMATIONS_PAUSE"; // S.INTEGER -const string AI_TIMER_ATTACKED_IN_HTH = "AI_TIMER_ATTACKED_IN_HTH"; // S.INTEGER -const string AI_TIMER_TAUNT = "AI_TIMER_TAUNT"; // S.INTEGER -const string AI_TIMER_EMPATHY = "AI_TIMER_EMPATHY"; // S.INTEGER -// Special: Adds AOE spell which caused the event. -const string AI_TIMER_AOE_SPELL_EVENT = "AI_TIMER_AOE_SPELL_EVENT"; -const string AI_TIMER_FLEE = "AI_TIMER_FLEE"; -const string AI_TIMER_LEADER_SENT_RUNNER = "AI_TIMER_LEADER_SENT_RUNNER"; - -// On phisical attacked - if knockdown adn they can hit us (and not doofing the AI) -// then we use healing sooner as, basically, we may be knockdowned too much! -const string AI_TIMER_KNOCKDOWN = "AI_TIMER_KNOCKDOWN_TIMER"; - - -// Timer to stop cure condition in AI firing. -const string AI_TIMER_CURE_CONDITION = "AI_TIMER_CURE_CONDITION"; - -/******************************************************************************/ -// All speak talk arrays -/******************************************************************************/ -const string AI_TALK_ON_PERCIEVE_ENEMY = "AI_TALK_ON_PERCIEVE_ENEMY";// S.STRING -const string AI_TALK_ON_CONVERSATION = "AI_TALK_ON_CONVERSATION"; // S.STRING -const string AI_TALK_ON_PHISICALLY_ATTACKED = "AI_TALK_ON_PHISICALLY_ATTACKED";// S.STRING -const string AI_TALK_ON_DAMAGED = "AI_TALK_ON_DAMAGED"; // S.STRING -const string AI_TALK_ON_DEATH = "AI_TALK_ON_DEATH"; // S.STRING -const string AI_TALK_ON_HOSTILE_SPELL_CAST_AT = "AI_TALK_ON_HOSTILE_SPELL_CAST_AT";// S.STRING -const string AI_TALK_ON_MORALE_BREAK = "AI_TALK_ON_MORALE_BREAK";// S.STRING -const string AI_TALK_ON_COMBAT_ROUND = "AI_TALK_ON_COMBAT_ROUND";// S.STRING -const string AI_TALK_WE_PASS_POTION = "AI_TALK_WE_PASS_POTION"; -const string AI_TALK_WE_GOT_POTION = "AI_TALK_WE_GOT_POTION"; -const string AI_TALK_ON_CANNOT_RUN = "AI_TALK_ON_CANNOT_RUN"; -const string AI_TALK_ON_STUPID_RUN = "AI_TALK_ON_STUPID_RUN"; -const string AI_TALK_ON_COMBAT_ROUND_EQUAL = "AI_TALK_ON_COMBAT_ROUND_EQUAL"; -const string AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US = "AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US"; -const string AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM = "AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM"; -const string AI_TALK_ON_TAUNT = "AI_TALK_ON_TAUNT"; - -const string AI_TALK_ON_LEADER_SEND_RUNNER = "AI_TALK_ON_LEADER_SEND_RUNNER"; -const string AI_TALK_ON_LEADER_ATTACK_TARGET = "AI_TALK_ON_LEADER_ATTACK_TARGET"; -const string AI_TALK_ON_LEADER_BOSS_SHOUT = "AI_TALK_ON_LEADER_BOSS_SHOUT"; -// Constant for the Size of the a string array - the prefix. -const string ARRAY_SIZE = "ARRAY_SIZE_"; // S.STRING -const string ARRAY_PERCENT = "ARRAY_PER_"; // S.STRING - -// Time stop stored array. -const string TIME_STOP_LAST_ = "TIME_STOP_LAST_"; -const string TIME_STOP_LAST_ARRAY_SIZE = "TIME_STOP_LAST_ARRAY_SIZE"; - -/******************************************************************************/ -// Objects -/******************************************************************************/ -// THe leader shout sets an object for others to attack. -const string AI_ATTACK_SPECIFIC_OBJECT = "AI_ATTACK_SPECIFIC_OBJECT";// S.OBJECT -// Our flee object string name -const string AI_FLEE_TO = "AI_FLEE_TO"; // S.OBJECT -// Object - The AOE we have been set to move from - special action -const string AI_AOE_FLEE_FROM = "AI_AOE_FLEE_FROM"; // S.OBJECT -// - RANGE to flee from the above object -// - Stored as a normal float value. -const string AI_AOE_FLEE_FROM_RANGE = "AI_AOE_FLEE_FROM_RANGE"; // S.FLOAT -// Set to whatever we attack, so others can find out. -const string AI_TO_ATTACK = "AI_TO_ATTACK"; // S.OBJECT -// The last phisical attacker set. -const string AI_STORED_LAST_ATTACKER = "AI_STORED_LAST_ATTACKER";// S.OBJECT -// Highest damager -const string AI_HIGHEST_DAMAGER = "AI_HIGHEST_DAMAGER"; // S.OBJECT -// Last person (set on the perception of inaudible or invisible) to have -// invisibility. It is also a local location (no prefix) for where they were! -const string AI_LAST_TO_GO_INVISIBLE = "AI_LAST_TO_GO_INVISIBLE";// S.OBJECT -// Stored under AI object as normal. If valid, we are meant to run to it. -const string AI_RUNNER_TARGET = "AI_RUNNER_TARGET"; // S.OBJECT -/******************************************************************************/ -// Looting special -/******************************************************************************/ -// Current object to take the thing -const string AI_CURRENT_TAKER = "AI_CURRENT_TAKER"; // S.OBJECT -// Exact tag of default body bags. -const string BODY_BAG = "BodyBag"; - -/******************************************************************************/ -// Weapons. -/******************************************************************************/ -// Arrays, so we have an array (best to worst value) -const string AI_WEAPON_PRIMARY = "AI_WEAPON_PRIMARY"; // S.OBJECT -const string AI_WEAPON_SECONDARY = "AI_WEAPON_SECONDARY"; // S.OBJECT -const string AI_WEAPON_TWO_HANDED = "AI_WEAPON_TWO_HANDED"; // S.OBJECT -const string AI_WEAPON_RANGED = "AI_WEAPON_RANGED"; // S.OBJECT -const string AI_WEAPON_RANGED_2 = "AI_WEAPON_RANGED_2"; // S.OBJECT -const string AI_WEAPON_RANGED_SHIELD = "AI_WEAPON_RANGED_SHIELD";// S.INTEGER -const string AI_WEAPON_RANGED_AMMOSLOT = "AI_WEAPON_RANGED_AMMOSLOT";// S.INTEGER -const string AI_WEAPON_RANGED_IS_UNLIMITED = "AI_WEAPON_RANGED_IS_UNLIMITED";// S.INTEGER -const string AI_WEAPON_SHIELD = "AI_WEAPON_SHIELD"; // S.OBJECT -const string AI_WEAPON_SHIELD_2 = "AI_WEAPON_SHIELD_2"; // S.OBJECT -// End post-fixs as it were -const string WEAP_SIZE = "AI_WEAP_SIZE"; -const string WEAP_DAMAGE = "AI_WEAP_DAMAGE"; - -/******************************************************************************* - Constants for spawn options - - These are set via. SetSpawnInCondition. They have sName set to the right - one else it is never picked up. - - Names: - - - Targeting & Fleeing (AI_TARGETING_FLEE_MASTER) - - Fighting & Spells (AI_COMBAT_MASTER) - - Other Combat - Healing, Skills & bosses (AI_OTHER_COMBAT_MASTER) - - Other - Death corpses, minor things (AI_OTHER_MASTER) - - User Defined (AI_UDE_MASTER) - - Shouts N/A - - Default Bioware settings (NW_GENERIC_MASTER) -*******************************************************************************/ - -/******************************************************************************/ -/******************************************************************************/ -//Master Constants for UDEs -/******************************************************************************/ -/******************************************************************************/ -const string AI_UDE_MASTER = "AI_UDE_MASTER"; -const string EXIT_UDE_PREFIX_ = "EXIT_UDE_PREFIX_";// Exit string, like EXIT_UDE_PREFIX_1001 is the heartbeat exit -const string AI_PRE_EVENT_NUMBER = "AI_PRE_EVENT_NUMBER";// Set if it is a pre-event -const string AI_UDE_SCRIPT_NAME = "AI_UDE_SCRIPT_NAME";// The script that User Defined Events are run -/******************************************************************************/ -/******************************************************************************/ - -// Added pre- events. Starts them at 1021+, the originals (and some new) are 1001+ -const int AI_FLAG_UDE_HEARTBEAT_EVENT = 0x00000001; // 1001 -const int EVENT_HEARTBEAT_EVENT = 1001; -const int AI_FLAG_UDE_HEARTBEAT_PRE_EVENT = 0x00000002; // 1021 -const int EVENT_HEARTBEAT_PRE_EVENT = 1021; - -const int AI_FLAG_UDE_PERCIEVE_EVENT = 0x00000004; // 1002 -const int EVENT_PERCIEVE_EVENT = 1002; -const int AI_FLAG_UDE_PERCIEVE_PRE_EVENT = 0x00000008; // 1022 -const int EVENT_PERCIEVE_PRE_EVENT = 1022; - -const int AI_FLAG_UDE_END_COMBAT_ROUND_EVENT = 0x00000010; // 1003 -const int EVENT_END_COMBAT_ROUND_EVENT = 1003; -const int AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT = 0x00000020; // 1023 -const int EVENT_END_COMBAT_ROUND_PRE_EVENT = 1023; - -const int AI_FLAG_UDE_ON_DIALOGUE_EVENT = 0x00000040; // 1004 -const int EVENT_ON_DIALOGUE_EVENT = 1004; -const int AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT = 0x00000080; // 1024 -const int EVENT_ON_DIALOGUE_PRE_EVENT = 1024; - -const int AI_FLAG_UDE_ATTACK_EVENT = 0x00000010; // 1005 -const int EVENT_ATTACK_EVENT = 1005; -const int AI_FLAG_UDE_ATTACK_PRE_EVENT = 0x00000020; // 1025 -const int EVENT_ATTACK_PRE_EVENT = 1025; - -const int AI_FLAG_UDE_DAMAGED_EVENT = 0x00000040; // 1006 -const int EVENT_DAMAGED_EVENT = 1006; -const int AI_FLAG_UDE_DAMAGED_PRE_EVENT = 0x00000080; // 1026 -const int EVENT_DAMAGED_PRE_EVENT = 1026; - -const int AI_FLAG_UDE_DEATH_EVENT = 0x00000100; // 1007 -const int EVENT_DEATH_EVENT = 1007; -const int AI_FLAG_UDE_DEATH_PRE_EVENT = 0x00000200; // 1027 -const int EVENT_DEATH_PRE_EVENT = 1027; - -const int AI_FLAG_UDE_DISTURBED_EVENT = 0x00000400; // 1008 -const int EVENT_DISTURBED_EVENT = 1008; -const int AI_FLAG_UDE_DISTURBED_PRE_EVENT = 0x00000800; // 1028 -const int EVENT_DISTURBED_PRE_EVENT = 1028; - -const int AI_FLAG_UDE_RESTED_EVENT = 0x00004000; // 1009 -const int EVENT_RESTED_EVENT = 1009; -const int AI_FLAG_UDE_RESTED_PRE_EVENT = 0x00004000; // 1029 -const int EVENT_RESTED_PRE_EVENT = 1029; - -const int AI_FLAG_UDE_SPELL_CAST_AT_EVENT = 0x00001000; // 1011 -const int EVENT_SPELL_CAST_AT_EVENT = 1011; -const int AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT = 0x00002000; // 1031 -const int EVENT_SPELL_CAST_AT_PRE_EVENT = 1031; - -const int AI_FLAG_UDE_COMBAT_ACTION_EVENT = 0x00004000; // 1012 -const int EVENT_COMBAT_ACTION_EVENT = 1012; -const int AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT = 0x00004000; // 1032 -const int EVENT_COMBAT_ACTION_PRE_EVENT = 1032; - -const int AI_FLAG_UDE_DAMAGED_AT_1_HP = 0x80000000; // 1014 -const int EVENT_DAMAGED_AT_1_HP = 1014; - -const int AI_FLAG_UDE_ON_BLOCKED_EVENT = 0x00008000; // 1015 -const int EVENT_ON_BLOCKED_EVENT = 1015; -const int AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT = 0x00010000; // 1035 -const int EVENT_ON_BLOCKED_PRE_EVENT = 1035; - - -/******************************************************************************/ -/******************************************************************************/ -// Fleeing & Targeting settings, under AI_TARGETING_FLEE_MASTER -/******************************************************************************/ -const string AI_TARGETING_FLEE_MASTER = "AI_TARGETING_FLEE_MASTER"; -/******************************************************************************/ -/******************************************************************************/ - -// Targeting settings -// We only attack the lowest current HP. -const int AI_FLAG_TARGETING_LIKE_LOWER_HP = 0x00000001; -// We only attack the lowest AC (as in 1.2). -const int AI_FLAG_TARGETING_LIKE_LOWER_AC = 0x00000002; -// We go straight for mages/sorcerors -const int AI_FLAG_TARGETING_LIKE_MAGE_CLASSES = 0x00000004; -// We go for those who are using ranged weapons, especially against us! -// 1. Any ranged attackers attacking us. 2. Any ranged attackers. -const int AI_FLAG_TARGETING_LIKE_ARCHERS = 0x00000008; -// Attack PC's we see -const int AI_FLAG_TARGETING_LIKE_PCS = 0x00000010; -// Only attack PC targets if any in range -const int AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS = 0x00000020; -// Got for lowest HD -const int AI_FLAG_TARGETING_LIKE_LOWER_HD = 0x00000040; - -// Morale settings - -// This will flee to a waypoint set below. -// This is good for fleeing to a boss, fleeing to another area and so on. -const int AI_FLAG_FLEEING_FLEE_TO_WAYPOINT_IF_VALID = 0x00000080; -// This will make the creature never flee at all. -const int AI_FLAG_FLEEING_FEARLESS = 0x00000100; -// This will flee to an object, with the correct tag. -const int AI_FLAG_FLEEING_FLEE_TO_OBJECT = 0x00000200; -// This will make the creature never flee at all. -const int AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN = 0x00000400; -// This will make the creature never fight against impossible odds. -const int AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS = 0x00000800; -// This turns OFF any sort of group morale bonuses. -const int AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE = 0x00001000; -// Stops the overriding of HP% we'd need to test our morale. -const int AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT = 0x00002000; -// If this is ON, we will use a visual effect when we are fleeing battle -const int AI_FLAG_FLEEING_USE_VISUAL_EFFECT = 0x00004000; - -// Stored integer, base morale save (Default 10) -const string BASE_MORALE_SAVE = "BASE_MORALE_SAVE";// S.INTEGER - -// Penalites for large damage... -const string AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY = "AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY";// S.INTEGER -const string AI_DAMAGE_AT_ONCE_PENALTY = "AI_DAMAGE_AT_ONCE_PENALTY";// S.INTEGER - -const string AMOUNT_OF_HD_DIFFERENCE_TO_CHECK = "AMOUNT_OF_HD_DIFFERENCE_TO_CHECK";// S.INTEGER -const string HP_PERCENT_TO_CHECK_AT = "HP_PERCENT_TO_CHECK_AT"; // S.INTEGER -// This is DIFFERENT to the AI_FLEE_TO. This is a set object On Spawn -const string AI_FLEE_OBJECT = "AI_FLEE_OBJECT"; // S.OBJECT - -const string AI_FAVOURED_ENEMY_RACE = "AI_FAVOURED_ENEMY_RACE"; // S.CONSTANT -const string AI_FAVOURED_ENEMY_CLASS = "AI_FAVOURED_ENEMY_CLASS"; // S.CONSTANT - -// How many rounds can we target 1 target? -const string AI_MAX_TURNS_TO_ATTACK_ONE_TARGET = "AI_MAX_TURNS_TO_ATTACK_ONE_TARGET"; - -// Locals recording the progress of re-targetting each target, against the above -// limit, default of 6 rounds. -const string AI_MELEE_TURNS_ATTACKING = "AI_MELEE_TURNS_ATTACKING"; -const string AI_SPELL_TURNS_ATTACKING = "AI_SPELL_TURNS_ATTACKING"; -const string AI_RANGED_TURNS_ATTACKING = "AI_RANGED_TURNS_ATTACKING"; - -// %'s. Chance to change targets in the next round. -const string AI_MELEE_LAST_TO_NEW_TARGET_CHANCE = "AI_MELEE_NT_CHANCE"; -const string AI_RANGED_LAST_TO_NEW_TARGET_CHANCE = "AI_RANGE_NT_CHANCE"; -const string AI_SPELL_LAST_TO_NEW_TARGET_CHANCE = "AI_SPELLS_NT_CHANCE"; - -// Internal AI use only! - -// Targeting often-used constants. -const string MAXIMUM = "MAXIMUM"; -const string MINIMUM = "MINIMUM"; -const int TARGET_HIGHER = 1; -const int TARGET_LOWER = 0; - -const string TARGETING_ISPC = "TARGETING_ISPC"; -const string TARGETING_MANTALS = "TARGETING_MANTALS"; -const string TARGETING_RANGE = "TARGETING_RANGE"; -const string TARGETING_AC = "TARGETING_AC"; -const string TARGETING_SAVES = "TARGETING_SAVES"; -const string TARGETING_PHISICALS = "TARGETING_PHISICALS"; -const string TARGETING_BAB = "TARGETING_BAB"; -const string TARGETING_HITDICE = "TARGETING_HITDICE"; -const string TARGETING_HP_PERCENT = "TARGETING_HP_PERCENT"; -const string TARGETING_HP_CURRENT = "TARGETING_HP_CURRENT"; -const string TARGETING_HP_MAXIMUM = "TARGETING_HP_MAXIMUM"; - -// Generic Include constants for locals -const string AI_LAST_MELEE_TARGET = "AI_LAST_MELEE_TARGET"; -const string AI_LAST_SPELL_TARGET = "AI_LAST_SPELL_TARGET"; -const string AI_LAST_RANGED_TARGET = "AI_LAST_RANGED_TARGET"; -// This is how many turns we've been attacking target X -// Should be 0 to reset targets. -const string GLOBAL_TURNS_ATTACKING_MELEE_TARGET = "GLOBAL_TURNS_ATTACKING_MELEE_TARGET";//S.INTEGER -const string GLOBAL_TURNS_ATTACKING_SPELL_TARGET = "GLOBAL_TURNS_ATTACKING_SPELL_TARGET";//S.INTEGER -const string GLOBAL_TURNS_ATTACKING_RANGED_TARGET = "GLOBAL_TURNS_ATTACKING_RANGED_TARGET";//S.INTEGER - -/******************************************************************************/ -/******************************************************************************/ -// Fighting & Spells variables, set under AI_COMBAT_MASTER -/******************************************************************************/ -const string AI_COMBAT_MASTER = "AI_COMBAT_MASTER"; -// AI_FLAG_COMBAT_ -/******************************************************************************/ -/******************************************************************************/ - -/******************************************************************************/ -// Mage settings -/******************************************************************************/ -// This will make the creature counterspell mages specifically -const int AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE = 0x00000001; -// This will make the creature counterspell clerics specifically. -const int AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE = 0x00000002; -// This will make the creature only counterspell if it has a group to -// help it. -const int AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP = 0x00000004; - -// Makes sure that any targeting never hits allies. -const int AI_FLAG_COMBAT_NEVER_HIT_ALLIES = 0x00000010; -// This ignores allies that would survive by being hit by the spell -const int AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE = 0x00000020; -// Targets more with single target (rather than AOE) spells, trying -// to kill one target rather than many. -const int AI_FLAG_COMBAT_SINGLE_TARGETING = 0x00000040; -// Likes AOE spells - more the merrier, for targeting. -const int AI_FLAG_COMBAT_MANY_TARGETING = 0x00000080; -// Improved ... -const int AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS = 0x00002000; -const int AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING = 0x00004000; -const int AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING = 0x00008000; -const int AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY= 0x00010000; -// When set, this will force use all potions -const int AI_FLAG_COMBAT_USE_ALL_POTIONS = 0x00020000; -// This will make the creature use ranged spells, before moving in bit by bit. -// Ranges of spells are 40, then 20, 8, 2.5 and then 0 (or self! hehe) -const int AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST = 0x00040000; -// Dispels highest level mage in range rather then spell target. -const int AI_FLAG_COMBAT_DISPEL_MAGES_MORE = 0x00080000; -// Dispels in order of spell power on dispel target -const int AI_FLAG_COMBAT_DISPEL_IN_ORDER = 0x00100000; -// Turn on more ally buffing -const int AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS = 0x00200000; - -// This will make the creature summon thier respective familiars/animal companions. -const int AI_FLAG_COMBAT_SUMMON_FAMILIAR = 0x00400000; -// Uses spells, to buff before an enemy comes near. (changed: not NW_prefix) -const int AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY = 0x00800000; - -// Set integers - -const string AI_AOE_HD_DIFFERENCE = "AI_AOE_HD_DIFFERENCE"; -// Ignore AOE target if got this amount of allies in a blast area -const string AI_AOE_ALLIES_LOWEST_IN_AOE = "AI_AOE_ALLIES_LOWEST_IN_AOE"; - -// Cheat cast spells set to this (SetAIConstant, with a + IntToString(1+) added) -const string AI_CHEAT_CAST_SPELL = "AI_CHEAT_CAST_SPELL"; - -// the spell last valid random casting -const string GLOBAL_LAST_SPELL_INFORMATION = "GLOBAL_LAST_SPELL_INFORMATION"; - -/******************************************************************************/ -// Fighter settings -/******************************************************************************/ -// This sets to pick up weapons which are disarmed. -const int AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS = 0x01000000; -// IE TANK! Well, if we do have ranged weapons (EG giants with slings -// for "rocks"), but are bloody tougher in HTH. -const int AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND = 0x02000000; -// Moves back, uses more ranged weapons -const int AI_FLAG_COMBAT_ARCHER_ATTACKING = 0x04000000; -// Forces move back if got ranged weapon -const int AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK = 0x08000000; -// Forces using a bow (if got one) -const int AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW = 0x10000000; -// No killing off low HP PC's -const int AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL = 0x20000000; - -// What range to use missile weapons -const string AI_RANGED_WEAPON_RANGE = "AI_RANGED_WEAPON_RANGE"; -/******************************************************************************/ -// Dragon settings -/******************************************************************************/ -// No wing buffet. -const int AI_FLAG_COMBAT_NO_WING_BUFFET = 0x40000000; -// (Dragon) flying on -const int AI_FLAG_COMBAT_FLYING = 0x80000000; - -// String constants - integers -const string AI_DRAGON_FREQUENCY_OF_BUFFET = "AI_DRAGON_FREQUENCY_OF_BUFFET"; -const string AI_DRAGON_FREQUENCY_OF_BREATH = "AI_DRAGON_FREQUENCY_OF_BREATH"; -// Constants for counters -const string AI_DRAGONS_BREATH = "AI_DRAGONS_BREATH"; -const string AI_WING_BUFFET = "AI_WING_BUFFET"; - -// Flying to target -const string AI_FLYING_TARGET = "AI_FLYING_TARGET"; - -/******************************************************************************/ -/******************************************************************************/ -// Other Combat - Healing, Skills & bosses - AI_OTHER_COMBAT_MASTER -/******************************************************************************/ -const string AI_OTHER_COMBAT_MASTER = "AI_OTHER_COMBAT_MASTER"; -//AI_FLAG_OTHER_COMBAT_ -/******************************************************************************/ -/******************************************************************************/ - -/******************************************************************************/ -// Healing settings -// % to heal allies. Advanced healing search, and if they are a front liner or not. -/******************************************************************************/ -const int AI_FLAG_OTHER_COMBAT_HEAL_AT_PERCENT_NOT_AMOUNT = 0x00000001; -const int AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE = 0x00000002; -const int AI_FLAG_OTHER_COMBAT_NO_CURING = 0x00000004; -const int AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF = 0x00000008; -const int AI_FLAG_OTHER_COMBAT_ONLY_RESTORE_SELF = 0x00000010; -const int AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP = 0x00000020; -const int AI_FLAG_OTHER_COMBAT_USE_BAD_HEALING_SPELLS = 0x00000040; - -// Locals -const string AI_HEALING_US_PERCENT = "AI_HEALING_US_PERCENT"; // S.INTEGER -const string AI_HEALING_ALLIES_PERCENT = "AI_HEALING_ALLIES_PERCENT"; // S.INTEGER -const string SECONDS_BETWEEN_STATUS_CHECKS = "ROUNDS_BETWEEN_STATUS_CHECKS";// S.INTEGER - -/******************************************************************************/ -// Skill settings -// How the NPC uses skills (pickpocket, taunt, healing kits...) and disarming traps. -/******************************************************************************/ -const int AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING = 0x00000080; -const int AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING = 0x00000100; -const int AI_FLAG_OTHER_COMBAT_NO_TAUNTING = 0x00000200; -const int AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING = 0x00000400; -const int AI_FLAG_OTHER_COMBAT_NO_EMPATHY = 0x00000800; -const int AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY = 0x00001000; -const int AI_FLAG_OTHER_COMBAT_NO_HIDING = 0x00002000; -const int AI_FLAG_OTHER_COMBAT_FORCE_HIDING = 0x00004000; -const int AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS = 0x00008000; -const int AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS = 0x00010000; -const int AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS = 0x00020000; -const int AI_FLAG_OTHER_COMBAT_FORCE_USING_HEALING_KITS = 0x00040000; -const int AI_FLAG_OTHER_COMBAT_NO_SEARCH = 0x00080000; -const int AI_FLAG_OTHER_COMBAT_FORCE_SEARCH = 0x00100000; -const int AI_FLAG_OTHER_COMBAT_NO_CONCENTRATION = 0x00200000; -const int AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION = 0x00400000; -const int AI_FLAG_OTHER_COMBAT_NO_PARRYING = 0x00800000; -const int AI_FLAG_OTHER_COMBAT_FORCE_PARRYING = 0x01000000; - -// Counts up the concentration move counter, if over 5 we won't move back AGAIN -// but stand and fight a bit! -const string AI_CONCENTRATIONMOVE_COUNTER = "AI_CONCENTRATIONMOVE_COUNTER"; - -/******************************************************************************/ -// Boss settings, AI_BOSS_MASTER -// Leaders/Boss settings -/******************************************************************************/ -// Boss shout. Brings creatures in a pre-set, or standard range to us. -const int AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT = 0x02000000; -// Are we the group leader? -const int AI_FLAG_OTHER_COMBAT_GROUP_LEADER = 0x04000000; - -// Range for the shout -const string AI_BOSS_MONSTER_SHOUT_RANGE = "AI_BOSS_MONSTER_SHOUT_RANGE"; -// counter - adds 1, when 4+, we may shout for people to attack our target. -const string AI_LEADER_SHOUT_COUNT = "AI_LEADER_SHOUT_COUNT"; -// This will be a timer for disabling the boss shout *tempoarily* for 5 minutes -const string AI_TIMER_BOSS_SHOUT_COOLDOWN = "AI_TIMER_BOSS_SHOUT_COOLDOWN"; - -/******************************************************************************/ -/******************************************************************************/ -// Bioware variables -// NW_GENERIC_MASTER. Mostly used for animations + stuff. -/******************************************************************************/ -const string NW_GENERIC_MASTER = "NW_GENERIC_MASTER"; -/******************************************************************************/ -/******************************************************************************/ - -//const int NW_FLAG_SPECIAL_CONVERSATION = 0x00000001; -//const int NW_FLAG_SHOUT_ATTACK_MY_TARGET = 0x00000002; -const int NW_FLAG_STEALTH = 0x00000004; -const int NW_FLAG_SEARCH = 0x00000008; -//const int NW_FLAG_SET_WARNINGS = 0x00000010; -//const int NW_FLAG_ESCAPE_RETURN = 0x00000020; //Failed -//const int NW_FLAG_ESCAPE_LEAVE = 0x00000040; -//const int NW_FLAG_TELEPORT_RETURN = 0x00000080; //Failed -//const int NW_FLAG_TELEPORT_LEAVE = 0x00000100; -//const int NW_FLAG_PERCIEVE_EVENT = 0x00000200; -//const int NW_FLAG_ATTACK_EVENT = 0x00000400; -//const int NW_FLAG_DAMAGED_EVENT = 0x00000800; -//const int NW_FLAG_SPELL_CAST_AT_EVENT = 0x00001000; -//const int NW_FLAG_DISTURBED_EVENT = 0x00002000; -//const int NW_FLAG_END_COMBAT_ROUND_EVENT = 0x00004000; -//const int NW_FLAG_ON_DIALOGUE_EVENT = 0x00008000; -//const int NW_FLAG_RESTED_EVENT = 0x00010000; -//const int NW_FLAG_DEATH_EVENT = 0x00020000; -//const int NW_FLAG_SPECIAL_COMBAT_CONVERSATION = 0x00040000; -const int NW_FLAG_AMBIENT_ANIMATIONS = 0x00080000; -//const int NW_FLAG_HEARTBEAT_EVENT = 0x00100000; -const int NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS = 0x00200000; -const int NW_FLAG_DAY_NIGHT_POSTING = 0x00400000; -const int NW_FLAG_AMBIENT_ANIMATIONS_AVIAN = 0x00800000; -//const int NW_FLAG_APPEAR_SPAWN_IN_ANIMATION = 0x01000000; -//const int NW_FLAG_SLEEPING_AT_NIGHT = 0x02000000; -//const int NW_FLAG_FAST_BUFF_ENEMY = 0x04000000; - - -/******************************************************************************/ -// Other settings, AI_OTHER_MASTER -// Death, minor things. -/******************************************************************************/ -const string AI_OTHER_MASTER = "AI_OTHER_MASTER"; -//AI_FLAG_OTHER_ -/******************************************************************************/ - -/******************************************************************************/ -// Death -/******************************************************************************/ -// This turns off corpses - they won't be set to destroyable, and will be -// destroyed on death, instantly. -const int AI_FLAG_OTHER_TURN_OFF_CORPSES = 0x00000001; -// This will turn on Bioware's SetLootable stuff. It is performed On Death (Using EffectRessurection) -const int AI_FLAG_OTHER_USE_BIOWARE_LOOTING = 0x00400000; - -const string AI_WE_WILL_CREATE_ON_DEATH = "AI_WE_WILL_CREATE_ON_DEATH";// S.STRING -const string AI_DEATH_VISUAL_EFFECT = "AI_DEATH_VISUAL_EFFECT"; // S.CONSTANT -const string AI_CORPSE_DESTROY_TIME = "AI_CORPSE_DESTROY_TIME"; // S.INTEGER - -/******************************************************************************/ -// Behaviour -/******************************************************************************/ -// We search around going nearer enemies on heartbeat. -const int AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR = 0x00000002; -// We change to hostile when we are attacked. -const int AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK = 0x00000004; -// We don't attack when we see an enemy, they must attack us normally. -const int AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED = 0x00000008; -// We rest at the end of combat, after searching. -const int AI_FLAG_OTHER_REST_AFTER_COMBAT = 0x00000010; -// No voice chats. -const int AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT = 0x00000040; - -const string AI_SEARCH_IF_ENEMIES_NEAR_RANGE = "AI_SEARCH_IF_ENEMIES_NEAR_RANGE";// S.INTEGER -const string AI_DOOR_INTELLIGENCE = "AI_DOOR_INTELLIGENCE"; // S.INTEGER -// Items and loot picking extra bags. -const string AI_LOOT_BAG_OTHER_1 = "AI_LOOT_BAG_OTHER_1"; // S.STRING -const string AI_LOOT_BAG_OTHER_2 = "AI_LOOT_BAG_OTHER_2"; // S.STRING -const string AI_LOOT_BAG_OTHER_3 = "AI_LOOT_BAG_OTHER_3"; // S.STRING - -/******************************************************************************/ -// Alignment - only 2 things -/******************************************************************************/ -// Do we stop commoner default? -const int AI_FLAG_OTHER_NO_COMMONER_ALIGNMENT_CHANGE = 0x00000080; -// Do we stop commoner default? -const int AI_FLAG_OTHER_FORCE_COMMONER_ALIGNMENT_CHANGE = 0x00000100; - -/******************************************************************************/ -// Lag settings -/******************************************************************************/ -// We do not use any items. -const int AI_FLAG_OTHER_LAG_NO_ITEMS = 0x00000200; -// No casting of spells! -const int AI_FLAG_OTHER_LAG_NO_SPELLS = 0x00000400; -// No listening, for anything. -const int AI_FLAG_OTHER_LAG_NO_LISTENING = 0x00000800; -// Use ActionEquipMostDamagingMelee/Ranged instead of my set weapons. -const int AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING = 0x00001000; -// We never cure allies - so less GetHasEffect checks. -const int AI_FLAG_OTHER_LAG_NO_CURING_ALLIES = 0x00002000; -// return; on heartbeat. -const int AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT = 0x00004000; -// Go for the nearest seen enemy always -const int AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY = 0x00008000; - -/******************************************************************************/ -// Other settings -/******************************************************************************/ - -// If they are damaged a lot, they may spawn a critical wounds potion and use it. -const int AI_FLAG_OTHER_CHEAT_MORE_POTIONS = 0x00010000; -// This will store thier starting location, and then move back there after combat -// Will turn off if there are waypoints. -const int AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION = 0x00020000; -// This will affect conversations - will they clear all actions before hand? -const int AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION = 0x00040000; -// Last one! This stops all polymorphing by spells/feats -const int AI_FLAG_OTHER_NO_POLYMORPHING = 0x00080000; -// Ignore emotes -const int AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES = 0x00100000; -// Don't ever shout -const int AI_FLAG_OTHER_DONT_SHOUT = 0x00200000; - -const string EMOTE_STAR = "*"; -// Locals -const string AI_POLYMORPH_INTO = "AI_POLYMORPH_INTO"; // S.CONSTANT -const string AI_RETURN_TO_POINT = "AI_RETURN_TO_POINT"; // S.INTEGER - -/******************************************************************************/ -// The spell validnessess: -/******************************************************************************/ -const string AI_VALID_SPELLS = "AI_VALID_SPELLS"; -/******************************************************************************/ -// Max CR used OnSpawn or other GetCreatureTalentBest places -const int MAXCR = 20; -/* -// Doesn't set what they are, only if they exsist. -const int AI_VALID_TALENT_HARMFUL_AREAEFFECT_DISCRIMINANT = 0x00000001;// 1 - This is the constant number added to AI_VALID_SPELLS spawn settings. -const int AI_VALID_TALENT_HARMFUL_RANGED = 0x00000002;// 2 -const int AI_VALID_TALENT_HARMFUL_TOUCH = 0x00000004; -const int AI_VALID_TALENT_BENEFICIAL_HEALING_AREAEFFECT = 0x00000008; -const int AI_VALID_TALENT_BENEFICIAL_HEALING_TOUCH = 0x00000010; -const int AI_VALID_TALENT_BENEFICIAL_CONDITIONAL_AREAEFFECT = 0x00000020; -const int AI_VALID_TALENT_BENEFICIAL_CONDITIONAL_SINGLE = 0x00000040; -const int AI_VALID_TALENT_BENEFICIAL_ENHANCEMENT_AREAEFFECT = 0x00000080; -const int AI_VALID_TALENT_BENEFICIAL_ENHANCEMENT_SINGLE = 0x00000100; -const int AI_VALID_TALENT_BENEFICIAL_ENHANCEMENT_SELF = 0x00000200; -const int AI_VALID_TALENT_HARMFUL_AREAEFFECT_INDISCRIMINANT = 0x00000400; -const int AI_VALID_TALENT_BENEFICIAL_PROTECTION_SELF = 0x00000800; -const int AI_VALID_TALENT_BENEFICIAL_PROTECTION_SINGLE = 0x00001000; -const int AI_VALID_TALENT_BENEFICIAL_PROTECTION_AREAEFFECT = 0x00002000; -const int AI_VALID_TALENT_BENEFICIAL_OBTAIN_ALLIES = 0x00004000; -const int AI_VALID_TALENT_PERSISTENT_AREA_OF_EFFECT = 0x00008000; -const int AI_VALID_TALENT_BENEFICIAL_HEALING_POTION = 0x00010000; -const int AI_VALID_TALENT_DRAGONS_BREATH = 0x00040000; -const int AI_VALID_TALENT_HARMFUL_MELEE = 0x00200000; -// Seperate GetHasSpell checks. Restoration ETC. -const int AI_VALID_CURE_CONDITION_SPELLS = 0x00400000; -// OTHER spells not from the aboves -const int AI_VALID_OTHER_SPELL = 0x00800000; -// Any spell from the aboves -const int AI_VALID_ANY_SPELL = 0x80000000; - -// Unused. This is mearly to not use talents if we don't have any! -//const string AI_TALENT_HARMFUL_MELEE = "AI_TALENT_HM"; - -*/ -/******************************************************************************/ -// Other file constants (default1, 2, 4-9, a, b, e -/******************************************************************************/ -// Name of the tempoary target that we have seen/been damaged by/etc. -const string AI_TEMP_SET_TARGET = "AI_TEMP_SET_TARGET"; - -const string AI_TIMER = "AI_TIMER_"; // Prefix for timers -const string AI_CONSTANT = "AI_CONSTANT_"; // Prefix for constansts -const string AI_INTEGER = "AI_INTEGER_"; // Prefix for integers -const string AI_OBJECT = "AI_OBJECT_"; // Prefix for objects -const string AI_LOCATION = "AI_LOCATION"; // Prefix for local locations - -// Array constants -const string MAXINT_ = "MAXINT_"; - -const string ARRAY_TEMP_ENEMIES = "ARRAY_TEMP_ENEMIES"; -const string ARRAY_TEMP_ALLIES = "ARRAY_TEMP_ALLIES"; -const string ARRAY_TEMP_ARRAY = "ARRAY_TEMP_ARRAY"; - -const string ARRAY_MELEE_ENEMY = "ARRAY_MELEE_ENEMY"; -const string ARRAY_RANGED_ENEMY = "ARRAY_RANGED_ENEMY"; -const string ARRAY_SPELL_ENEMY = "ARRAY_SPELL_ENEMY"; - -// Some generic AI file constants -const string ARRAY_ENEMY_RANGE = "ARRAY_ENEMY_RANGE"; -const string ARRAY_ENEMY_RANGE_SEEN = "ARRAY_ENEMY_RANGE_SEEN"; -const string ARRAY_ENEMY_RANGE_HEARD = "ARRAY_ENEMY_RANGE_HEARD"; - -const string ARRAY_ALLIES_RANGE = "ARRAY_ALLIES_RANGE"; -const string ARRAY_ALLIES_RANGE_SEEN = "ARRAY_ALLIES_RANGE_SEEN"; -const string ARRAY_ALLIES_RANGE_SEEN_BUFF = "ARRAY_ALLIES_RANGE_SEEN_BUFF"; - -// RE-setting weapons uses this local integer identifier. -const string AI_WEAPONSETTING_SETWEAPONS = "AI_WEAPONSETTING_SETWEAPONS"; - -/******************************************************************************/ -// Functions in almost all scripts which include this :-P -/******************************************************************************/ - -// This reports the AI toggle of oTarget. -// * If the AI is OFF, it is TRUE. -// * Returns Dead + Commandable + AI Off integers -int GetAIOff(object oTarget = OBJECT_SELF); -// Sets the AI to NOT use any scripts (or run through them) EXCEPT death! -void SetAIOff(object oTarget = OBJECT_SELF); -// Resets the AI off integer, so the AI scripts run. -void SetAIOn(object oTarget = OBJECT_SELF); - -// This sets a spawn in condition. -// * nCondition - the condition to check for (From the "j_inc_constants" file) -// * sName - The name its stored under -void SetSpawnInCondition(int nCondition, string sName); -// This removes a spawn in condition. -// * nCondition - the condition to check for (From the "j_inc_constants" file) -// * sName - The name its stored under -void DeleteSpawnInCondition(int nCondition, string sName); -// Gets a spawn in condition. -// * nCondition - the condition to check for (From the "j_inc_constants" file) -// * sName - The name its stored under -// * oTarget - The target to look at (Ususally ourselves) -int GetSpawnInCondition(int nCondition, string sName, object oTarget = OBJECT_SELF); -// Tests a spawn in condition. -// * nCondition - A condition to test for. -// * nTestAgains - An already got (via. local integer) integer to test nCondition against. -int CheckSpawnCondition(int nCondition, int nTestAgainst); - -// We can only ever set ONE special action. These are special things, such as -// fleeing (that are a mixture of special things). -// * Use the AI_SPECIAL_ACTIONS_ constants in the constant file. -void SetCurrentAction(int nAction); -// Deletes the special action stored. -// * Use the AI_SPECIAL_ACTIONS_ constants in the constant file. -void ResetCurrentAction(); -// Gets the current special action stored. -// * Use the AI_SPECIAL_ACTIONS_ constants in the constant file. -int GetCurrentSetAction(); - -// Sets a local constant to sName, adding one to set right (so values of 0 become 1). -// * Use GetLocalConstant to return original value set. -// (To stop local's going awary, we set them with pre-fixes.) -void SetAIConstant(string sName, int nConstant); -// Returns a constant set to sName (Takes one away). -// * Therefore, returns -1 on error. -// (To stop local's going awary, we set them with pre-fixes.) -int GetAIConstant(string sName); -// Deletes a constant set to sName. -// (To stop local's going awary, we set them with pre-fixes.) -// * Note: Fixed, now "void" -void DeleteAIConstant(string sName); - -// Sets a local AI integers to ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -void SetAIInteger(string sName, int nValue); -// Gets a local AI integers from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -int GetAIInteger(string sName); -// Gets a local AI integers from ourselves. -// - We can define boundries for what it returns. -// (To stop local's going awary, we set them with pre-fixes.) -// If X is < nBottom or > nTop, return iDefault. -int GetBoundriedAIInteger(string sName, int nDefault = 10, int nTop = 10, int nBottom = 1); -// Deletes a local AI integers from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -// * Note: Fixed, now "void" -void DeleteAIInteger(string sName); - -// Sets a local AI object to ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -void SetAIObject(string sName, object oObject); -// Gets a local AI object from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -object GetAIObject(string sName); -// Deletes a local AI object from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -// * Note: Fixed, now "void" -void DeleteAIObject(string sName); - -// Sets a local AI location to ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -void SetAILocation(string sName, location lLocation); -// Gets a local AI location from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -location GetAILocation(string sName); -// Deletes a local AI location from ourselves. -// (To stop local's going awary, we set them with pre-fixes.) -void DeleteAILocation(string sName); - -// Sets up a timer. -// * sName - the variable name (Adds a pre-fix). -// * fDuration - the time until it is removed. -void SetLocalTimer(string sName, float fDuration); -// TRUE if the timer set to sName is still running. -int GetLocalTimer(string sName); - -// Arrays -// Sets a local INTEGER array on ourselves. -// * sArray - the array name. -// * oObjectArray - The object we will set. -// * nValue - The value to check. It is done HIGHEST to LOWEST. -void SetArrayIntegerValue(string sArray, object oObjectArray, int nValue); -// This will move all integer values from a point back a position -// * sArray - the array name. -// * nNumberStart - The value to start at. -// * nMax - The old-highest (or highest in the order) of the array (EG the 10th of 10) -void MoveArrayIntegerBackOne(string sArray, int nNumberStart, int nMax); - -// Sets a local FLOAT array on ourselves. -// * sArray - the array name. -// * oObjectArray - The object we will set. -// * fValue - The value to check. It is done LOWEST (nearest) to HIGHEST (fathest). -void SetArrayFloatValue(string sArray, object oObjectArray, float fValue); -// This will move all float values from a point back a position -// * sArray - the array name. -// * nNumberStart - The value to start at. -// * nMax - The old-highest (or highest in the order) of the array (EG the 10th of 10) -void MoveArrayFloatBackOne(string sArray, int nNumberStart, int nMax); - -// Deletes all the things in an array...set to sArray -void DeleteArray(string sArray); - -// Set the oTarget to ignorable. -// * The AI ignores, and shouldn't intentioally target, the creature. -void SetIgnore(object oTarget); -// Gets if the oTarget is ignorable. -// * The AI ignores, and shouldn't intentioally target, the creature. -int GetIgnore(object oTarget); -// This gets if the oTarget can be targeted as an enemy. -// * Returns TRUE if a DM, is faction Equal, is dead, invalid, or the ignore variable. -int GetIgnoreNoFriend(object oTarget); - -// Fires a User Defined Event. -// * nSpawnValue - The spawn value (like NW_FLAG_PERCIEVE_PRE_EVENT) -// * nNumber - The number to fire (like EVENT_PERCIEVE_PRE_EVENT) -// Returns TRUE if the event fires. -int FireUserEvent(int nSpawnValue, int nNumber); -// Fire the pre-event, and return TRUE if it interrupts the rest of the -// event. It uses FireUserEvent() and ExitFromUDE(). -int FirePreUserEvent(int nSpawnValue, int nNumber); -// This sets to exit the script. Use in the defaultd (On User Defined) file. -// For example: We want to not attack PC's with the item "ROCK" (Tag). We -// therefore use the event EVENT_PERCIEVE_PRE_EVENT to exit if they have that item -// because we go friendly to them. -// * nNumber - The user defined number to exit from. -void SetToExitFromUDE(int nNumber); -// This is used for Pre-events. If we exit from EVENT_PERCIEVE_PRE_EVENT, and -// use SetToExitFromUDE, this returns TRUE (ONCE!) -// * nNumber - The user defined number to exit from. -int ExitFromUDE(int nNumber); -// Get the user defined event number - includes Pre-events. -int AI_GetUDENumber(); - -// We check if we are attacking anything -// * Checks Attempted* Targets, Get the AttackTarget of us. -// * Checks GetIsInCombat at the end. If that is TRUE, we should be doing proper rounds anyway. -int GetIsFighting(); -// We check if we can perform a combat action currently. -// * Checks our action list. Some things like skills, opening doors and so on -// we don't want to interrupt before they are done. -// * Also used within DetermineCombatRound -int GetIsBusyWithAction(); -// This checks GetIsFighting and GetIsBusyWithAction, returns FALSE if we can -// do a combat round (IE we don't have anything to interrupt and are not already -// in combat!) -// * IE it adds GetIsBusyWithAction with GetIsFighting to give 0, 1 or 2. -// * Checks if we are fleeing too -int CannotPerformCombatRound(); -// This will SpeakString a value from sName's array. b1000 uses a d1000 for % chance -void SpeakArrayString(string sName, int b1000 = FALSE); - -// Returns our custom AI file (if any) -// - Blank string if not set -string GetCustomAIFileName(); -// Sets our custom AI file -// - Needs a 16 or less character string -// - Should execute actions -// - Can sort actions against a imputted target (EG: On Percieved enemy) by -// "GetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET)" -void SetCustomAIFileName(string sAIFileName); -// Sets our User Defined Event file. -// * Should be called if we are using pre-events. By default, it is called. -void SetCustomUDEFileName(string sUDEFileName); - -// This is still used - we just set a local object and execute script. -// Set the script to use by COMBAT_FILE constant -void DetermineCombatRound(object oTarget = OBJECT_INVALID); - -// This checks the current special action (fleeing, runner, door smashing) -// - Returns FALSE if none of them are performed -// Use this to make sure that an ActionMoveTo or DCR doesn't fire if we are fleeing. -// - This does not perform any actions. -// * Doesn't include a check for Search. This can be interrupted. -// * Note: 1.4: If we are not doing something that combat cannot interrupt (EG: -// if we are, say, moving to combat...but not if we were fleeing) we will delete -// what special action we were doing. -int GetIsPerformingSpecialAction(); - -// This will, if we are set that we can, shout the string. -void AISpeakString(string sString); - -// This will apply the fear visual for fleeing, if the variable -// AI_FLAG_FLEEING_USE_VISUAL_EFFECT is on. -void ApplyFleeingVisual(); -// This will remove the fear visual for fleeing. -void RemoveFleeingVisual(); - -// ETHEREALNESS: -// Can be SEEN through with TRUESEEING. If we see a ETHEREAL person, we cannot -// DIRECTLY attack them. -// Soooo...we will never target them as spell targets (AOE ones are fine!) nor -// as attack targets, but they are counted and recognised - and can be used -// as AOE targets. -// Best way is to leave most checks as normal, but make sure DetermineCombatRound() -// works correctly - it recognises (and will attempt to dispel too!), but will -// never target those. - -// Add check here for GetIsEthereal() - -// 1.4 addition: See J_INC_CONSTANT, under "ETHEREALNESS:", it explains how -// etherealness and trueseing now work with later patches. -// * Special use in DetermineCombatRound() makes the AI never target ethereal people, -// but take account of them for cirtain things (IE: They exsist). -// NOTE: If oTarget is OBJECT_SELF, we return FALSE. -int GetIsEthereal(object oTarget); - -// This will be for array speakstrings (IE: Taunts), and will make sure -// we are commandable, not dead, not deaf, and not silenced. -int CanSpeak(); -// Checks the target for a specific EFFECT_TYPE constant value -// Returns TRUE or FALSE. Used On Damaged for polymorph checking. -int GetHasEffect(int nEffectType, object oTarget = OBJECT_SELF); - -/*:://///////////////////////////////////////////// -//:: Name: AI ON, or OFF. -//:://///////////////////////////////////////////// - Scripted version of AI on/off toggle. - - It stops all AI scripts from running - using "if(GetAIStatus()) return;" - - Simple, but effective! -//::////////////////////////////////////////////*/ -int GetAIOff(object oTarget) -{ - if(GetIsDead(oTarget) || - !GetCommandable(oTarget) || - GetLocalInt(oTarget, AI_TOGGLE)) - { - return TRUE; - } - return FALSE; -} -void SetAIOff(object oTarget) -{ - SetLocalInt(oTarget, AI_TOGGLE, TRUE); -} -void SetAIOn(object oTarget) -{ - DeleteLocalInt(oTarget, AI_TOGGLE); -} -/*:://///////////////////////////////////////////// -//:: Name: GetSpawnInCondition -//:://///////////////////////////////////////////// - This returns the condition of it (True or False) - You can specify a name (as some use AI_SKILLS_MASTER for example.) - 1.3: Changed to a simpler thing, hopefully faster (taken from SoU AI). -//::////////////////////////////////////////////*/ -int GetSpawnInCondition(int nCondition, string sName, object oTarget = OBJECT_SELF) -{ - return (GetLocalInt(oTarget, sName) & nCondition); -} -void SetSpawnInCondition(int nCondition, string sName) -{ - SetLocalInt(OBJECT_SELF, sName, (GetLocalInt(OBJECT_SELF, sName) | nCondition)); -} -void DeleteSpawnInCondition(int nCondition, string sName) -{ - SetLocalInt(OBJECT_SELF, sName, (GetLocalInt(OBJECT_SELF, sName) & ~nCondition)); -} -// Tests a spawn in condition. -// * nCondition - A condition to test for. -// * nTestAgains - An already got (via. local integer) integer to test nCondition against. -int CheckSpawnCondition(int nCondition, int nTestAgainst) -{ - return (nTestAgainst & nCondition); -} -/*:://///////////////////////////////////////////// -//:: Name: SetCurrentAction, ResetCurrentAction, GetCurrentSetAction. -//:://///////////////////////////////////////////// - We can only ever set ONE action. These are special things, such as - fleeing. - Use the AI_ACTION constants in the constant file. -//::////////////////////////////////////////////*/ -void SetCurrentAction(int nAction) -{ - SetLocalInt(OBJECT_SELF, AI_CURRENT_ACTION, nAction); -} -void ResetCurrentAction() -{ - DeleteLocalInt(OBJECT_SELF, AI_CURRENT_ACTION); -} -int GetCurrentSetAction() -{ - return GetLocalInt(OBJECT_SELF, AI_CURRENT_ACTION); -} -/*:://///////////////////////////////////////////// -//:: Name: SetLocalTimer, GetLocalTimer -//:://///////////////////////////////////////////// - Gets/Sets a local timer. -//::////////////////////////////////////////////*/ -void SetLocalTimer(string sName, float fDuration) -{ - sName = AI_TIMER + sName; - SetLocalInt(OBJECT_SELF, sName, TRUE); - DelayCommand(fDuration, DeleteLocalInt(OBJECT_SELF, sName)); -} -int GetLocalTimer(string sName) -{ - return GetLocalInt(OBJECT_SELF, AI_TIMER + sName); -} -/*:://///////////////////////////////////////////// -//:: Name: Array functions. -//:://///////////////////////////////////////////// - Set array values to local integers/floats under the values stated. -//::////////////////////////////////////////////*/ -// Sets a local INTEGER array on ourselves. -// * sArray - the array name. -// * oObjectArray - The object we will set. -// * nValue - The value to check. It is done HIGHEST to LOWEST. -void SetArrayIntegerValue(string sArray, object oObjectArray, int nValue) -{ - int nValueAtPosition, nMax, nCnt; - // Get the current size - nMax = GetLocalInt(OBJECT_SELF, MAXINT_ + sArray); - string sArrayStore = sArray; - // Special - IE no valid array values at the start. - if(nMax < 1) - { - sArrayStore += "1"; - SetLocalInt(OBJECT_SELF, sArray + "1", nValue); - SetLocalObject(OBJECT_SELF, sArray + "1", oObjectArray); - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, 1); // always the first. - } - // Else, we will set it in the array. - else - { - // Loop through the items stored already. - for(nCnt = 1; nCnt <= nMax; nCnt++) - { - // Get the value of the item. - nValueAtPosition = GetLocalInt(OBJECT_SELF, sArray + IntToString(nCnt)); - // If imput is greater than stored...move all of them back one. - if(nValue > nValueAtPosition) - { - // Move all values from this point onwards back one. - MoveArrayIntegerBackOne(sArray, nCnt, nMax); - // Set the local object and the local integer. - sArrayStore += IntToString(nCnt); - SetLocalInt(OBJECT_SELF, sArrayStore, nValue); - SetLocalObject(OBJECT_SELF, sArrayStore, oObjectArray); - // Set max values we have (IE add one!) - // 1.3 beta - changed from nMax++ - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, ++nMax); - break; - } - // If at end, just add at end. - else if(nCnt == nMax) - { - // Set the local object and the local integer. - sArrayStore += IntToString(nCnt + 1); - SetLocalInt(OBJECT_SELF, sArrayStore, nValue); - SetLocalObject(OBJECT_SELF, sArrayStore, oObjectArray); - // Set max values we have (IE add one!) - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, ++nMax); - break; - } - } - } -} -// This will move all integer values from a point back a position -// * sArray - the array name. -// * nNumberStart - The value to start at. -// * nMax - The old-highest (or highest in the order) of the array (EG the 10th of 10) -void MoveArrayIntegerBackOne(string sArray, int nNumberStart, int nMax) -{ - // Objects, the old name for that value and the new one. - object oObjectAtNumber; - string sCurrentName, sNewName; - int nArrayAtNumberValue, nCnt; - // Move it from the back, back one, then then next... - // Start at value 5 (Max) and move it to 6, then move to 4, move it - // to 5 and so on down to nNumber Start, say, 3, so we get to 3, move it to 4, - // and space 3 is free. - for(nCnt = nMax; nCnt >= nNumberStart; nCnt--) - { - // Sets the name up right. - sCurrentName = sArray + IntToString(nCnt); // The current name to get values. - sNewName = sArray + IntToString(nCnt + 1); // Move back = Add one - // Set the things up in the right parts. - oObjectAtNumber = GetLocalObject(OBJECT_SELF, sCurrentName); - nArrayAtNumberValue = GetLocalInt(OBJECT_SELF, sCurrentName); - // To the NEW name - we add one to the nCnt value. - SetLocalObject(OBJECT_SELF, sNewName, oObjectAtNumber); - SetLocalInt(OBJECT_SELF, sNewName, nArrayAtNumberValue); - } -} -// Sets a local FLOAT array on ourselves. -// * sArray - the array name. -// * oObjectArray - The object we will set. -// * fValue - The value to check. It is done LOWEST (nearest) to HIGHEST (fathest). -void SetArrayFloatValue(string sArray, object oObjectArray, float fValue) -{ - int nMax, nCnt; - nMax = GetLocalInt(OBJECT_SELF, MAXINT_ + sArray); - string sArrayStore = sArray; - float fValueAtPosition; - // Special - IE no valid array values at the start. - if(nMax <= FALSE) - { - sArrayStore = sArray + "1"; - SetLocalFloat(OBJECT_SELF, sArrayStore, fValue); - SetLocalObject(OBJECT_SELF, sArrayStore, oObjectArray); - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, 1); // always the first. - } - // Else, we will set it in the array. - else - { - // Loop through the items stored already. - for(nCnt = 1; nCnt <= nMax; nCnt++) - { - // Get the value of the item. - fValueAtPosition = GetLocalFloat(OBJECT_SELF, sArray + IntToString(nCnt)); - // If imput is LESS (nearer) than stored...move all of them back one. - if(fValue < fValueAtPosition) - { - // Move all values from this point onwards back one. - MoveArrayFloatBackOne(sArray, nCnt, nMax); - // Set the local object and the local integer. - sArrayStore = sArray + IntToString(nCnt); - SetLocalFloat(OBJECT_SELF, sArrayStore, fValue); - SetLocalObject(OBJECT_SELF, sArrayStore, oObjectArray); - // Set max values we have (IE add one!) 1.3 beta - it was nMax++ - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, ++nMax); - break; - } - // Else, if it is the end value (nMax) we set it at the end - else if(nCnt == nMax) - { - // Set the local object and the local integer. - sArrayStore = sArray + IntToString(nCnt + 1); - SetLocalFloat(OBJECT_SELF, sArrayStore, fValue); - SetLocalObject(OBJECT_SELF, sArrayStore, oObjectArray); - // Set max values we have (IE add one!) - SetLocalInt(OBJECT_SELF, MAXINT_ + sArray, ++nMax); - break; - } - } - } -} -// This will move all float values from a point back a position -// * sArray - the array name. -// * nNumberStart - The value to start at. -// * nMax - The old-highest (or highest in the order) of the array (EG the 10th of 10) -void MoveArrayFloatBackOne(string sArray, int nNumberStart, int nMax) -{ - // Objects, the old name for that value and the new one. - object oObjectAtNumber; - string sCurrentName, sNewName; - int nCnt; - float fArrayAtNumberValue; - // Move it from the back, back one, then then next... - for(nCnt = nMax; nCnt >= nNumberStart; nCnt--) - { - // Sets the name up right. - sCurrentName = sArray + IntToString(nCnt); // The current name to get values. - sNewName = sArray + IntToString(nCnt + 1); // Move back = Add one - // Set the things up in the right parts. - oObjectAtNumber = GetLocalObject(OBJECT_SELF, sCurrentName); - fArrayAtNumberValue = GetLocalFloat(OBJECT_SELF, sCurrentName); - // To the NEW name - we add one to the i value. - SetLocalObject(OBJECT_SELF, sNewName, oObjectAtNumber); - SetLocalFloat(OBJECT_SELF, sNewName, fArrayAtNumberValue); - } -} -// Deletes all the things in an array...set to sArray -void DeleteArray(string sArray) -{ - int nCnt, nMax; - string sNewName; - // Max values, if any - nMax = GetLocalInt(OBJECT_SELF, MAXINT_ + sArray); - if(nMax) - { - for(nCnt = 1; nCnt <= nMax; nCnt++) - { - sNewName = sArray + IntToString(nCnt); - DeleteLocalObject(OBJECT_SELF, sNewName);// Object - DeleteLocalInt(OBJECT_SELF, sNewName);// Value - DeleteLocalFloat(OBJECT_SELF, sNewName);// Value - } - } - // Here, we do delete the max - DeleteLocalInt(OBJECT_SELF, MAXINT_ + sArray); -} - - -/*:://///////////////////////////////////////////// -//:: Name: SetLocalTimer, GetLocalTimer -//:://///////////////////////////////////////////// - Set/Get the oTarget to ignorable. - * The AI ignores, and shouldn't intentioally target, the creature. -//::////////////////////////////////////////////*/ -void SetIgnore(object oTarget) -{ - SetLocalInt(oTarget, AI_IGNORE_TOGGLE, TRUE); -} -int GetIgnore(object oTarget) -{ - return GetLocalInt(oTarget, AI_IGNORE_TOGGLE); -} -// This gets if the oTarget can be targeted as an enemy. -// * Returns if a DM, is faction Equal, is dead, invalid, or the ignore variable. -int GetIgnoreNoFriend(object oTarget) -{ - if(!GetIsObjectValid(oTarget) || GetLocalInt(oTarget, AI_IGNORE_TOGGLE) || - GetFactionEqual(oTarget) || GetIsDM(oTarget) || GetIsDead(oTarget)) - { - return TRUE; - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: SetLocalConstant, GetLocalConstant -//:://///////////////////////////////////////////// - Sets a constant (from nwscript.nss) -//::////////////////////////////////////////////*/ -void SetAIConstant(string sName, int nConstant) -{ - SetLocalInt(OBJECT_SELF, AI_CONSTANT + sName, nConstant + 1); -} -int GetAIConstant(string sName) -{ - return GetLocalInt(OBJECT_SELF, AI_CONSTANT + sName) - 1; -} -void DeleteAIConstant(string sName) -{ - DeleteLocalInt(OBJECT_SELF, AI_CONSTANT + sName); -} -/*:://///////////////////////////////////////////// -//:: Name: SetAIInteger, GetAIInteger -//:://///////////////////////////////////////////// - To stop local's going awary, we set them with pre-fixes. -//::////////////////////////////////////////////*/ -void SetAIInteger(string sName, int nValue) -{ - SetLocalInt(OBJECT_SELF, AI_INTEGER + sName, nValue); -} -int GetAIInteger(string sName) -{ - return GetLocalInt(OBJECT_SELF, AI_INTEGER + sName); -} -// Gets a local AI integers from ourselves. -// - We can define boundries for what it returns. -// (To stop local's going awary, we set them with pre-fixes.) -// If X is < nBottom or > nTop, return iDefault. -int GetBoundriedAIInteger(string sName, int nDefault = 10, int nTop = 10, int nBottom = 1) -{ - int nReturn = GetAIInteger(sName); - // Boundries - if(nReturn < nBottom || nReturn > nTop) - { - nReturn = nDefault; - } - return nReturn; -} -void DeleteAIInteger(string sName) -{ - DeleteLocalInt(OBJECT_SELF, AI_INTEGER + sName); -} -/*:://///////////////////////////////////////////// -//:: Name: SetAIObject, GetAIObject -//:://///////////////////////////////////////////// - To stop local's going awary, we set them with pre-fixes. -//::////////////////////////////////////////////*/ -void SetAIObject(string sName, object oObject) -{ - SetLocalObject(OBJECT_SELF, AI_OBJECT + sName, oObject); -} -object GetAIObject(string sName) -{ - return GetLocalObject(OBJECT_SELF, AI_OBJECT + sName); -} -void DeleteAIObject(string sName) -{ - DeleteLocalObject(OBJECT_SELF, AI_OBJECT + sName); -} -/*:://///////////////////////////////////////////// -//:: Name: SetAILocation, GetAILocation, DeleteAILocation -//:://///////////////////////////////////////////// - To stop local's going awary, we set them with pre-fixes. -//::////////////////////////////////////////////*/ -void SetAILocation(string sName, location lLocation) -{ - SetLocalLocation(OBJECT_SELF, AI_LOCATION + sName, lLocation); -} -location GetAILocation(string sName) -{ - return GetLocalLocation(OBJECT_SELF, AI_LOCATION + sName); -} -void DeleteAILocation(string sName) -{ - DeleteLocalLocation(OBJECT_SELF, AI_LOCATION + sName); -} -/*:://///////////////////////////////////////////// -//:: Name: FireUserEvent -//:://///////////////////////////////////////////// -// Fires a User Defined Event. -// * nSpawnValue - The spawn value (like NW_FLAG_PERCIEVE_PRE_EVENT) -// * nNumber - The number to fire (like EVENT_PERCIEVE_PRE_EVENT) -// Returns TRUE if the event fires. -//::////////////////////////////////////////////*/ -int FireUserEvent(int nSpawnValue, int nNumber) -{ - // Check spawn in condition - if(GetSpawnInCondition(nSpawnValue, AI_UDE_MASTER)) - { - // Signal event (and return TRUE) - SignalEvent(OBJECT_SELF, EventUserDefined(nNumber)); - return TRUE; - } - return FALSE; -} -// Fire the pre-event, and return TRUE if it interrupts the rest of the -// event. It uses FireUserEvent() and ExitFromUDE(). -int FirePreUserEvent(int nSpawnValue, int nNumber) -{ - // If we fire the event... - if(GetSpawnInCondition(nSpawnValue, AI_UDE_MASTER)) - { - // "Signal" the event - SetAIInteger(AI_PRE_EVENT_NUMBER, TRUE); - - // Execute the script - string sScript = GetLocalString(OBJECT_SELF, AI_UDE_SCRIPT_NAME); - - // Default the file to FILE_DEFAULT_UDE - if(sScript == "") sScript = FILE_DEFAULT_UDE; - - // Execute it - ExecuteScript(sScript, OBJECT_SELF); - - // Return TRUE or FALSE depending on ExitFromUDE(); - return ExitFromUDE(nNumber); - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: SetToExitFromUDE -//:://///////////////////////////////////////////// -// This sets to exit the script. Use in the defaultd (On User Defined) file. -// For example: We want to not attack PC's with the item "ROCK" (Tag). We -// therefore use the event EVENT_PERCIEVE_PRE_EVENT to exit if they have that item -// because we go friendly to them. -// * nNumber - The user defined number to exit from. -//::////////////////////////////////////////////*/ -void SetToExitFromUDE(int nNumber) -{ - SetLocalInt(OBJECT_SELF, EXIT_UDE_PREFIX_ + IntToString(nNumber), TRUE); -} -/*:://///////////////////////////////////////////// -//:: Name: ExitFromUDE -//:://///////////////////////////////////////////// -// This is used for Pre-events. If we exit from EVENT_PERCIEVE_PRE_EVENT, and -// use SetToExitFromUDE, this returns TRUE (ONCE!) -// * nNumber - The user defined number to exit from. -//::////////////////////////////////////////////*/ -int ExitFromUDE(int nNumber) -{ - // Set up string to delete/check - string sCheck = EXIT_UDE_PREFIX_ + IntToString(nNumber); - // Check local value - if(GetLocalInt(OBJECT_SELF, sCheck)) - { - // Delete if valid (not equal to one) and return TRUE to exit - DeleteLocalInt(OBJECT_SELF, sCheck); - return TRUE; - } - return FALSE; -} -// Get the user defined event number - includes Pre-events. -int AI_GetUDENumber() -{ - // Check for pre-event - int nPre = GetAIInteger(AI_PRE_EVENT_NUMBER); - - if(nPre > 0) - { - // return nPre, and we delete it so it doesn't interfere later. - DeleteAIInteger(AI_PRE_EVENT_NUMBER); - return nPre; - } - // By default, return the normal event number used - return GetUserDefinedEventNumber(); -} - -/*:://///////////////////////////////////////////// -//:: Name: GetIsFighting, GetIsBusyWithAction, CanPerformCombatRound -//:://///////////////////////////////////////////// -// Busy things - are we doing an action we don't want to override with ClearAllActions? -// Checks them here. -//::////////////////////////////////////////////*/ - -// We check if we are attacking anything -// * Checks Attempted* Targets, Get the AttackTarget of us. -// * Checks GetIsInCombat at the end. If that is TRUE, we should be doing proper rounds anyway. -int GetIsFighting() -{ - // Do we already have a target? - if(GetIsObjectValid(GetAttackTarget()) || - GetIsObjectValid(GetAttemptedAttackTarget()) || - GetIsObjectValid(GetAttemptedSpellTarget())) - { - return TRUE; - } - // Final check. Are we in combat? - return GetIsInCombat(); -} -// We check if we can perform a combat action currently. -// * Checks our action list. Some things like skills, opening doors and so on -// we don't want to interrupt before they are done. -// * Also used within DetermineCombatRound -int GetIsBusyWithAction() -{ - // Set up actions. - int nAction = GetCurrentAction(); - switch(nAction) - { - // Very common. Could be a door as well as a creature! - case ACTION_ATTACKOBJECT: - { - // This is a special thing...if we are attacking a non-creature, we - // return FALSE anyway, to attack the creature. - - // Therefore, if we are attacking a creature though, we return TRUE as - // we do not want to change objects. :-P - int nAttackObjectType = GetObjectType(GetAttackTarget()); - // Note: as this returns -1 on error, its easier to just use an if/else - // checking the integers, with a -1 dropout. - if(nAttackObjectType != -1) - { - // We never stop attacking one creature - if(nAttackObjectType == OBJECT_TYPE_CREATURE) - { - return TRUE; - } - // we may stop attacking a door if we are not fleeing though - // But if we are attacking a door and fleeing, don't react. - else if(nAttackObjectType == OBJECT_TYPE_DOOR && - !GetIsObjectValid(GetAIObject(AI_FLEE_TO))) - { - return TRUE; - } - } - } - break; - // We are opening a door... (or unlocking one) - case ACTION_OPENDOOR: // Opening a door! - case ACTION_OPENLOCK: // The AI only unlocks doors - { - // It may be that we want to always unlock doors and open them as we - // are fleeing. - if(!GetIsObjectValid(GetAIObject(AI_FLEE_TO))) - { - return TRUE; - } - } - break; - // If we are using a cirtain skill or similar, don't try and attack. - // We probably are already! - case ACTION_ANIMALEMPATHY: // An "attack" skill we use - case ACTION_CASTSPELL: // Casting a spell shouldn't be interrupted. - case ACTION_HEAL: // Heal skill. A very important way to heal and not to override - case ACTION_ITEMCASTSPELL: // Scrolls, potions ETC. - case ACTION_LOCK: // Won't be used. Added for completeness. - case ACTION_PICKPOCKET: // Sometimes used in combat. Nifty! - case ACTION_PICKUPITEM: // We may be picking up lost weapons (disarmed ones) - case ACTION_SETTRAP: // Can't seem to work it :-/ Well, here for completeness - case ACTION_TAUNT: // Taunt shouldn't be interrupted. - { - return TRUE; - } - break; - // These common ones which we will interrupt are covered by "default:" - // and are here for reference - default: - { - /* nAction == ACTION_INVALID || - nAction == ACTION_WAIT || - nAction == ACTION_FOLLOW || - nAction == ACTION_MOVETOPOINT || - nAction == ACTION_DIALOGOBJECT || - nAction == ACTION_REST || - nAction == ACTION_USEOBJECT || - nAction == ACTION_COUNTERSPELL || - nAction == ACTION_DISABLETRAP || - nAction == ACTION_EXAMINETRAP || - nAction == ACTION_FLAGTRAP || - nAction == ACTION_RECOVERTRAP */ - return FALSE; - } - break; - } - return FALSE; -} -// This checks GetIsFighting and GetIsBusyWithAction, returns FALSE if we can -// do a combat round (IE we don't have anything to interrupt and are not already -// in combat!) -// * IE it adds GetIsBusyWithAction with GetIsFighting to give 0, 1 or 2. -// * Checks if we are fleeing too -int CannotPerformCombatRound() -{ - return GetIsPerformingSpecialAction() + GetIsBusyWithAction() + GetIsFighting(); -} - -// This will SpeakString a value from sName's array. b1000 uses a d1000 for % chance -void SpeakArrayString(string sName, int b1000 = FALSE) -{ - // Need a valid array (arrays of 1 are just that - 1 value to choose from.) - int nSize = GetLocalInt(OBJECT_SELF, ARRAY_SIZE + sName); - if(nSize > 0) - { - // Make sure we are not dead (unless we should be) - if(sName != AI_TALK_ON_DEATH) - { - if(GetIsDead(OBJECT_SELF)) return; - } - // Do we carry on? - int bCarryOn = FALSE; - if(b1000 == TRUE) - { - // Do the % check now. Values 1-1000 randomised. - if((Random(1000) + 1) <= GetLocalInt(OBJECT_SELF, ARRAY_PERCENT + sName)) bCarryOn = TRUE; - } - else - { - // 100 normal one. - if(d100() <= GetLocalInt(OBJECT_SELF, ARRAY_PERCENT + sName)) bCarryOn = TRUE; - } - if(bCarryOn) - { - int nRandomOne = 1; - if(nSize > 1) - { - // Randomise - we add one, so instead of 0-2 (for 3 values) it goes 1-3. - nRandomOne = Random(nSize) + 1; - } - // Now, to choose one... - string sSpeak = GetLocalString(OBJECT_SELF, sName + IntToString(nRandomOne)); - // And speak! - // - Added random delay for 0.1 to 1.2 seconds to add some variety, - // if it is used for n1000 - if(sSpeak != "") - { - // Code sorta taken from NW_i0_Spells, the random stuff. - // FloatToInt(15);/FloatToInt(fRandom * 10.0); - if(b1000 == TRUE) - { - float fDelay = IntToFloat(Random(15) + 1) / 10.0; - DelayCommand(fDelay, SpeakString(sSpeak)); - } - else - { - // Speak instantly. - SpeakString(sSpeak); - } - } - } - } -} - -// Returns our custom AI file (if any) -// - Blank string if not set -string GetCustomAIFileName() -{ - return GetLocalString(OBJECT_SELF, AI_CUSTOM_AI_SCRIPT); -} -// Sets our custom AI file -// - Needs a 16 or less character string -// - Should execute actions -// - Can sort actions against a imputted target (EG: On Percieved enemy) by -// "GetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET)" -void SetCustomAIFileName(string sAIFileName) -{ - SetLocalString(OBJECT_SELF, AI_CUSTOM_AI_SCRIPT, sAIFileName); -} -// Sets our User Defined Event file. -// * Should be called if we are using pre-events. By default, it is called. -void SetCustomUDEFileName(string sUDEFileName) -{ - SetLocalString(OBJECT_SELF, AI_UDE_SCRIPT_NAME, sUDEFileName); -} - -/*:://///////////////////////////////////////////// -//:: Name: DetermineCombatRound -//:://///////////////////////////////////////////// - This is still used - we just set a local object and execute script. - Argument - iCustom = Custom Files, so we determine not with default3 -//:://///////////////////////////////////////////*/ -void DetermineCombatRound(object oTarget = OBJECT_INVALID) -{ - // Check for custom AI script, else fire default. - string sAI = GetCustomAIFileName(); - // Fire default AI script - if(sAI == "") - { - // Sanity check - to not fire this off multiple times, we make sure temp - // object is not the same as oTarget (and valid) - if(!GetIsObjectValid(oTarget) || (GetIsObjectValid(oTarget) && - !GetLocalTimer(AI_DEFAULT_AI_COOLDOWN))) - { - // 73: "[Call for DCR] Default AI [Pre-Set Target]" + GetName(oTarget) - DebugActionSpeakByInt(73, oTarget); - SetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET, oTarget); - ExecuteScript(COMBAT_FILE, OBJECT_SELF); - SetLocalTimer(AI_DEFAULT_AI_COOLDOWN, 0.1); - } - } - // Fire custom AI script - else - { - SetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET, oTarget); - // 74: "[Call for DCR] Custom AI [" + sAI + "] [Pre-Set Target]" + GetName(oTarget) - DebugActionSpeakByInt(74, oTarget, FALSE, sAI); - // Execute it - ExecuteScript(sAI, OBJECT_SELF); - } -} - - -// This checks the current special action (fleeing, runner, door smashing) -// - Returns FALSE if none of them are performed -// Use this to make sure that an ActionMoveTo or DCR doesn't fire if we are fleeing. -// * Note: 1.4: If we are not doing something that combat cannot interrupt (EG: -// if we are, say, moving to combat...but not if we were fleeing) we will delete -// what special action we were doing. -int GetIsPerformingSpecialAction() -{ - int nAction = GetCurrentSetAction(); - object oTarget = GetAttackTarget(); - object oRunTarget; - switch(nAction) - { - // We are running to get help - case AI_SPECIAL_ACTIONS_ME_RUNNER: - { - // Get who we are running too. - oRunTarget = GetAIObject(AI_RUNNER_TARGET); - if(GetIsObjectValid(oRunTarget)) - { - if(GetObjectSeen(oRunTarget)) - { - // Stop thinking we are a runner if we can see the run target - ResetCurrentAction(); - } - else - { - // Else we are running to the - return TRUE; - } - } - } - break; - // We are fleeing battle - case AI_SPECIAL_ACTIONS_FLEE: - { - oRunTarget = GetAIObject(AI_FLEE_TO); - if(GetIsObjectValid(oRunTarget)) - { - if(GetObjectSeen(oRunTarget)) - { - // If we see the flee target, reset targets - ResetCurrentAction(); - } - else - { - // Else flee! - return TRUE; - } - } - else - { - // Check if we have bad intellgence, and we will run away - // from the nearest enemy if heard. - if(GetAIInteger(AI_INTELLIGENCE) <= 3) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetLastHostileActor(); - if(!GetIsObjectValid(oRunTarget) || GetIsDead(oRunTarget)) - { - ResetCurrentAction(); - return FALSE; - } - } - } - // Running from enemy - return TRUE; - } - ResetCurrentAction(); - } - } - break; - // We are moving out of a bad AOE - case AI_SPECIAL_ACTIONS_MOVE_OUT_OF_AOE: - { - // We must be X distance away from a cirtain AOE, if we are not, we - // move. - oRunTarget = GetAIObject(AI_AOE_FLEE_FROM); - - // If not valid, or already far enough away, delete special action - // and return false. - if(!GetIsObjectValid(oRunTarget) || - GetLocalFloat(OBJECT_SELF, AI_AOE_FLEE_FROM_RANGE) < GetDistanceToObject(oRunTarget)) - { - ResetCurrentAction(); - } - else - { - // Valid and still in range - return TRUE; - } - } - break; - default: - { - // We reset stuff - eg: Move to fighting or Search routines, - // because now we will (or should) initiate combat! - ResetCurrentAction(); - - // Return false to carry on a normal DCR or move to enemy. - return FALSE; - } - break; - } - // Return false to carry on a normal DCR or move to enemy. - return FALSE; -} - -// This will, if we are set that we can, shout the string. -void AISpeakString(string sString) -{ - // Spawn condition to turn it off. - if(!GetSpawnInCondition(AI_FLAG_OTHER_DONT_SHOUT, AI_OTHER_MASTER)) - { - // Silent talk = "DebugMode 1" only can see, is the "talk" version of the DM - // channel. - SpeakString(sString, TALKVOLUME_SILENT_TALK); - } -} -// This will apply the fear visual for fleeing, if the variable -// AI_FLAG_FLEEING_USE_VISUAL_EFFECT is on. -void ApplyFleeingVisual() -{ - if(GetSpawnInCondition(AI_FLAG_FLEEING_USE_VISUAL_EFFECT, AI_TARGETING_FLEE_MASTER)) - { - // Supernatural effect. - effect eFear = SupernaturalEffect(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR)); - ApplyEffectToObject(DURATION_TYPE_PERMANENT, eFear, OBJECT_SELF); - } -} -// This will remove the fear visual for fleeing. -void RemoveFleeingVisual() -{ - // Get first effect - effect eCheck = GetFirstEffect(OBJECT_SELF); - while(GetIsEffectValid(eCheck)) - { - // Must be: Not from a spell - if(GetEffectSpellId(eCheck) == AI_SPELL_INVALID) - { - // * Supernatural only, a visual effect, permanent, applied by us. - if(GetEffectType(eCheck) == EFFECT_TYPE_VISUALEFFECT && - GetEffectSubType(eCheck) == SUBTYPE_SUPERNATURAL && - GetEffectCreator(eCheck) == OBJECT_SELF && - GetEffectDurationType(eCheck) == DURATION_TYPE_PERMANENT) - { - // Remove all effects which match this. - RemoveEffect(OBJECT_SELF, eCheck); - } - } - // Get next effect - eCheck = GetNextEffect(OBJECT_SELF); - } -} - -// 1.4 addition: See J_INC_CONSTANT, under "ETHEREALNESS:", it explains how -// etherealness and trueseing now work with later patches. -// * Special use in DetermineCombatRound() makes the AI never target ethereal people, -// but take account of them for cirtain things (IE: They exsist). -// NOTE: If oTarget is OBJECT_SELF, we return FALSE. -int GetIsEthereal(object oTarget) -{ - // Return FALSE. - if(oTarget == OBJECT_SELF) return FALSE; - - // Check for the 2 spells which might apply this. - return (GetHasSpellEffect(SPELL_ETHEREALNESS, oTarget) || - GetHasSpellEffect(AI_SPELLABILITY_ETHEREALNESS, oTarget)); -} - -// This will be for array speakstrings (IE: Taunts), and will make sure -// we are commandable, not dead, not deaf, and not silenced. -int CanSpeak() -{ - // If dead, we cannot speak - if(GetIsDead(OBJECT_SELF)) return FALSE; - - // If uncommandable, same - if(!GetCommandable()) return FALSE; - - // If silenced, cannot speak, and if deaf, we cannot hear ourselves speak - if(GetHasEffect(EFFECT_TYPE_SILENCE) || - GetHasEffect(EFFECT_TYPE_DEAF)) return FALSE; - - // We CAN speak, return TRUE - return TRUE; -} -// Get Has Effect -// Checks to see if the target has a given -// effect, usually from a spell. Really useful this is. -int GetHasEffect(int nEffectType, object oTarget = OBJECT_SELF) -{ - effect eCheck = GetFirstEffect(oTarget); - while(GetIsEffectValid(eCheck)) - { - if(GetEffectType(eCheck) == nEffectType) - { - return TRUE; - } - eCheck = GetNextEffect(oTarget); - } - return FALSE; -} - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_debug.nss b/_module/nss/j_inc_debug.nss deleted file mode 100644 index 2fb4a03c..00000000 --- a/_module/nss/j_inc_debug.nss +++ /dev/null @@ -1,187 +0,0 @@ -/*/////////////////////// [Include - Debugging] //////////////////////////////// - Filename: J_Inc_Debug -///////////////////////// [Include - Debugging] //////////////////////////////// - This contains DebugActionSpeak, the debug function. - - Makes it easier to uncomment debug lines. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - - In beta, changed it so this file controls all debug strings. Just - uncomment them and recompile to turn it on/off. - 1.4 - TO DO: Added some more debug strings I use -///////////////////////// [Workings] /////////////////////////////////////////// - DebugActionSpeak normally writes a timestamped log entry, and speak a silent - string Server Admins can hear. - - 1.3 added: - - DebugActionSpeakByInt(int iInteger); - - Removes many strings into this file - - Can easily comment out all string so they are not added to compiled - scripts if debugging unused (This saves space on compiled files :-D ) - - Always uncomment the right bits if not using any debugging. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Debugging] //////////////////////////////*/ - -// This will speak a cirtain integer number string (similar to a dialog reference). -// - I (Jass) have just moved all strings I used all the time into here, so -// if the strings are uncommented, they will not be compiled -// - The numbers have no reference to much really. -// - Calls DebugActionSpeak! -// - See J_INC_DEBUG to uncomment/recomment in -void DebugActionSpeakByInt(int iInteger, object oInput = OBJECT_INVALID, int nInput = FALSE, string sInput = ""); - -// Speaks and stamps a debug string. -// - See J_INC_DEBUG to uncomment/recomment the debug strings. -// - Only used in special circumstances. -void DebugActionSpeak(string sString); - -// This will speak a cirtain integer number string (similar to a dialog reference). -// - I (Jass) have just moved all strings I used all the time into here, so -// if the strings are uncommented, they will not be compiled -// - The numbers have no reference to much really. -// - Calls DebugActionSpeak! -// - See J_INC_DEBUG to uncomment/recomment in -void DebugActionSpeakByInt(int iInteger, object oInput = OBJECT_INVALID, int nInput = FALSE, string sInput = "") -{ - // TO UNCOMMENT/COMMENT: - // - Add/Remove in "//" before the next lines "/*" - // - Recompile all files - - ///* - - string sDebug; - switch(iInteger) - { - // - Generic AI stuff - case 1: sDebug = "[DCR:Melee] Most Damaging Weapon. Target: " + GetName(oInput); break; - case 2: sDebug = "[DCR:Melee] Most Damaging as Not Effective"; break; - case 3: sDebug = "[DCR:Melee] Melee Code. No valid melee target/Dead. Exiting"; break; - case 4: sDebug = "[DCR:Melee] Melee attack. [Target] " + GetName(oInput) + " [Feat/Attack] " + IntToString(nInput); break; - case 5: sDebug = "[DCR:Caster] Defensive Casting Mode ON [Enemy] " + GetName(oInput); break; - case 6: sDebug = "[DCR:Caster] Moving away from AOO's. [Enemy] " + GetName(oInput); break; - case 7: sDebug = "[DCR:Casting] Talent(item) [TalentID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 8: sDebug = "[DCR:Casting] Workaround for Spontaeous [SpellID] " + IntToString(nInput) + " [Target] " + GetName(oInput); break; - case 9: sDebug = "[DCR:Casting] NormalSpell [ID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 10: sDebug = "[DCR:Casting] TalentSpell. [ID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 11: sDebug = "[DCR:Casting] SubSpecialSpell. [ID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 12: sDebug = "[DCR:Casting] NormalRandomSpell. [ID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 13: sDebug = "[DCR:Casting] Backup spell caught: " + IntToString(nInput); break; - case 14: sDebug = "[DCR:Feat] [ID] " + IntToString(nInput) + " [Enemy] " + GetName(oInput); break; - case 15: sDebug = "[DCR:Casting] Grenade [ID] " + IntToString(nInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - case 16: sDebug = "[AOE Call] Moving out of/Dispeling an AOE. [Tag] " + GetTag(oInput); break; - case 17: sDebug = "[DCR:Special] Darkness + Caster. No seen enemy. Dispel/Move."; break; - case 18: sDebug = "[DRC:Talent] Using Talent (Healing). [TalentID] " + IntToString(nInput) + " [Target] " + GetName(oInput); break; - case 19: sDebug = "[DCR:Healing] (Should) Healing [Target]" + GetName(oInput) + " [CurrentHP|Max|ID|Rank|Power] " + IntToString(nInput); break; - case 20: sDebug = "[DCR Healing] Boss Action, create Critical Wounds potion"; break; - case 21: sDebug = "[DCR:Casting] Healing self with healing kit, [Kit] " + GetName(oInput); break; - case 22: sDebug = "[DCR:Feat] Summoning my familiar"; break; - case 23: sDebug = "[DCR:Feat] Summoning my animal companion"; break; - case 24: sDebug = "[DCR:Fleeing] Stupid/Panic/Flee moving from enemies/position - We are a commoner/no morale/failed < 3 int"; break; - case 25: sDebug = "[DCR:Fleeing] Fleeing to allies. [ID Array] " + sInput + " [Ally] " + GetName(oInput); break; - case 26: sDebug = "[DCR:GFTK] Attacking a PC who is dying/asleep! [Enemy]" + GetName(oInput); break; - case 27: sDebug = "[DCR:Moving] Archer Retreating back from the enemy [Enemy]" + GetName(oInput); break; - case 28: sDebug = "[DCR:Turning] Using Turn Undead"; break; - case 29: sDebug = "[DCR:Bard Song] Using"; break; - case 30: sDebug = "[DCR:Bard Curse Song] Using"; break; - case 31: sDebug = "[DCR:All Spells] Error! No casting (No spells, items, target Etc)."; break; - case 32: sDebug = "[DCR:All Spells] [Modifier|BaseDC|SRA] " + IntToString(nInput); break; - case 33: sDebug = "[DCR:Casting] Cheat Spell. End of Spells. [Spell] " + IntToString(nInput) + "[Target]" + GetName(oInput); break; - case 34: sDebug = "[DCR:All Spells] Ranged Spells. Should use closer spells/move nearer"; break; - case 35: sDebug = "[DCR:Dragon] Breath weapon & attacking [Breath ID] " + IntToString(nInput) + " [Target] " + GetName(oInput); break; - case 36: sDebug = "[DCR:Dragon] Wing Buffet [Target] " + GetName(oInput); break; - case 37: sDebug = "[DCR:Beholder] Teleport"; break; - case 38: sDebug = "[DCR:Beholder] Rays"; break; - case 39: sDebug = "[DCR:Targeting] No valid enemies in sight, moving to allies target's. [Target] " + GetName(oInput); break; - case 40: sDebug = "[DCR:Targeting] Override Target Seen. [Name]" + GetName(oInput); break; - case 41: sDebug = "[DCR:Targeting] No seen in LOS, Attempting to MOVE to something [Target]" + GetName(oInput); break; - case 42: sDebug = "[DCR:Skill] Using agressive skill (+Attack). [Skill] " + IntToString(nInput) + " [Enemy]" + GetName(oInput); break; - case 43: sDebug = "[DCR:Pre-Melee Spells] All Potions Using. [Spell ID] " + IntToString(nInput); break; - case 44: sDebug = "[DCR:Pre-Melee Spells] True Strike Emptive attack [Target] " + GetName(oInput); break; - case 45: sDebug = "[DCR:CounterSpell] Counterspelling. [Target] " + GetName(oInput); break; - case 46: sDebug = "[DRC] START [Intruder]" + GetName(oInput); break; - case 47: sDebug = "[DCR] [PREMITURE EXIT] Cannot Do Anything."; break; - case 48: sDebug = "[DCR] [PREMITURE EXIT] Dazed move away."; break; - case 49: sDebug = "[DCR] [PREMITURE EXIT] Fleeing or otherwise"; break; - case 50: sDebug = "[DRC] END - DELETE PAST TARGETS"; break; - // Perception - case 51: sDebug = "[Perception] Our Enemy Target changed areas. Stopping, moving too...and attack... [Percieved] " + GetName(oInput); break; - case 52: sDebug = "[Perception] Enemy Vanished (Same area) Retargeting/Searching [Percieved] " + GetName(oInput); break; - case 53: sDebug = "[Perception] Enemy seen, and was old enemy/cannot see current. Re-evaluating (no spell) [Percieved] " + GetName(oInput); break; - case 54: sDebug = "[Perception] Enemy Seen. Not in combat, attacking. [Percieved] " + GetName(oInput); break; - case 55: sDebug = "[Perception] Percieved Dead Friend! Moving and Searching [Percieved] " + GetName(oInput); break; - case 56: sDebug = "[Perception] Percieved Alive Fighting Friend! Moving to and attacking. [Percieved] " + GetName(oInput); break; - // Conversation - case 57: sDebug = "[Shout] Friend (may be PC) in combat. Attacking! [Friend] " + GetName(oInput); break; - case 58: sDebug = "[Shout] Responding to shout [Enemy] " + GetName(oInput) + " Who has spoken!"; break; - // Phisical Attacked - case 59: sDebug = "[Phisically Attacked] Attacking back. [Attacker(enemy)] " + GetName(oInput); break; - case 60: sDebug = "[Phisically Attacked] Not same area. [Attacker(enemy)] " + GetName(oInput); break; - // Damaged - case 61: sDebug = "[Damaged] Morale Penalty for 600 seconds [Penalty]" + IntToString(nInput); break; - case 62: sDebug = "[Damaged] Not in combat: DCR [Damager]" + GetName(oInput); break; - case 63: sDebug = "[Damaged] Not in combat: DCR. Ally hit us. [Damager(Ally?)]" + GetName(oInput); break; - // Death - case 64: sDebug = "[Death] Checking corpse status in " + IntToString(nInput) + " [Killer] " + GetName(oInput) + " [Times Died Now] " + sInput; break; - // Disturbed - case 65: sDebug = "[Disturbed] (pickpocket) Attacking Enemy [Disturber] " + GetName(oInput) + " [Type] " + IntToString(nInput); break; - // Rest - case 66: sDebug = "[Rested] Resting. [Type(should be invalid)] " + IntToString(nInput); break; - // Spell Cast at - case 67: sDebug = "[Spell] Caster isn't a creature! May look for target [Caster] " + GetName(oInput); break; - case 68: sDebug = "[Spell:Enemy/Hostile] Not in combat. Attacking: [Caster] " + GetName(oInput); break; - case 69: sDebug = "[Spell] (ally). Not in combat. May Attack/Move [Caster] " + GetName(oInput); break; - // Spell Other AI - // - Shouts - case 70: sDebug = "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(nInput) + " [Shouter] " + GetName(oInput); break; - // Constants - // - Search - case 71: sDebug = "[Search] Resting"; break; - case 72: sDebug = "[Search] Searching, No one to attack. [Rounds Remaining] " + IntToString(nInput) + ". [Possible target] " + GetName(oInput); break; - // - DCR - case 73: sDebug = "[Call for DCR] Default AI [Pre-Set Target]" + GetName(oInput); break; - case 74: sDebug = "[Call for DCR] Custom AI [" + sInput + "] [Pre-Set Target]" + GetName(oInput); break; - // Destroy self - case 75: sDebug = "[Dead] Setting to selectable/destroyable (so we go) for Bioware corpses."; break; - case 76: sDebug = "[Dead] Destroying self finally."; break; - // Waypoints - case 77: sDebug = "[Waypoints] Returning to spawn location. [Area] " + GetName(oInput); break; - - default: return; break; - } - if(sDebug != "") - { - DebugActionSpeak(sDebug); - } - // */ -} - -void DebugActionSpeak(string sString) -{ -// You MUST uncomment this line, IF you use either of the below things - string sNew = "[Debug]" + GetName(OBJECT_SELF) + "[ObjectID]" + ObjectToString(OBJECT_SELF) + " [Debug] " + sString; - -// Note, uncomment this, so that DM's can hear the debug speaks, normally it is -// only server admins who can hear the debug. If you are not testing, it might -// be best to keep this uncommented. -// Futher: - Must have debug mode set to 1 -// - Only the server admin can seem to see this. -// SpeakString(sNew, TALKVOLUME_TALK); - -// Note, uncomment this line to send a message to the first PC in the module. -// - Useful for singleplayer testing - //SendMessageToPC(GetFirstPC(), sNew); - -// This writes the entry to the log, very important, if debugging -// Futher: - If left up for a long time, logs can get very big with the AI -// - Use to find problems in the AI and report to me :-D (Jasperre) - WriteTimestampedLogEntry(sNew); -} - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_generic_ai.nss b/_module/nss/j_inc_generic_ai.nss deleted file mode 100644 index b811d330..00000000 --- a/_module/nss/j_inc_generic_ai.nss +++ /dev/null @@ -1,15044 +0,0 @@ -/*/////////////////////// [Include - Combat] /////////////////////////////////// - Filename: J_INC_Generic_AI -///////////////////////// [Include - Combat] /////////////////////////////////// - This is included in j_ai_detercombat, and executed via the main call - AI_DetermineCombatRound, to determine a hostile action to do against the enemy. - - It works through a "List" of things, until it finds an appropriate action - to undertake. - - It basically runs through: - - - Should I move out of an AOE spell? - - Special abilities like Auras - - Fleeing - - Spells - - Feats (For combat, like Bulls Strength) - - Melee attack (Ranged and Melee) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - All functions prefixed to AI_ - - Lot more documentation - - All parts changed, mainly: - - Better targeting - - Different Effect Setting - - More randomised spellcasting - 1.4 - Bugfixes. Quite a few minor, usually. Some major ones. - - Sub-spells merged into normal spell routines, it was a waste of space spliting. - - Ethereal creatures can be sometimes seen (but not attacked). - This is now taken into account. AI_GetTargetSanityCheck includes it, - and a new function handles behaviour when faced with *just* 1 ethereal enemy - - Removed quite a few Global* variables already - some were not even used - and some used once or twice! - - AI_ActionCastSpell() behaviour changed. New global variables track - if it is now pointless (for a time) to check cirtain levels of spells, - and delay checking again for 3 minutes. Increase in lag compensated by - a much better bit of code and less global variables. IE: IGNORE TALENTS - - Removed redudant AI_ActionUseFeatOnObject(). Added new - AI_ActionUseSpellLikeFeat() which replaced all of its uses (and should fix - some feat related bugs with the AI). Hardly any ActionUseFeat() calls - are now used, except for Combat offensive feats (EG: Knockdown) which - are without scripts. - - ADDIONTAL: - - Need to therefore sort out casting spells from items, and potion usage. both - have been removed from this version so far - will be put back in better later. - - - TO DO: - - See bugs file - - Stuff to optimise - - Sort out items! - - AI_ActionCastSpellRandom should be streamlined into AI_ActionCastSpell, but - add another integer thingy. Makes it much easier. CAn have a new constant - like "NOT_RANDOM = -1", so randomness is ignored. - - Better allied buffing strategies and stuff. Stay invisible and use - spells appropriate to level and range of allies. Such things like mage - armor can be useful too (if we have it, AC increase are always good!) - TEMP: - - Until solved, removed all checks for AI_VALID_SPELLS things. - -///////////////////////// [Workings] /////////////////////////////////////////// - This is included in "J_AI_DeterCombat". It is the main combat include file - and determines what to do by checking a lot of conditions. - - It has 2 User-defined Events: - EVENT_COMBAT_ACTION_EVENT = 1012; - EVENT_COMBAT_ACTION_PRE_EVENT = 1032; - - Useful to check special things, and can be used to override default AI - actions, or to change them once they have happened. See the user defined - file for workings of the Pre events. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: Global* Objects/Integers/Toggles, GetSpawnInCondition, - GetCommandable, AI_ActionCast* AI_ActionUse* - (Other AI_Action* things) ClearAllActions, GetAC, - GetCurrentHitPoints, GetMaxHitPoints, - GetHitDice, GetCurrentAction (and lots more...). -///////////////////////// [Include - Combat] /////////////////////////////////*/ - -/*/////////////////////// [Intelligence Documentation] ///////////////////////// - Intelligence - - in·tel·li·gence ( P ) Pronunciation Key (n-tl-jns) - n. - - 1. a, The capacity to acquire and apply knowledge. - b, The faculty of thought and reason. - c, Superior powers of mind. - 2. An intelligent, incorporeal being, especially an angel. - 3. Information; news. - - 4. a, Secret information, especially about an actual or potential enemy. - b, An agency, staff, or office employed in gathering such information. - c, Espionage agents, organizations, and activities considered as a - group: “Intelligence is nothing if not an institutionalized black - market in perishable commodities” (John le Carré). - - We'll take 1. a, as our definition of intelligence in my AI files. - - It basically has an underlaying effect on how creatures work - it will - affect some of the AI's choices and decisions. - - It will not affect everything. It will never affect anything you can - specifically set in the spawn file, except in rare circumstances. It does - have no effect on: Targeting, Counterspelling, Shouting, Seeing/Percieving. - - - - - - - - -///////////////////////// [Intelligence Documentation] ///////////////////////*/ - -// Include: All constants. Also contains Get/Set/Delete Spawn In Conditions. -#include "J_INC_CONSTANTS" -// Sets effects. This doesn't have to be seperate, but I like it seperate. -#include "J_INC_SETEFFECTS" - -/******************************************************************************/ -// Combat include, spell effect/immune constants -/******************************************************************************/ -// Spell targets, note, have the least immunities, but these ARE set here... -// The spell target genrally is the best average lowest save, or a specific low -// save if we want to specify (and low SR). -// List (use Global to not conflict with the nwscript.nss!) -// - GlobalTargetImmunitiesHex -const int GlobalImmunityFear = 0x00000001; -const int GlobalImmunityNecromancy = 0x00000002; -const int GlobalImmunityMind = 0x00000004; -const int GlobalImmunityNegativeLevel = 0x00000008; -const int GlobalImmunityEntangle = 0x00000008; -const int GlobalImmunitySleep = 0x00000010; -const int GlobalImmunityPoison = 0x00000020; -const int GlobalImmunityDisease = 0x00000040; -const int GlobalImmunityDomination = 0x00000080; -const int GlobalImmunityStun = 0x00000100; -const int GlobalImmunityCurse = 0x00000200; -const int GlobalImmunityConfusion = 0x00000400; -const int GlobalImmunityBlindDeaf = 0x00000800; -const int GlobalImmunityDeath = 0x00000800; -const int GlobalImmunityNegativeEnergy = 0x00001000; -const int GlobalImmunityMantalProtection = 0x00002000; // Its own immunity, checked sometimes. -const int GlobalImmunityPetrify = 0x00004000; -//const int GlobalImmunityFlying = 0x00008000; // Earthquake ETC. -const int GlobalImmunitySlow = 0x00010000; - - /*************************** Globals set-up ******************************** - We set up all spells and categories, as well as all targets we may use (its - much easier than inputting countless entries into function headers). Any - sort of globals that are required are also added here - anything that would - pop up in more than one place, or would change from one or more event. - **************************** Globals set-up *******************************/ - -// OUR GLOBAL CONSTANTS -int GlobalIntelligence, GlobalOurHitDice, GlobalOurAC, - GlobalOurBaseAttackBonus, // Used and set for melee. USes GetBaseAttackBonus, as weapons are not set. - GlobalSilenceSoItems, // This is set to TRUE if we are affected with silence - // - meaning no proper spells! ALWAYS off if we have auto-silence. - GlobalInTimeStop,// This is used a LOT to see if we are in time stop - GlobalOurChosenClass, GlobalOurChosenClassLevel, // Our chosen class and level of it. - GlobalSpellAbilityModifier, GlobalSpellBaseSaveDC,// Spell globals - IE save DCs etc. - GlobalSaveStupidity, // This is 10 - Intelligence. Makes Save DC checks different - // for lower casters - they may cast even if the enemy always saves! - GlobalSpellPenetrationRoll, // SR penetration roll. - GlobalOurCurrentHP, GlobalOurMaxHP, GlobalOurPercentHP,// HP globals. - SRA, // "Spell range attacking", mage behavnOur, used for constant checking. - GlobalWeAreSorcerorBard,// Just is GetLevelByClass(CLASS_TYPE_SORCERER/BARD), - // but a global. With summoning, it won't summon a similar one if the old is at low HP - GlobalCanSummonSimilarLevel,// Checked for when set up. If a level over 0, we may - // Summon another spell monster at a similar level. - // The level is set when we cast a spell of it. - GlobalTimeStopArraySize, - GlobalLastSpellValid, // Random spells, if this is set to > 0, it casts it after random chances of others - GlobalRandomCastModifier,// Random casting, the extra % added - 2xIntelligence - GlobalWeAreBuffer; // Are we a spell buffer? AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS - - -// OUR GLOBAL TARGETS - -// Melee is actually ANY target we are attacking (depends on ranges and things). -// If OBJECT_INVALID (default) then we don't do the action! -object GlobalMeleeTarget, // Set from either a ranged or melee target :-) - GlobalRangedTarget, // Ranged target - GlobalSpellTarget, // Spell target - GlobalDispelTarget, // Used for breaching too - GlobalNearestEnemySeen, GlobalNearestEnemyHeard, - GlobalNearestSeenAlly, GlobalNearestAlly, - GlobalNearestLeader, - GlobalBuffAlly; - -// ENEMY/ALLY INTEGERS, VLAIDS ETC. - -// Counting etc...global integers - // Must be TRUE else we think there is no enemies to attack. -int GlobalAnyValidTargetObject, - // Counts of 0 or more - specifically in our line of sight. - GlobalEnemiesIn4Meters, GlobalTotalSeenHeardEnemies, - // Ranged/Melee Attackers. Ranged attackers = Attackers with bows. - GlobalMeleeAttackers, GlobalRangedAttackers, - // Total allies. We don't count ourselves. 1.4: Removed Total People, never needed! - GlobalTotalAllies, - // Average's - BAB, HDs. - GlobalAverageEnemyBAB, GlobalAverageEnemyHD, - GlobalAverageFriendlyHD, - // Melee target things... - GlobalMeleeTargetAC, - // Any VALID objects. GetIsObjectValid. - GlobalValidLeader, GlobalValidAlly, GlobalValidSeenAlly, - GlobalValidNearestSeenEnemy, GlobalValidNearestHeardEnemy, - // Dispel counter. Is 1-5. - GlobalDispelTargetHighestDispel, GlobalDispelTargetHighestBreach, - // Spell target globals. Used for one target, throughout the spells... - // - Saves - GlobalSpellTargetWill, GlobalSpellTargetFort, GlobalSpellTargetReflex, - // - Target HD, HP and race - GlobalSpellTargetHitDice, GlobalSpellTargetCurrentHitPoints, GlobalSpellTargetRace, - // - TRUE if seen can see spell target - GlobalSeenSpell, - // Special Spell things - friendly, hostile for spells (!GetIsReactionType, - // GetIsReactionType etc.). - GlobalFriendlyFireHostile, GlobalFriendlyFireFriendly, - // Spell target immunity hex - this is the only one not set to local integer - // for global effects. - GlobalTargetImmunitiesHex, - // If GlobalSpellTarget is immune to our spells VIA. Spell reistance or - // spell immunity, then hostile SPELL (not abilities) are not used. - // - This is a NUMBER - all <= X will NOT work against the enemy - GlobalNormalSpellsNoEffectLevel; - -// RANGES, Ie FLOATS :-) -float GlobalRangeToMeleeTarget, GlobalSpellTargetRange, GlobalRangeToNearestEnemy, - GlobalRangeToAlly, GlobalOurReach, GlobalRangeToFuthestEnemy, GlobalBuffRangeAddon; - -// New constant ACTION_MODE_ for "AI_SetMeleeMode()" default value. 0 and upwards -// are used. -const int ACTION_MODE_ALL_OFF = -1; - - /*************************** Functions to order **************************** - This should be empty each patch. If you start adding your own things, adding - them here makes changes easy to know about, if you like. I do, anyway :-P - **************************** Functions to order ***************************/ - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@ CORE AI FUNCTIONS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// Main call. It goes though many lines of code to decide what to do in combat -// To lengthy to explain here. Basically, input an object, it should attack -// it, or a better target. Define OnSpawn many behaviours to influence choice. -void AI_DetermineCombatRound(object oIntruder = OBJECT_INVALID); - -// These all have the pre-name AttemptX - as they can return TRUE or FALSE -//***************************** AttemptSpell *********************************** - -// Called from AI_AttemptAllSpells, this will run through the spell lists, until -// it casts on, else it will return FALSE. -// * nLowestSpellLevel - If it is set to more than 1, then all spells of that -// level and lower are just ignored. Used for dragons. Default 0. -// * nBABCheckHighestLevel - We check our BAB to see if attacking them would probably -// be a better thing to do. Default 3, it adds 5DC for each level. -// * bFirstRunThrough - used for personal spells (cast on us) like the ranged checks, for SRA. -// * bRangeLongValid etc - used for ranged spell attacking. bFirstRunThrough is a personal version. -// * bSingleSpellsFirst - Check AI_AttemptAllSpells(). -// See AI_AttemptAllSpells() for more info. -int AI_RunThroughSpells(int nLowestSpellLevel, int nBABCheckHighestLevel, int bSingleSpellsFirst, int bSingleSpellOverride, int bMultiSpellOverride, int bFirstRunThrough = TRUE, int bRangeLongValid = FALSE, int bRangeMediumValid = FALSE, int bRangeShortValid = FALSE, int bRangeTouchValid = FALSE); -// This will attempt to cast a spell from all the spells we know. -// It calls AI_RunThroughSpells() to work. -// * nLowestSpellLevel - If it is set to more than 1, then all spells of that -// level and lower are just ignored. Used for dragons. Default 0. -// * nBABCheckHighestLevel - We check our BAB to see if attacking them would probably -// be a better thing to do. Default 3, it adds 5DC for each level. -// NOTE 1: If GlobalItemsOnly is set, we only check for item talents! -// NOTE 2: It uses the SAME target, but for ranged attacking, we use a float range to check range :-) -int AI_AttemptAllSpells(int nLowestSpellLevel = 0, int nBABCheckHighestLevel = 3); -// Returns TRUE if we counterspell a counter spell target, only does it -// if we have Dispels, and if set to want to be in a group, we are in one :-) -int AI_AttemptCounterSpell(); -//***************************** AttemptSpell *********************************** - -//***************************** AttemptAttack ********************************** - -// Used to attack. Called from AI_AttemptMeleeAttackWrapper -// We do this after we buff up with potions, and so on. -// 1 - Checks our global ranged/melee targets, range too, equips weapons. -// 2 - Checks for a feat to use (IE ranged, called shot ETC, else knockdown ETC). -// 3 - Else normal attack the target, if no feat. -int AI_EquipAndAttack(); -// Used to attack. Called in determine conbat round. -// Wrappers the function AI_EquipAndAttack(), and therefore debug codes. -int AI_AttemptMeleeAttackWrapper(); -// This will: -// - Get the nearest dying PC and kill them off. -// - Use the lowest HP person, and kill them off. -// - Also will check for anyone with the sleep effect, to try and Coup de Grace. -// Requires high Intelligence, And so on, of course. -int AI_AttemptGoForTheKill(); -// We will, normally, use a breath weapon, and if we want to, wing buffet -// It does cast high level spells, using AttemptSpellAllSpells, with -// level 9 ones more often than level 5-7, and 8 are somewhat used :-) -int AI_AttemptDragonCombat(); -// Either the chosen class is a dragon, or the appearance type is a dragon type, -// we return TRUE. -int AI_GetIsDragon(); - -// Beholders have special rays for eyes. This is used if the setting is set -// on spawn for beholders, or if the appearance is a beholder. -int AI_AttemptBeholderCombat(); -// Beholder teleport attempt. Flees from combat. -int AI_ActionBeholderTeleport(); -// Taken from x2_ai_mflayer. -// Bioware's implimenation of the Mind Suck. -void MindFlayerSuck(object oTarget); -// Illithid Use special attacks. -// This is set on spawn, or by the user on spawn. -int AI_AttemptMindflayerCombat(); -//***************************** AttemptAttack ********************************** - -//****************************** AttemptFeat *********************************** - -// Turning will be attempted in this function. It checks if we have any turning -// left, then will check if we want to turn (we don't turn every round constantly) -// then we check for creatures to turn - if there are any, we turn undead. -int AI_AttemptFeatTurning(); -// This will use bard song, or damage with curse song! Both have special -// cases for the deafness and silence (introduced in later patches) and some -// other stuff. -int AI_AttemptFeatBardSong(); -// Runs through summoning a familiar - uses the feat if it has it. -// INCLUDES companion as well! Will attack at range with a bow if possible. -int AI_AttemptFeatSummonFamiliar(); -// This uses the best combat feat or spell it can, such as barbarian rage, divine power, -// bulls strength and so on. Spells may depend on melee enemy, or HD, or both, or range of enemy. -// Target is used for race's ect. -int AI_AttemptFeatCombatHostile(); -//****************************** AttemptFeat *********************************** - -//**************************** AttemptSpecial ********************************** - -// This will fire any aura's they have, quickened cast, and added to the top of -// thier action queue. -void AI_ActionAbilityAura(); -// This will check if we do not have nSpellID's effects, have got nSpellID, and -// cheat-instant cast the spell if we do. This means that we can use it unlimited -// times (incase it gets dnSpelled!) -void AI_AttemptCastAuraSpell(int nSpellID); -// Runs though several basic checks. True, if any are performed -// 1 - Darkness. If so, dispel (inc. Ultravision) or move out (INT>=4) -// 2 - AOE spells. Move away from enemy if got effects (more so if no one near) (INT>=3) -// 3 - If invisible, need to move away from any combations. (INT>=6) -// - Returns TRUE if we did anything that would mean we don't want to do -// another action -int AI_AttemptSpecialChecks(); -// This is a good check against the enemies (highest AC one) Damage against concentration -// Also, based on allies, enemies, and things, may move back (random chance, bigger with -// more bad things, like no stoneskins, no invisibility etc.) -// We will do this more at mid-intelligence, and better checks at most intelligence. -// * Not used on spells which require no requirement (EG: pulses ETC) -int AI_AttemptConcentrationCheck(object oTarget); -// This may make the archer retreat - if they are set to, and have a ranged weapon -// and don't have point blank shot, and has a nearby ally. (INT>=1 if set to does it more if higher). -int AI_AttemptArcherRetreat(); -// Will polymorph Self if not already so. Will return TRUE if it casts best on self. -int AI_AttemptPolyMorph(); -// This will cheat-cast nSpell at oTarget. Note that we will know if we have it -// by checking what appearance we have. -void AI_ActionCastShifterSpell(int nSpell, object oTarget = OBJECT_SELF); -//**************************** AttemptSpecial ********************************** - -//**************************** AttemptSkills *********************************** - -// This will use empathy, taunt, and if set, pickpocketing. Most are random, and -// checks are made.Heal is done in healing functions.Done against best melee target, -// or closest seen/heard. -int AI_AttemptHostileSkills(); -// Uses iSkill on GlobalMeleeTarget -// - Fired from AI_AttemptHostileSkills. -void AI_ActionUseSkillOnMeleeTarget(int iSkill); -//**************************** AttemptSkills *********************************** - -//**************************** AttemptMorale *********************************** - -// Fleeing - set OnSpawn for setup. Uses a WILL save! -// - Bonuses in groups -// - May go get help -// - Won't run on a CR/HD threshold. -// - Leaders help! And all is intelligence based. -// Includes commoners fleeing -int AI_AttemptMoraleFlee(); -// Forces the AI to flee from the nearest enemy, or away from our position at least -void AI_ActionFleeScared(); -//**************************** AttemptMorale *********************************** - -//******************************** Other *************************************** -// Sets a value, 1-5, for what we can Dispel. Also sets a 1-5 value for breach spells. -// The values are NOT, I repeat NOT what the spell level are. Generally, they -// class spell-stopping spells as a higher prioritory to Dispel! -// * 5 - Dispeled before hostile spells are cast at target -// * 4 - Dispeled just before level 7 or so spells. -// * 3 - Dispeled just before level 4 or so spells -// * 2 - Dispeled just before level 2 or so spells. -// * 1 - Lowest prioritory - Dispeled at the end. -// There are NO cantrips included (level 0 spells). -// - Targets GlobalDispelTarget -void AI_SetDispelableEnchantments(); -// Returns a dismissal target - a target with a master, and they -// are a Familiar, Animal companion or summon. -// - Nearest one in 10 M. Seen ones only. -object AI_GetDismissalTarget(); -// This will run through most avalible protections spells. -// - TRUE if we cast any. -// Used when invisible to protect before we break the invisibility. -// - We may cast many on allies too -int AI_ActionCastWhenInvisible(); -// This will loop seen allies in a cirtain distance, and get the first one without -// the spells effects of nSpell1 to nSpell4 (and do not have the spells). -// - Quite expensive loop. Only used if we have the spell (nSpellToUse1+) -// in the first place (no items!) and not the timer which stops it for a few rounds (on nSpellToUse1) -// - TRUE if it casts its any of nSpellToUseX's. -// * It has only a % chance to cast if GlobalWeAreBuffer is not TRUE. -int AI_ActionCastAllyBuffSpell(float fMaxRange, int nPercent, int nSpellToUse1, int nSpellToUse2 = AI_SPELL_INVALID, int nSpellToUse3 = AI_SPELL_INVALID, int nSpellToUse4 = AI_SPELL_INVALID, int nSpellOther1 = AI_SPELL_INVALID, int nSpellOther2 = AI_SPELL_INVALID); -// This will shout, maybe, some commands to allies. Or just command them! -void AI_ActionLeaderActions(); -// Dispels or moves out of the oAOE. -// - If we have >= nMax AND <= nDamage HP... -// AND under nPercent total HP... -// - We Dispel, or move out of the AOE. Move if friendly. -// - Use local object set to nSpell, which should be the nearest of the spell. -int AI_ActionDispelAOE(int nSpell, int bDamageOnly, float fRange, int nDamage, int nMax, int nPercent); -// Casts the breach range of spells on GlobalDispelTarget. TRUE if any are cast. -int AI_ActionCastBreach(); -// Casts the dispel range of spells on GlobalDispelTarget. TRUE if any are cast. -int AI_ActionCastDispel(); -// This wrappers AI_ActionCastBreach() and AI_ActionCastDispel(). Input -// nValue for 1 (Lowest priority) to 5, to see if we'll use them. Returns -// TRUE if any are cast. -int AI_ActionAttemptDispel(int nValue, int bRangeMediumValid); -// Wrappers Premonition, Greater Stoneskin and Stoneskin. -// Includes Shades Stoneskin too. SPELL_SHADES_STONESKIN -// - nLowest - 8 = Prem, 6 = Greater, 4 = Stoneskin -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) -int AI_SpellWrapperPhisicalProtections(int nLowest = 1); -// Wrappers Energy Buffer, Protection From Elements, Resist Elements, Endure elements -// - nLowest - Goes 5, 3, 2, 1. -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections) -int AI_SpellWrapperElementalProtections(int nLowest = 1); -// Wrappers Haste and Mass Haste. -// - nLowest - 6 = Mass, 3 = Haste -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) -int AI_SpellWrapperHasteEnchantments(int nLowest = 1); -// Wrappers Shadow Shield, Ethereal Visage and Ghostly Visage. -// Includes Greater Shadow Conjuration Ghostly Visage (SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE -// - nLowest - 7 = Shadow, 6 = Ethereal 2 = Ghostly -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasVisageProtections) -int AI_SpellWrapperVisageProtections(int nLowest = 1); -// Wrappers All Mantals (Greater, Normal, Lesser) (Spell Mantals) -// - nLowest - 9 = Greater, 7 = Normal. 5 = Lesser -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasMantalProtections) -int AI_SpellWrapperMantalProtections(int nLowest = 1); -// Wrappers All Globes (Greater, Shadow Conjuration, Minor) -// - nLowest - 6 = Greater, 4 = Shadow/Minor -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasGlobeProtections) -int AI_SpellWrapperGlobeProtections(int nLowest = 1); -// Wrappers All Shields - Elemental Shield, Wounding Whispers -// - nLowest - 4 = Elemental, 3 = Wounding, Acid Sheath, 2 = Death Armor. -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasElementalShieldSpell) -int AI_SpellWrapperShieldProtections(int nLowest = 1); -// Wrappers All Mind resistance spells - Mind blank, Lesser and Clarity. bioware likes 3's... -// - nLowest - 8 = Mind Blank, 5 = Lesser, 2 = Clarity -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasMindResistanceProtections) -int AI_SpellWrapperMindResistanceProtections(int nLowest = 1); -// Wrappers All Consealment spells - Improved Invisiblity. Displacement. -// - nLowest - 4 = Improved Invisiblit, 3 = Displacement -// - Checks !AI_GetAIHaveEffect(GlobalEffectInvisible, oTarget) && !AI_GetAIHaveSpellsEffect(GlobalHasConsealmentSpells, oTarget) -int AI_SpellWrapperConsealmentEnhancements(object oTarget, int nLowest = 1); -// Shades darkness, assassin feat, normal spell. -int AI_SpellWrapperDarknessSpells(object oTarget); -// Invisibility spells + feats -int AI_SpellWrapperNormalInvisibilitySpells(); -//******************************** Other *************************************** - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@ HEALING FUNCTIONS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -//*************************** AttemptHealing *********************************** -// If our current HP is under the percent given, it will check things to heal itself, and use them. -// Used for animals ETC as well. They just don't use potions. -// This will also check levels, for appropriate healing. -// Set nMyHD to higher to use lower level spells. -// * Will un-polymorph if we are heavily damaged and can heal ourselves. -int AI_AttemptHealingSelf(); -// Raises dead, and casts healing spells to heal allies. -// Leaders are checked first. -int AI_AttemptHealingAlly(); -// This will heal oTarget using the best spell it can, even ones it can -// spontaeously cast. -// - Just does best spell. -// - May use spontaneous ones as well. :-) -// - Called from AI_AttemptHealing_Self and AI_AttemptHealing_Ally -// * bPotionsValid is only used if oTarget is OBJECT_SELF, IE: We put it in, so -// not to use potions as an invalid race. if oTarget != OBJECT_SELF, it is ignored -int AI_ActionHealObject(object oTarget, int bPotionsValid = FALSE); -// Heals oTarget using undead negative energy type spells -// More basic then the normal healing routines. -// TRUE if it casts anything. -int AI_ActionHealUndeadObject(object oTarget); -// Uses spells to cure conditions. Needs to be checked fully -// - Uses allies own integers to check thier effects -// - Loops spells (Best => worst) and if we havn't cast it in an amount of time -// we check effects (Us, leader, allies seen) until we find someone (nearest) -// who we can cast it on. -int AI_AttemptCureCondition(); -// Get the nearest seen ally creature with the effect. -// - Checks us first -// - Then checks leader -// - Then loops seen allies within 20M. -// See: AI_AttemptCureCondition -object AI_GetNearestAllyWithEffect(int nEffectHex); -// Returns the nearest ally with nMin effects, and X more based on HD. -// - Checks us first. True if (HD/6) Effects and (nMin - 1) effects -// - Checks leader next. True if (HD/5) Effects and (nMin - 2) effects -// - Checks allies after. True if (HD/4) Effects and (nMin) effects -object AI_GetNearestAllyWithRestoreEffects(int nMin); - -// This will return the best spontaeous healing spell, so: -// * It uses just normal GetHasSpell for the clerical healing spells. -int AI_GetBestSpontaeousHealingSpell(); - -//*************************** AttemptHealing *********************************** - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@ TARGETING & ACTUAL ACTION FUNCTIONS @@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -// Actions are ActionX - -//*************************** ActionsSpells ************************************ - -// Special case - it checks the talent again, in silence (if not already so) and -// uses the item, if it is an equal talent. -// - Will call a Shile Equip -// Returns TRUE if we did find the right talent, and it was cast. -int AI_ActionCastItemEqualTo(object oTarget, int nSpellID, int bLocation); -// This attempts to check the talent TALENT_CATEGORY_HARMFUL_RANGED, 2, which -// holds grenades. Easy checks. -// - TRUE if they fire a grenade. -int AI_AttemptGrenadeThrowing(object oTarget); -// This will cast the spell of ID in this order [Note: Always adds to time stop, as it will be on self, and benifical): -// 1. If they have the spell normally. -// * We always attack with a bow at ranged, but may attack normally after the spell. -// * If nRequirement is 0, it is considered innate. -// * If bSubspell is TRUE, we will cheat-cast and derement it. -int AI_ActionCastSpell(int nSpellID, object oTarget = OBJECT_SELF, int nRequirement = 0, int bLocation = FALSE, int bSubSpell = FALSE); -// This is used for INFLICT/CURE spells, as GetHasSpell also can return 1+ for -// any extra castings - like if we had 2 light wounds and 2 blesses, it'd return -// 4. -// This, when cast, removes one of the spell being cast, after cheat casting it. -// - DecrementRemainingSpells will work this way quite well, but no choice in -// what to remove, it is faster then 1.3 beta which modified the spell scripts. -int AI_ActionCastSpontaeousSpell(int nSpellID, object oTarget); -// This will cast the spell of ID in this order [Note: Always adds to time stop, as it will be on self, and benifical): -// 0. If d100() is <= nRandom. -// 1. If they have the spell normally -// 2. If they have an item with the spell. -// 3. If they have a potion of the right type. -// - If we are at range from nearest enemy, we attack with a ranged weapon, else do nothing more. -// - If nTalent is -1, we do not check items. -// - Sets GlobalLastSpellValid to nSpellID if we can cast it, but don't randomly. -int AI_ActionCastSpellRandom(int nSpellID, int nRandom, object oTarget = OBJECT_SELF, int nRequirement = 0, int bLocation = FALSE); -// This will cast the spell/feat nSpellId (Or with nFeat), depending if it is a spell or a feat, -// at the summon location chosen before. Works similar to normal spells but -// at a special location. -// * If it is a feat, we use nFeat to define the feat, and nSpellId to define the -// spellability to use. -// * If nRequirement is -1, it is a feat. If 0, it is innate (as spells) -int AI_ActionCastSummonSpell(int nSpellId, int nRequirement = 0, int nSummonLevel = 0, int nFeat = 0); -// This willcast nFirst -> nFirst + nAmount polymorph spell. It will check -// if we have nMaster (Either by feat or spell, depending on bFeat). -// TRUE if we polymorph. -// * Only decrements if bRemove is TRUE -int AI_ActionPolymorph(int nMaster, int nFirstSpell, int nAmount, int bFeat = FALSE, int bRemove = TRUE); - -// Used with GlobalLastSpellValid. If GlobalLastSpellValid is 0, sets locals for -// use later, and sets GlobalLastSpellValid to the spell in question. -void AI_SetBackupCastingSpellValues(int nSpellID, object oTarget, int bLocation, int nRequirement); -// This will used a stored GlobalLastSpellValid to see if it should cast that -// spell (or attempt to!) as a backup. Uses stored targets from when it did know -// it was valid. -int AI_ActionCastBackupRandomSpell(); - -// If they have nFeat, they cheat-cast nSpell at oTarget. -// - This is a workaround for any feat, which acts as a spell, IE: A spell like feat, -// (a feat with casting times and so on) and more importantly, also will cast -// the nSpell if they have it anyway! so is useful for any feat.2da which -// references the spells.2da for its effects. -// 1.4: Added the fact they can be normal spells. -int AI_ActionUseSpellLikeFeat(int nFeat, int nSpell, object oTarget = OBJECT_SELF); -// Wrappers action Use Talent with debug string -// * Used in healing, to cast "Heal" range before other healing spells. -// Might well remove! -void AI_ActionUseTalentDebug(talent tChosenTalent, object oTarget); -// Wrapper to check all dragon breaths, against oTarget -int AI_ActionDragonBreath(object oTarget, int nWingCounter); -// Uses tBreath if they are not immune -// - TRUE if used. -int AI_ActionUseBreath(object oTarget, talent tBreath, int nSpellID); -// This tests breath attacks or the use of the Wing Buffet, randomised each round -// and not used constantly. -// * oTarget - target to breath on (ouch, bad breath!) -int AI_DragonBreathOrWing(object oTarget); - -// Only TRUE if we have a flee object. -// - Uses sArray to debug and speak -int AI_ActionFlee(string sArray); -//*************************** ActionsSpells ************************************ - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@ ALL INFO FUNCTIONS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -// Equips the best shield we have. -// - Used before we cast a spell so casters can gain maximum AC. -void AI_EquipBestShield(); -// Turns on/off all melee things (not stealth or search!) but not nMode. -// * Use ACTION_MODE_ALL_OFF if you want all things off. -void AI_SetMeleeMode(int nMode = ACTION_MODE_ALL_OFF); - -// GETTING ENEMY INFO - -// We set up targets to Global* variables, GlobalSpellTarget, GlobalRangeTarget, -// and GlobalMeleeTarget. Counts enemies, and so on. -// - Uses oIntruder (to attack or move near) if anything. -// - We return TRUE if it ActionAttack's, or moves to an enemy - basically -// that we cannot do an action, but shouldn't search. False if normal. -int AI_SetUpAllObjects(object oInputBackup); -// This sets up US, the user! :-) -// - Determines class to use, dragon or not. -// - And some other things that don't need to check allies/enemies for. -// - Intelligence and so on, global effects of us and so on ;-) -void AI_SetUpUs(); -// Sets up all our effects, ones to heal as well. -void AI_SetUpUsEffects(); -// Using the array ARRAY_ENEMY_RANGE, we return a % of seen/heard people who -// DO have any of the spells which see through the invisiblity spells. -// * nLimit - when we get to this number of people who have invisiblity, we stop and return 100% -// If ANY of the people are attacking us and have the effect, we return +30% for each. -int AI_GetSpellWhoCanSeeInvis(int nLimit); - -// Returns the object to the specifications: -// * fRange - Within fRange (fTouchRange 2.25, fShortRange 8.0, fMediumRange 20.0, fLongRange = 40.0) -// * fSpread - Radius Size - RADIUS_SIZE_* constants (1.67 to 10.0M) -// * nLevel - Used for saving throws/globe checks. Level of the spell added to save checks -// * nSaveType = FALSE - SAVING_THROW_FORT/REFLEX/WILL. Not type, but the main save applied with it. -// * nShape = SHAPE_SPHERE - SHAPE_* constants. -// * bFriendlyFire = FALSE - Can this hurt allies? Best thing is to put -// GlobalFriendlyFireHostile - GetIsReactionTypeHostile(oTarget) == TRUE -// GlobalFriendlyFireFriendly - GetIsReactionTypeFriendly(oTarget) == FALSE -// FALSE - Cannot hurt allies (GetIsEnemy/!GetIsFriend used) -// * bDeathImmune = FALSE - Does it use a death save? (!GetIsImmune) -// * bNecromanticSpell = FALSE - Is it a necromancy spell? Undead are also checked in this. -object AI_GetBestAreaSpellTarget(float fRange, float fSpread, int nLevel, int nSaveType = FALSE, int nShape = SHAPE_SPHERE, int bFriendlyFire = FALSE, int bDeathImmune = FALSE, int bNecromanticSpell = FALSE); - -// Gets an approprate summoning location. If we are set to summon better, we -// should get a good location between us and an enemy, else, it'll just return -// our location. -location AI_GetSummonLocation(); - -// Returns the object to the specifications: -// Within nRange (float) -// The most targets around the creature in nRange, in nSpread. -// Can be the caster, of course -//object AI_GetBestFriendyAreaSpellTarget(float fRange, float fSpread, int nShape = SHAPE_SPHERE); - -// Returns 1-4 for tiny-huge weapons. Used for disarm etc. -int AI_GetWeaponSize(object oItem); -// This returns TRUE if the target will always resist the spell given the parameters. -// - Uses GlobalOurChosenClassLevel for our level check. -int AI_SpellResistanceImmune(object oTarget); -// If the target will always save against nSaveType, and will take no damage, returns TRUE -// * Target is GlobalSpellTarget. Save is GlobalSpellTargetWill ETC. -// * nSaveType - SAVING_THROW WILL/REFLEX/FORTITUDE -// * nSpellLevel - Level of the spell being cast. -int AI_SaveImmuneSpellTarget(int nSaveType, int nSpellLevel); -// If the target will always save against nSaveType, and will take no damage, returns TRUE -// * oTarget - who saving against spell. -// * nSaveType - SAVING_THROW WILL/REFLEX/FORTITUDE -// * The save used is GetReflexSavingThrow* ETC. -// * nSpellLevel - Level of the spell being cast. -int AI_SaveImmuneAOE(object oTarget, int nSaveType, int nSpellLevel); -// Gets the percent, of X vs Y, nNumber/nTotal * 100 = %. -int AI_GetPercentOf(int nNumber, int nTotal); -// This returns a number, 1-4. This number is the levels -// of spell they will be totally immune to. -int AI_GetSpellLevelEffect(object oTarget); -// Input oTarget and nLevel and it will check if they are automatically -// immune to the spell being cast. -int AI_GetSpellLevelEffectAOE(object oTarget, int nLevel = 9); -// Returns TRUE if any of the checks the oGroupTarget is immune to. -int AI_AOEDeathNecroCheck(object oGroupTarget, int bNecromanticSpell, int bDeathImmune); -// Returns the healing "Rank" of nSpellId (made up by me) which the spell is. -// Used in healing, Heal (+Mass Heal) is done seperatly in the healing routines. -// * Returns a default of 0 if no valid healing spell is found (Or was a Heal spell) -// * Use bSelf to be TRUE if you want to include "Cure Other" spells in Hordes -int AI_GetHealingSpellRank(int nSpellId, int bSelf = FALSE); -// This will return the average amount healed by nSpellId, determined as if they -// were the minimum level used to cast it, and average rolls were performed. -// * Used in healing to check if we should bother using the spell yet, eg: -// a 50HP person with a ciritical wounds potion might take it at 10HP, not 25HP, -// because it heals a lot. -int AI_GetHealingSpellPower(int nSpellId); -// TRUE if the spell is one recorded as being cast before in time stop. -// - Checks Global "Are we in time stop?" and returns FALSE if not in time stop -int AI_CompareTimeStopStored(int nSpell1, int nSpell2 = AI_SPELL_INVALID, int nSpell3 = AI_SPELL_INVALID, int nSpell4 = AI_SPELL_INVALID); -// Sets the spell to be stored in our time stop array. -void AI_SetTimeStopStored(int nSpell); -// Deletes all time stopped stored numbers. -void AI_DeleteTimeStopStored(); -// Sets the Global Hex for the enemy spell target immunties. -// 7+ Intelligence also uses GetIsImmune. -// The target is GlobalSpellTarget. -// - Uses effects loop and GetIsImmune to comprehend the most. -void AI_SortSpellImmunities(); -// This will, in most occasion, ClearAllActions. -// If it does NOT, it returns FALSE, if we are doing something more important, -// and we perform that action again (or carry on doing it). -// - This also sets shadowdancer hiding if no one has trueseeing nearby -int AI_StopWhatWeAreDoing(); -// Turn of hiding if turn of timer is on, and turn of searching if it is -// active. -// This should be called before any action using a feat, spell or similar, if -// we need to move. -void AI_ActionTurnOffHiding(); - -// Simple return TRUE if it matches hex GlobalTargetImmunitiesHex -int AI_GetSpellTargetImmunity(int nImmunityHex); -// Sets nImmunityHex to GlobalTargetImmunitiesHex. -void AI_SetSpellTargetImmunity(int nImmunityHex); - -// This returns an object, not seen not heard ally, who we -// might flee to. Uses a loop, and runs only when we are going to flee for sure. -object AI_GetNearbyFleeObject(); -// This returns the best primary or secondary weapon from sArray. -// It actually returns the number value, IE the place it is at. Easy to get all info from there. -// - Use nType... -// - 0 = Highest Value :-) -// - 1 = Highest Damage -// - 2 = Biggest -// - 3 = Smallest -int AI_GetWeaponArray(string sArray, object oCannotBe = OBJECT_INVALID, int nType = 0); -// Just sorts out sOriginalArrayName to sNewArrayName based on range only. -// - Also sets maxint to MAXINT_ + sNewArrayName -// - Closest to futhest -void AI_TargetingArrayDistanceStore(string sOriginalArrayName, string sNewArrayName); -// Just sorts out sOriginalArrayName to sNewArrayName based on nType. -// nType 1 = AC, nType 2 = Total Saves, nType 3 = Phisical Protections, -// nType 4 = BAB, nType 5 = Hit Dice, nType 6 = Percent HP, nType 7 = Current HP, -// nType 8 = Maximum HP. 9 = Attacking us or not. 10 = Is a PC. -void AI_TargetingArrayIntegerStore(int nType, string sOriginalArrayName); -// This sets ARRAY_TEMP_ARRAY of integer values to sNewArrayName. -// - nTypeOfTarget, used TARGET_LOWER, TARGET_HIGHER. -// - We work until nMinimum is filled, or we get to nMinimum and we get to -// a target with value > iInputMinimum. (20 - 25 > X?) -// Returns the amount of targets set in sNewArrayName. -int AI_TargetingArrayLimitTargets(string sNewArrayName, int nTypeOfTarget, int iInputMinLimit, int nMinLoop, int nMaxLoop); -// This sets ARRAY_TEMP_ARRAY of float values to sNewArrayName. -// - nTypeOfTarget, used TARGET_LOWER, TARGET_HIGHER. -// - We work until nMinimum is filled, or we get to nMinimum and we get to -// a target with value > iInputMinimum. (20.0 - 25.0 > X?) -// Returns the amount of targets set in sNewArrayName. -int AI_TargetingArrayLimitTargetsFloat(string sNewArrayName, int nTypeOfTarget, float fInputMinLimit, int nMinLoop, int nMaxLoop); -// Deletes all FLoats, Integers and Objects set to sArray for valid -// objects got by GetLocalObject to sArray. -void AI_TargetingArrayDelete(string sArray); -// Check if oTarget is: -// - Dead, Petrified, AI Ignore ON, A DM, Invalid -// - Not: Seen or heard (IE: We cannot see or hear them) -// Returns: TRUE if it is SANE to attack oTarget -// Returns: FALSE if oTarget is currently ethereal. That is handled in a seperate place. -int AI_GetTargetSanityCheck(object oTarget); - -/*:://///////////////////////////////////////////// -//:: Name: AI_SetSpellTargetImmunity, AI_GetSpellTargetImmunity -//:://///////////////////////////////////////////// - Immunity settings for spells. -//:://///////////////////////////////////////////*/ - -// Simple return TRUE if it matches hex. -// - Uses GlobalSpellTarget for target object -int AI_GetSpellTargetImmunity(int nImmunityHex) -{ - return (GlobalTargetImmunitiesHex & nImmunityHex); -} -// Sets nImmunityHex to GlobalTargetImmunitiesHex. -void AI_SetSpellTargetImmunity(int nImmunityHex) -{ - GlobalTargetImmunitiesHex = GlobalTargetImmunitiesHex | nImmunityHex; -} -/*:://///////////////////////////////////////////// -//:: Name: AI_SetUpUsEffects -//:://///////////////////////////////////////////// - Sets up the effects. Used before the uncommandable, so we - know if we are or not! (EG stun) -//:://///////////////////////////////////////////*/ -void AI_SetUpUsEffects() -{ - // Set locals and whatever on self. - AI_SetEffectsOnTarget(); - // Set global time stop - GlobalInTimeStop = AI_GetAIHaveEffect(GlobalEffectTimestop); -} -// Gets the percent, of X vs Y, nNumber/nTotal * 100 = %. -int AI_GetPercentOf(int nNumber, int nTotal) -{ - return FloatToInt((IntToFloat(nNumber)/IntToFloat(nTotal)) * 100); -} -/*:://///////////////////////////////////////////// -//:: Name: AI_SetTimeStopStored -//:://///////////////////////////////////////////// - Sets the spell to be stored in our time stop array. -//:://///////////////////////////////////////////*/ -void AI_SetTimeStopStored(int nSpell) -{ - // Time stop check - if(!GlobalInTimeStop) return; - if(GlobalTimeStopArraySize < 0) - { - GlobalTimeStopArraySize = 1;// Size is now 1 - SetAIConstant(TIME_STOP_LAST_ + IntToString(1), nSpell); - SetAIInteger(TIME_STOP_LAST_ARRAY_SIZE, GlobalTimeStopArraySize); - } - else if(GlobalTimeStopArraySize == 0) - { - GlobalTimeStopArraySize = GetAIInteger(TIME_STOP_LAST_ARRAY_SIZE); - GlobalTimeStopArraySize++; - SetAIConstant(TIME_STOP_LAST_ + IntToString(GlobalTimeStopArraySize), nSpell); - SetAIInteger(TIME_STOP_LAST_ARRAY_SIZE, GlobalTimeStopArraySize); - } - else // Is over 0 - { - GlobalTimeStopArraySize++; - SetAIConstant(TIME_STOP_LAST_ + IntToString(GlobalTimeStopArraySize), nSpell); - SetAIInteger(TIME_STOP_LAST_ARRAY_SIZE, GlobalTimeStopArraySize); - } -} -/*:://///////////////////////////////////////////// -//:: Name: DeleteTimeStopStored -//:://///////////////////////////////////////////// - Deletes all time stopped stored numbers. -//:://///////////////////////////////////////////*/ -void AI_DeleteTimeStopStored() -{ - GlobalTimeStopArraySize = GetAIInteger(TIME_STOP_LAST_ARRAY_SIZE); - if(GlobalTimeStopArraySize) - { - int nCnt; - for(nCnt = 1; nCnt <= GlobalTimeStopArraySize; nCnt++) - { - DeleteAIConstant(TIME_STOP_LAST_ + IntToString(nCnt)); - } - } - DeleteAIInteger(TIME_STOP_LAST_ARRAY_SIZE); - GlobalTimeStopArraySize = -1; -} -/*:://///////////////////////////////////////////// -//:: Name: GetWeaponSize -//:://///////////////////////////////////////////// - Returns 1-4 for tiny-huge weapons. Used for disarm etc. -//::////////////////////////////////////////////*/ -int AI_GetWeaponSize(object oItem) -{ - // Ignore invalid weapons - if(!GetIsObjectValid(oItem)) return FALSE; - - // Returns shields as 0, the default return value of weapons not found in - // this. - switch(GetBaseItemType(oItem)) - { - // Tiny - // 22, 42, 59. - case BASE_ITEM_DAGGER: - case BASE_ITEM_KUKRI: - case BASE_ITEM_SHURIKEN: - return 1;// WEAPON_SIZE_TINY - break; - // Small - // 0, 7, 9, 14, 31, 37, 38, 40, 60, 61, 63 - case BASE_ITEM_SHORTSWORD: - case BASE_ITEM_LIGHTCROSSBOW: - case BASE_ITEM_LIGHTMACE: - case BASE_ITEM_DART: - case BASE_ITEM_LIGHTHAMMER: - case BASE_ITEM_HANDAXE: - case BASE_ITEM_KAMA: - case BASE_ITEM_SICKLE: - case BASE_ITEM_SLING: - case BASE_ITEM_THROWINGAXE: - case BASE_ITEM_WHIP: // Hordes - return 2;// WEAPON_SIZE_SMALL - break; - // Medium - // 1, 2, 3, 4, 5, 6, 11, 28, 41, 47, 51, 53, 56 - case BASE_ITEM_LONGSWORD: - case BASE_ITEM_BATTLEAXE: - case BASE_ITEM_BASTARDSWORD: - case BASE_ITEM_LIGHTFLAIL: - case BASE_ITEM_WARHAMMER: - case BASE_ITEM_HEAVYCROSSBOW: - case BASE_ITEM_SHORTBOW: - case BASE_ITEM_CLUB: - case BASE_ITEM_KATANA: - case BASE_ITEM_MORNINGSTAR: - case BASE_ITEM_RAPIER: - case BASE_ITEM_SCIMITAR: - case BASE_ITEM_DWARVENWARAXE: // Hordes - return 3;// WEAPON_SIZE_MEDIUM; - break; - // Large weapons - // 8, 10, 12, 13, 18, 32, 33, 35, 45, 50, 55, 57, 58 - case BASE_ITEM_LONGBOW: - case BASE_ITEM_HALBERD: - case BASE_ITEM_TWOBLADEDSWORD: - case BASE_ITEM_GREATSWORD: - case BASE_ITEM_GREATAXE: - case BASE_ITEM_DIREMACE: - case BASE_ITEM_DOUBLEAXE: - case BASE_ITEM_HEAVYFLAIL: - case BASE_ITEM_MAGICSTAFF: - case BASE_ITEM_QUARTERSTAFF: - case BASE_ITEM_SCYTHE: - case BASE_ITEM_SHORTSPEAR: - return 4;// WEAPON_SIZE_LARGE; - break; - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name AI_GetWeaponArray -//:://///////////////////////////////////////////// - This returns the best primary or secondary weapon from sArray. - It actually returns the number value, IE the place it is at. Easy to get all info from there. - - Use nType... - - 0 = Highest Value :-) - - 1 = Highest Damage - - 2 = Biggest - - 3 = Smallest -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -int AI_GetWeaponArray(string sArray, object oCannotBe = OBJECT_INVALID, int nType = 0) -{ - int nMax = GetLocalInt(OBJECT_SELF, MAXINT_ + sArray); - int nCnt, nReturn, nLastValue, nCurrentValue; - string sCurrentName; - object oCurrentWeapon; - if(nMax) - { - for(nCnt = 1; nCnt <= nMax; nCnt++) // uses: "break;" to break early. - { - sCurrentName = sArray + IntToString(nCnt); - oCurrentWeapon = GetLocalObject(OBJECT_SELF, sCurrentName);// Object - if(GetIsObjectValid(oCurrentWeapon) && - oCurrentWeapon != oCannotBe) - { - // Highest value (But cannot be oCannotBe of course) - if(nType == 0) - { - nReturn = nCnt;// It is highest to lowest value anyway - break; - } - // 1 = Highest Damage - else if(nType == 1) - { - // Get the current item value - the damage done by a weapon - nCurrentValue = GetLocalInt(OBJECT_SELF, sCurrentName + WEAP_DAMAGE); - // > because if only equal, one was higher value - if(nCurrentValue > nLastValue) - { - nLastValue = nCurrentValue; - nReturn = nCnt; - } - } - // 2 = Biggest - // 3 = Smallest - else - { - // Get the current item value - that is, the size value - nCurrentValue = GetLocalInt(OBJECT_SELF, sCurrentName + WEAP_SIZE); - // Biggest weapon first (Primary weapon usually) - if(nType == 2) - { - if(nCurrentValue > nLastValue)// > because if only equal, one was higher value - { - nLastValue = nCurrentValue; - nReturn = nCnt; - } - } - // Smallest weapon first (Off-hand weapon ususally) - else // if(nType == 3) - { - if(nCurrentValue < nLastValue)// > because if only equal, one was higher value - { - nLastValue = nCurrentValue; - nReturn = nCnt; - } - } - } - } - } - } - return nReturn; -} -// Equips the best shield we have. -// - Used before we cast a spell so casters can gain maximum AC. -void AI_EquipBestShield() -{ - // Get the shield to use/equip (we might have it equipped already) - object oShield = GetAIObject(AI_WEAPON_SHIELD); - // Test for equipping - we check if it is valid, if we have it, and if - // it is even equipped already, of course. This is only called just before - // an action - might add in a "reset shield" if it is invalid or lost - // from us, somehow. - if(GetIsObjectValid(oShield) && - GetItemPossessor(oShield) == OBJECT_SELF && - GetItemInSlot(INVENTORY_SLOT_LEFTHAND) != oShield) - { - // Equip it. No need for anything else. Lefthand == Offhand (or Shield hand) - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } -} - -// Turns on/off all melee things (not stealth or search!) but not nMode. -void AI_SetMeleeMode(int nMode = ACTION_MODE_ALL_OFF) -{ - if(nMode != ACTION_MODE_ALL_OFF) - { - if(!GetActionMode(OBJECT_SELF, nMode)) - { - SetActionMode(OBJECT_SELF, nMode, TRUE); - } - } - // Turn off all the rest - int nCnt; - // 0 = stealth, 1 = search (ignore these 2), 3 = parry. 11 = DF. - for(nCnt = ACTION_MODE_PARRY; nCnt <= ACTION_MODE_DIRTY_FIGHTING; nCnt++) - { - if(nCnt != nMode) - { - if(GetActionMode(OBJECT_SELF, nCnt)) - { - SetActionMode(OBJECT_SELF, nCnt, FALSE); - } - } - } -} - -// Turn of hiding if turn of timer is on, and turn of searching if it is -// active. -// This should be called before any action using a feat, spell or similar, if -// we need to move. -void AI_ActionTurnOffHiding() -{ - // 1.4: Changed both the checks to use GetActionMode. Looks cleaner. - // Turn of searching and hiding here, if we want to! - if(!GetHasFeat(FEAT_KEEN_SENSE) && - !GetActionMode(OBJECT_SELF, ACTION_MODE_DETECT)) - { - SetActionMode(OBJECT_SELF, ACTION_MODE_DETECT, FALSE); - } - // Turn of hiding if we have been seen lately. - if(GetLocalTimer(AI_TIMER_TURN_OFF_HIDE) && - !GetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH)) - { - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, FALSE); - } -} - -/*:://///////////////////////////////////////////// -//:: Name AI_EquipAndAttack -//:://///////////////////////////////////////////// - This was a bioware script. It has been changed a lot. - Best target if normal int (equal or more than 2). - - Will play a random attack taunt, sometimes. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -int AI_EquipAndAttack() -{ - // Taunt the enemy! - // 5% chance each round. A d20 roll of 1. - if(!GetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER) - && d20() == 1) - { - int iVoice = VOICE_CHAT_ATTACK;// Default - switch(Random(6)) // Random will do 0-5, so more chance of ATTACK - { - case 0: iVoice = VOICE_CHAT_LAUGH; break; - case 1: iVoice = VOICE_CHAT_BATTLECRY1; break; - case 2: iVoice = VOICE_CHAT_BATTLECRY2; break; - case 3: iVoice = VOICE_CHAT_BATTLECRY3; break; - default: iVoice = VOICE_CHAT_ATTACK; break;// Default - } - // Random delay for 0.0 to 1.0 seconds. - float fDelay = IntToFloat(Random(10) + 1) / 10.0; - DelayCommand(fDelay, PlayVoiceChat(iVoice)); - } - - // - Flying - if(GlobalRangeToMeleeTarget > 8.0 && - GetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER)) - { - SetAIObject(AI_FLYING_TARGET, GlobalMeleeTarget); - ExecuteScript(FILE_FLY_ATTACK, OBJECT_SELF); - return TRUE; - } - - // Set up the range to use weapons at, before moving into HTH - // Default is 5.0 (+ Some for creature size) with no changes... - float fRange = 5.0; - // Might have some pre-set range OnSpawn - int nRangeFromSetup = GetAIInteger(AI_RANGED_WEAPON_RANGE); - if(nRangeFromSetup >= 1) - { - fRange = IntToFloat(nRangeFromSetup); - } - // If our intelligence is enough, we make it 3.0. - else if(GlobalIntelligence >= 5) - { - fRange = 3.0; - } - // We add a base of X for monster sizes - fRange += (IntToFloat(GetCreatureSize(OBJECT_SELF))/4.0); - - // bRangedAttack = TRUE, then equip ranged weapons - int bRangedAttack = FALSE; - - // Now check for it... - // If range to melee target is OVER fRange... - // - Or setting to always use bow - if(GlobalRangeToMeleeTarget > fRange || - GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER)) - { - bRangedAttack = TRUE; - } - - // Special check for AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND. - // Either a % chance, or that they have no enemy in X distance, and we are - // in Y distance. - // We always run in at 8 or less M too. - if(bRangedAttack == TRUE && GetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER)) - { - // If they are under 8M away, always run in - 80% chance - if(GlobalRangeToMeleeTarget < 8.0 && d10() <= 8) - { - bRangedAttack = FALSE; - } - else - { - // Get distance from melee target to nearest ally to it. - float fAllyToMelee = GetDistanceBetween(GlobalMeleeTarget, GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, GlobalMeleeTarget, 1, CREATURE_TYPE_IS_ALIVE, TRUE)); - - // Check thier range to ours - // - Basically, if GlobalRangeToMeleeTarget - fAllyToMelee, is - // a difference of Random(4) + 4;, we move in. - // + 60% chance! - if((GlobalRangeToMeleeTarget - fAllyToMelee) <= (IntToFloat(Random(4) + 4)) && - d10() <= 6) - { - bRangedAttack = FALSE; - } - } - } - - // Declare everything - object oEquipped, oMainWeapon, oMainPossessor, oPrimary, oSecondary, - oTwohanded, oRightWeapon, oLeftWeapon; - int bPickUpDisarmed, bRanged, bShield, nValidAmmoSlot, nStrength, nPrimaryNum, - nSecondaryNum, bValidPrimary, bValidSecondary, bValidTwoHanded, nPrimaryDamage, - bEquippedShield, nShieldInSlotAlready, bEquippedMostDamaging, - // Done in melee attacking, if we want more AC - IE expertise. - bNeedMoreAC; - float fRangeToWeapon; - - // Weapons already in slots - // Right == Ranged slot, non-shield slot. - // Left == Torch slot, secondary slot, shield slot. - oRightWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND); - oLeftWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND); - - // Shield already in our left hand - nShieldInSlotAlready = GetBaseItemType(oLeftWeapon); - - // Here...we determine wether to try for melee or ranged attacks. - // This is TRUE if we did ActionEquipMostDamaging... - bEquippedMostDamaging = FALSE; - - object oShield = GetAIObject(AI_WEAPON_SHIELD); - int bValidShield = GetIsObjectValid(oShield); - // SPECIAL: We will just use default calls FIRST and stop IF we have this set - // same checks to choose between them though :-P - if(AI_GetAIHaveEffect(GlobalEffectPolymorph) || - GetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER)) - { - // 1: "[DCR:Melee] Most Damaging Weapon. Target: " + GetName(GlobalMeleeTarget) - DebugActionSpeakByInt(1, GlobalMeleeTarget); - // bRangedAttack = 1 then ranged. - if(bRangedAttack) - { - ActionEquipMostDamagingRanged(GlobalMeleeTarget); - } - // Special near-range always attack with a bow option. - else if(GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER)) - { - ActionEquipMostDamagingRanged(GlobalMeleeTarget); - } - // Spcial - if we are set to always move back, 1/10 times we don't equip HTH. - // BUT we will attack in HTH if the last target was this target. - else if(GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER) - && d10() != 1) - { - ActionEquipMostDamagingRanged(GlobalMeleeTarget); - } - // Else we should always be in HTH range. - else // if(!bRangedAttack) - { - ActionEquipMostDamagingMelee(GlobalMeleeTarget, TRUE); - } - // Always do... - bEquippedMostDamaging = TRUE; - } - // Else normal weapons, IE we check stored ones :-P - else if(!AI_GetAIHaveEffect(GlobalEffectPolymorph)) - { - // Declaring - // Toggle: Do we pick up any disarmed weapons? - bPickUpDisarmed = GetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // We may, if at the right range (and got a ranged weapon) equip it. - oMainWeapon = GetAIObject(AI_WEAPON_RANGED); - oMainPossessor = GetItemPossessor(oMainWeapon); - // bRanged = TRUE if we equip a ranged weapon after checks. - // bShield = TRUE if we should equip a shield - // Is the ranged weapon valid? And bRangedAttack == TRUE - // We need valid ammo, else we eqip nothing! - nValidAmmoSlot = GetAIInteger(AI_WEAPON_RANGED_AMMOSLOT); - if(nValidAmmoSlot == INVENTORY_SLOT_RIGHTHAND) - { - nValidAmmoSlot = TRUE; - } - else - { - nValidAmmoSlot = GetIsObjectValid(GetItemInSlot(nValidAmmoSlot)); - } - // Ranged attack...valid? - if(bRangedAttack && nValidAmmoSlot && GetIsObjectValid(oMainWeapon)) - { - // Is the possessor valid? (could be us or someone else) - if(GetIsObjectValid(oMainPossessor)) - { - // Check if it is us or not... - if(oMainPossessor == OBJECT_SELF) - { - if(oRightWeapon != oMainWeapon) - { - // Ranged weapons then equipped in the righthand :-D - ActionEquipItem(oMainWeapon, INVENTORY_SLOT_RIGHTHAND); - } - oEquipped = oMainWeapon; - bRanged = TRUE;// only ranged feats. - } - // Else, we delete it and check for secondary one :-) - else if(GetIsObjectValid(GetAIObject(AI_WEAPON_RANGED_2))) - { - // If valid, we re-set weapons! Because we cannot pick up the other. - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - // As it happens immediantly (yes, more lag, gee) we check for the original :-) - oMainWeapon = GetAIObject(AI_WEAPON_RANGED); - // If it is now valid, equip it! - if(GetIsObjectValid(oMainWeapon)) - { - ActionEquipItem(oMainWeapon, INVENTORY_SLOT_RIGHTHAND); - oEquipped = oMainWeapon; - bRanged = TRUE;// only ranged feats. - } - } - else // Else, delete the ranged thing, someone else has it. - { - DeleteAIObject(AI_WEAPON_RANGED); - } - } - // Else, it is on the ground. If near, we pick it up. - else if(bPickUpDisarmed) - { - fRangeToWeapon = GetDistanceToObject(oMainWeapon); - if((fRangeToWeapon < 5.0 && fRangeToWeapon > 0.0)|| - !GlobalMeleeAttackers) - { - // We should attempt to pick it up... - ActionPickUpItem(oMainWeapon); - ActionEquipItem(oMainWeapon, INVENTORY_SLOT_RIGHTHAND); - oEquipped = oMainWeapon; - bRanged = TRUE;// only ranged feats. - } - else // Else, we can't or won't get it. - { - DeleteAIObject(AI_WEAPON_RANGED); - if(GetIsObjectValid(GetAIObject(AI_WEAPON_RANGED_2))) - { - // If valid, we re-set weapons! Because we cannot pick up the other. - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - // As it happens immediantly (yes, more lag, gee) we check for the original :-) - oMainWeapon = GetAIObject(AI_WEAPON_RANGED); - // If it is now valid, equip it! - if(GetIsObjectValid(oMainWeapon)) - { - ActionEquipItem(oMainWeapon, INVENTORY_SLOT_RIGHTHAND); - oEquipped = oMainWeapon; - bRanged = TRUE;// only ranged feats. - } - } - } - } - } - // This is set to the items AC value, to take away simulating taking it off when - // we check AC against other things... :-) - if(nShieldInSlotAlready == BASE_ITEM_TOWERSHIELD || - nShieldInSlotAlready == BASE_ITEM_SMALLSHIELD || - nShieldInSlotAlready == BASE_ITEM_LARGESHIELD) - { - nShieldInSlotAlready = GetItemACValue(oLeftWeapon); - } - // NOTE: shields cannot be disarmed! If we don't have it, though, we act as if it isnt valid - if(!bValidShield || GetItemPossessor(oShield) != OBJECT_SELF) - { - // If the second is valid, we re-set weapons. - if(GetIsObjectValid(GetAIObject(AI_WEAPON_SHIELD_2))) - { - // If valid, we re-set weapons! Because we cannot pick up the other. - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - // bValidShield is 1 if valid, and now on us. - oShield = GetAIObject(AI_WEAPON_SHIELD); - bValidShield = GetIsObjectValid(oShield); - } - // bEquippedShield is TRUE if we equip a shield. - // If something has been equipped, we arm a shield...here - if(bRanged) - { - // Need a vlaid shield AND able to equip one. - if(bValidShield && GetAIInteger(AI_WEAPON_RANGED_SHIELD)) - { - if(oShield != GetItemInSlot(INVENTORY_SLOT_LEFTHAND)) - { - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } - bEquippedShield = TRUE; - } - } - else // Else, equip the best combo of HTH weapons! - { - // We run through. Of course, first, is it best for - // What do we have? - // Get things... - // First: Primary. If that is valid, we check secondary. These are arrays. - nPrimaryNum = AI_GetWeaponArray(AI_WEAPON_PRIMARY); - if(nPrimaryNum) - { - oPrimary = GetLocalObject(OBJECT_SELF, AI_WEAPON_PRIMARY + IntToString(nPrimaryNum)); - bValidPrimary = GetIsObjectValid(oPrimary); - if(bValidPrimary) - { - // We want the smallest... - nSecondaryNum = AI_GetWeaponArray(AI_WEAPON_SECONDARY, oPrimary, 3); - if(nSecondaryNum) - { - oSecondary = GetLocalObject(OBJECT_SELF, AI_WEAPON_SECONDARY + IntToString(nSecondaryNum)); - bValidSecondary = GetIsObjectValid(oSecondary); - } - } - } - // 2 handed - // * Fix, 1.4, thanks Chris, this is not a GetAIObject()! It is like above lines. - oTwohanded = GetLocalObject(OBJECT_SELF, AI_WEAPON_TWO_HANDED + "1"); - bValidTwoHanded = GetIsObjectValid(oTwohanded); - // Shield is done above. - // Now, are any valid? - if(!bValidPrimary && !bValidTwoHanded) - { - ActionEquipMostDamagingMelee(GlobalMeleeTarget, TRUE); - bEquippedMostDamaging = TRUE; - } - else - { - // Now, the circumstances...what is best? Lots of damage and lower AC? - // Maybe more AC? Maybe a second weapon? (as if any are valid, its obvious better to use one). - // Globals: - // GlobalOurAC, GlobalOurHitDice, GlobalOurBaseAttackBonus, GlobalMeleeAttackers - // GlobalAverageEnemyHD, GlobalAverageEnemyBAB - nStrength = GetAbilityModifier(ABILITY_STRENGTH); - // Check one: Is a lot more AC better? Or keep shield equipped, even? - // 1. Is our AC below 2x our HD? (IE under 20 at level 10) - if((GlobalOurAC < GlobalOurHitDice * 2) || - // 2. Our AC with no shield is under average melee BAB + 6 (a badish roll) - (GlobalOurAC - nShieldInSlotAlready < GlobalAverageEnemyBAB + 6 && - GlobalAverageEnemyHD >= GlobalOurHitDice - 5) || - // 3. Melee attackers are great, over 1/4th of our HD + 2, and enemy HD is comparable toughness - (GlobalMeleeAttackers > ((GlobalOurHitDice / 4) + 2) && - GlobalAverageEnemyHD >= GlobalOurHitDice - 3)) - { - // We need more AC! - bNeedMoreAC = TRUE; - // Valid primary, for the shield... - if(bValidPrimary) - { - oEquipped = oPrimary;// May change though... - // If we have a shield (which is the point) we equip any not in slots. - if(bValidShield) - { - bEquippedShield = TRUE; - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oShield) - { - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } - } - else if(bValidTwoHanded) - { - oEquipped = oTwohanded; - if(oRightWeapon != oTwohanded) - { - ActionEquipItem(oTwohanded, INVENTORY_SLOT_RIGHTHAND); - } - } - else if(bValidSecondary) - { - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oSecondary) - { - ActionEquipItem(oSecondary, INVENTORY_SLOT_LEFTHAND); - } - } - else - { - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - } - } - else if(bValidTwoHanded) - { - oEquipped = oTwohanded; - if(oRightWeapon != oTwohanded) - { - ActionEquipItem(oTwohanded, INVENTORY_SLOT_RIGHTHAND); - } - } - } - // Check two: If we have a good hitting chance, we might equip a 2handed first. - // 1. We have a decent strength mod, which adds damage to many 2 handed. - // This is AND things... - else if((nStrength >= (GlobalOurHitDice / 4 + 2)) && - // 2. Greater strength then dexterity - (nStrength > GetAbilityModifier(ABILITY_DEXTERITY) + Random(3))) - { - if(bValidTwoHanded) - { - oEquipped = oTwohanded; - if(oRightWeapon != oTwohanded) - { - ActionEquipItem(oTwohanded, INVENTORY_SLOT_RIGHTHAND); - } - } - else if(bValidPrimary) - { - oEquipped = oPrimary; - // Secondary first, rather then shield. - if(bValidSecondary) - { - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oSecondary) - { - ActionEquipItem(oSecondary, INVENTORY_SLOT_LEFTHAND); - } - } - else if(bValidShield) - { - bEquippedShield = TRUE; - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oShield) - { - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } - } - else if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - } - } - // Check three: None. We equip 2 weapons, then a shield, then a 2 handed, that order. - // In essense, for 2 weapons, it is less damage more times, as it were (if we hit!) - else - { - if(bValidPrimary) - { - oEquipped = oPrimary; - // Secondary first, rather then shield. - if(bValidSecondary) - { - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oSecondary) - { - ActionEquipItem(oSecondary, INVENTORY_SLOT_LEFTHAND); - } - } - else if(bValidShield) - { - bEquippedShield = TRUE; - if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - if(oLeftWeapon != oShield) - { - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } - } - else if(oRightWeapon != oPrimary) - { - ActionEquipItem(oPrimary, INVENTORY_SLOT_RIGHTHAND); - } - } - else if(bValidTwoHanded) - { - oEquipped = oTwohanded; - if(oRightWeapon != oTwohanded) - { - ActionEquipItem(oTwohanded, INVENTORY_SLOT_RIGHTHAND); - } - } - } - }// End no valid - } - }// End "lag buster" check. - - // We check for weapon effective here, if we didn't equip most damaging - // - We only do this if we are attacking the target for more then 1 round. - if(!bEquippedMostDamaging && !bRangedAttack && - GetAIInteger(AI_MELEE_TURNS_ATTACKING) >= 2) - { - // If neither weapon can damage the target...and no most damaging... - if(!GetWeaponRanged(oEquipped) && - GetIsObjectValid(oEquipped) && - !GetIsWeaponEffective(GlobalMeleeTarget)) - { - // 2: "[DCR:Melee] Most Damaging as Not Effective" - DebugActionSpeakByInt(2); - // We equip a shield (if not already) - if(!bEquippedShield && bValidShield) - { - if(oShield != GetItemInSlot(INVENTORY_SLOT_LEFTHAND)) - { - ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); - } - } - // And equip most damaging (melee) - ActionEquipMostDamagingMelee(GlobalMeleeTarget); - } - } - // Now, we should have equipped something :-D - // GlobalMeleeTargetAC - - // We randomly hit, determined by our intelligence. - // If we have higher intelligence, we take our rolls to be higher, so we use feats more. - int nOurHit; - // add a base value...so 18 for Int. 10. 0 for Int. 1. - nOurHit = GlobalOurBaseAttackBonus + ((GlobalIntelligence * 2) - 2); - // Randomise...should never get results over 20 now. (0-20 for INT 1, 0-2 for INT 10) - nOurHit += Random(20 - ((GlobalIntelligence - 1) * 2)); - - // 1.3 - Add Dexterity to ranged feat checking, strength to melee - - // Note: - // - 8+ Intelligence also checks DISCIPLINE. - -/* Ability: Strength. - Requires Training: No. - Classes: All. - - A successful check allows the character to resist any combat feat - (Disarm, Called Shot, or Knockdown). - - Check: The DC is equal to the attacker's attack roll. - Use: Automatic. */ - - // We therefore make ValidFeat mean FALSE if the target has too much - // disipline (by a margin) - int bDisciplineFeats = TRUE; - if(GlobalIntelligence >= 8) - { - // If thier rank - 20 is over our BAB + XX, then no go, as it is very - // likely they'll pass the check. - // * Was no second parameter (thusly OBJECT_SELF). 1.4 fix - change to - // opponents skill! - if(GetSkillRank(SKILL_DISCIPLINE, GlobalMeleeTarget) - 25 >= nOurHit) - { - // No feats - bDisciplineFeats = FALSE; - } - } - - // Note: If we can only hit on a 20, and have 7+ Intelligence, we make it - // use ANY feat (as they will have the same chance of hitting - a critical - - // as a normal attack) - if(GlobalOurBaseAttackBonus + 20 <= GlobalMeleeTargetAC) - { - nOurHit = GlobalOurBaseAttackBonus + 100;// Massive amount - we act as if we rolled 100! - } - // We turn off hiding/searching as we will at least do ActionAttack... - AI_ActionTurnOffHiding(); - - // Ranged weapon? - if(bRanged && !AI_GetAIHaveEffect(GlobalEffectPolymorph)) - { - // RANGED: Add dexterity - nOurHit += GetAbilityModifier(ABILITY_DEXTERITY); - int nAC = GetAC(GlobalRangedTarget); - - // We see if it is a weapon which we can use power attack with >:-D - if(GetBaseItemType(oEquipped) == BASE_ITEM_THROWINGAXE) - { - if((nOurHit - 5) >= nAC)// Power attack - { - if((nOurHit - 10) >= GlobalMeleeTargetAC)// Improved power attack - { - AI_SetMeleeMode(ACTION_MODE_IMPROVED_POWER_ATTACK); - ActionAttack(GlobalRangedTarget); - return FEAT_IMPROVED_POWER_ATTACK; - } - AI_SetMeleeMode(ACTION_MODE_POWER_ATTACK); - ActionAttack(GlobalRangedTarget); - return FEAT_POWER_ATTACK; - } - } - // Rapid shot - This provides another attack, at -2 to hit. - else if((nOurHit - 2) >= GlobalMeleeTargetAC && GetHasFeat(FEAT_RAPID_SHOT)) - { - AI_SetMeleeMode(ACTION_MODE_RAPID_SHOT); - ActionAttack(GlobalRangedTarget); - return FEAT_RAPID_SHOT; - } - // Called shot is -4, but some good things...does it work though? Uncommented till sure - else if(((nOurHit - 4) >= nAC) && - GetHasFeat(FEAT_CALLED_SHOT) && bDisciplineFeats && - !GetHasFeatEffect(FEAT_CALLED_SHOT, GlobalRangedTarget)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_CALLED_SHOT, GlobalRangedTarget); - return FEAT_CALLED_SHOT; - } - else - { - // Normal (Ranged) attack - ActionAttack(GlobalRangedTarget); - return AI_NORMAL_RANGED_ATTACK; - } - } - // Parry the enemy, if we have only 1 target attacking us, and have - // decent skill. - else if(!bRanged && !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER) && - // 1 attacker, and the melee target is attacking us. - GlobalMeleeAttackers <= 1 && GetAttackTarget(GlobalMeleeTarget) == OBJECT_SELF && - // Not got a ranged weapon - enemy target that is - !GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, GlobalMeleeTarget)) && - // Got skill rank of at least our hit dice + 4. - ((GetSkillRank(SKILL_PARRY) >= (GlobalOurHitDice + 4)) || - // Or forced - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER))) - { - // Set parry mode - AI_SetMeleeMode(ACTION_MODE_PARRY); - ActionAttack(GlobalMeleeTarget); - return AI_PARRY_ATTACK; - } - else if(!bRanged) - { - // Death attack - if we are hidden, or we have invisiblity effects - // - A basic "seen or heard" check, backwards (slightly cheating!) - if(GetHasFeat(FEAT_PRESTIGE_DEATH_ATTACK_1) && - (!GetObjectSeen(OBJECT_SELF, GlobalMeleeTarget) || - !GetObjectSeen(OBJECT_SELF, GlobalMeleeTarget))) - { - // This doesn't seem to be "useable" and is meant to be automatic. - // However, using something that decreases our attack will be silly - // so we will just ActionAttack the target. - ActionAttack(GlobalMeleeTarget); - return FEAT_PRESTIGE_DEATH_ATTACK_1; - } - // Check for defensive stance - if(GetHasFeat(FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE) && - !GetHasFeatEffect(FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE) && - GlobalRangeToMeleeTarget < 3.0 && - GetLastAttackMode() != COMBAT_MODE_DEFENSIVE_STANCE) - { - // Use defensive stance on self (Hopefully these checks won't override each other) - ActionUseFeat(FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE, OBJECT_SELF); - // Note - fall through and carry on - } - // MELEE - // - Add strength - nOurHit += GetAbilityModifier(ABILITY_STRENGTH); - - // More things to declare. - int nTargetWeaponSize, nTargetCreatureRace, nOurWeaponSize, - bCanUseMonks, nTargetAlignment, nAddingModifier, nMonkLevels; - // Monk levels - nMonkLevels = GetLevelByClass(CLASS_TYPE_MONK); - if(!nMonkLevels) nMonkLevels = 1; - nTargetCreatureRace = MyPRCGetRacialType(GlobalMeleeTarget);//done later. - nTargetAlignment = GetAlignmentGoodEvil(GlobalMeleeTarget); - // Now, monk, can it be done... - if((!GetIsObjectValid(oEquipped) || - GetBaseItemType(oEquipped) == BASE_ITEM_KAMA) && - nTargetCreatureRace != RACIAL_TYPE_CONSTRUCT && - nTargetCreatureRace != RACIAL_TYPE_UNDEAD) - { - bCanUseMonks = TRUE; - } - // Smite good, or evil! - if(nTargetAlignment != ALIGNMENT_NEUTRAL) - { - // For use against them evil pests! Top - one use only anyway. - if(nTargetAlignment == ALIGNMENT_EVIL && GetHasFeat(FEAT_SMITE_EVIL)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_SMITE_EVIL, GlobalMeleeTarget); - return FEAT_SMITE_EVIL; - } - // For use against them evil pests! Top - one use only anyway. - else if(nTargetAlignment == ALIGNMENT_GOOD && GetHasFeat(FEAT_SMITE_GOOD)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_SMITE_GOOD, GlobalMeleeTarget); - return FEAT_SMITE_GOOD; - } - } - // We may use Expertiese if we are being attacked, and above we tried - // to equip a shield... - // - Need more help around us (some allies) and people atually attacking us, or low HP. - if((GlobalOurPercentHP <= 20) || - (bNeedMoreAC && GlobalMeleeAttackers && GlobalTotalAllies >= 2)) - { - // +10 AC, -10 BAB - if(GetHasFeat(FEAT_IMPROVED_EXPERTISE)) - { - AI_SetMeleeMode(ACTION_MODE_IMPROVED_EXPERTISE); - return FEAT_IMPROVED_EXPERTISE; - } - else if(GetHasFeat(FEAT_EXPERTISE)) - { - AI_SetMeleeMode(ACTION_MODE_EXPERTISE); - return FEAT_EXPERTISE; - } - } - // First, we have the little-known-about monk powerful feats... - // Instant death, what can be better? >:-D - if(bCanUseMonks && GetHasFeat(FEAT_QUIVERING_PALM) && - nOurHit + 5 >= GlobalMeleeTargetAC && - GlobalOurHitDice >= GetHitDice(GlobalMeleeTarget)) - { - // Ok, not too random. Thier roll is not d20 + fort save, it is random(15) + 5. - // - Our hit is 10 + Monk class/2 + Wisdom... - if((10 + (nMonkLevels / 2) + GetAbilityModifier(ABILITY_WISDOM)) >= - // - This must be over thier Fortitude save, add 5 and 0-15. - (GetFortitudeSavingThrow(GlobalMeleeTarget) + 5 + Random(15))) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_QUIVERING_PALM, GlobalMeleeTarget); - return FEAT_QUIVERING_PALM; - } - } - // We see if we want to use Whirlwind attack! - // - Check for amount of melee attackers. If 5 or more, use this. - // - We may use it later at 2 or more. :-) - // If we don't have 5 or more, we use some of the better single target - // feats before. This requires no BAB check - it is done at max BAB - if(// 90% chance of using it with 6+ melee attackers, and 8+ enemies in 4M - (d10() <= 9 && (GlobalEnemiesIn4Meters >= 8 || - GlobalMeleeAttackers >= 6)) || - // OR, 70% chance of using if we'll get more attacks if we used - // whirlwind then if we used - (d10() <= 7 && (GlobalOurBaseAttackBonus/5 < (GlobalEnemiesIn4Meters - 1))) || - // Lastly 40% chance if we have 4+ melee, or 5+ in range - (d10() <= 4 && (GlobalEnemiesIn4Meters >= 5 || - GlobalMeleeAttackers >= 4))) - { - // - Free attack to all in 10'! This should be anyone in 6.6M or so. - if(GetHasFeat(FEAT_IMPROVED_WHIRLWIND)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_IMPROVED_WHIRLWIND, OBJECT_SELF); - // And attack after (as it doesn't seem to take a round to use) - ActionAttack(GlobalMeleeTarget); - return FEAT_IMPROVED_WHIRLWIND; - } - // All in 5' is still alright. 5 Feet = 3.3M or so. - else if(GetHasFeat(FEAT_WHIRLWIND_ATTACK)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_WHIRLWIND_ATTACK, OBJECT_SELF); - // And attack after (as it doesn't seem to take a round to use) - ActionAttack(GlobalMeleeTarget); - return FEAT_WHIRLWIND_ATTACK; - } - } - // Sap can be used by anyone, any weapon, I think... - // Almost Auto stun, great stuff. Help From toolset: -/* Sap - Type of Feat: General - Prerequisite: Base Attack Bonus +1, Called Shot. - Required for: Stunning Fist. - Specifics: A character with this feat is able to make a special stun - attack in melee. He makes an attack roll with a -4 penalty, and if the hit - successfully deals damage the defender must make a Discipline check with a - DC equal to the attacker's attack roll. If the defender fails, he or she is - dazed for 12 seconds. - Use: Selected. */ - if(!GetHasFeatEffect(FEAT_SAP, GlobalMeleeTarget) && - GetHasFeat(FEAT_SAP) && - nOurHit - 4 >= GlobalMeleeTargetAC && - !AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalMeleeTarget) && - !AI_GetAIHaveEffect(GlobalEffectDazed, GlobalMeleeTarget)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_SAP, GlobalMeleeTarget); - return FEAT_SAP; - } - // Knockdown is great! One of the best ever!(and VERY, VERY overpowered) - if(bDisciplineFeats && !GetHasFeatEffect(FEAT_KNOCKDOWN, GlobalMeleeTarget) && - !GetHasFeatEffect(FEAT_IMPROVED_KNOCKDOWN, GlobalMeleeTarget) && - !AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalMeleeTarget) && - !AI_GetAIHaveEffect(GlobalEffectDazed, GlobalMeleeTarget)) - { - // These return 1-5, based on size. - int nTargetCreatureSize = GetCreatureSize(GlobalMeleeTarget); - int nOurSize = GetCreatureSize(OBJECT_SELF); - // By far the BEST feat to use - knocking them down lets you freely attack them! - if(GetHasFeat(FEAT_IMPROVED_KNOCKDOWN)) - { - // Imporved affects like if we were 1 size larger - thus we can affect 2 sizes bigger targets - if((nOurSize + 2) >= nTargetCreatureSize) - { - // Modifier, adds anything from -4 to 0 to 4. - // Test: Us, size 3, them size 1. 3 - 1 = 2. 2 * 4 = +8 to hit. - nAddingModifier = (nOurSize - nTargetCreatureSize) * 4; - // We are 1 size bigger, so its evens (we add 4 onto -4) - if(nAddingModifier + nOurHit >= GlobalMeleeTargetAC) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_IMPROVED_KNOCKDOWN, GlobalMeleeTarget); - return FEAT_IMPROVED_KNOCKDOWN; - } - } - } - // Knockdown, we can hit on 1 size above or smaller. - else if(GetHasFeat(FEAT_KNOCKDOWN)) - { - // Only works on our size, above 1, or smaller. - if((nOurSize + 1) >= nTargetCreatureSize) - { - // Same as above, but we always take 4 more. - nAddingModifier = ((nOurSize - nTargetCreatureSize) * 4) - (4); - // Calculate - if(nAddingModifier + nOurHit >= GlobalMeleeTargetAC) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_KNOCKDOWN, GlobalMeleeTarget); - return FEAT_KNOCKDOWN; - } - } - } - } - // Ki damage :-) max roll of damage for weapons for Weapon Master - Hordes - // - Note that this a lot of uses. Test for usefulness! - // 1.4: Moved below "disabling" combat feats. This is more useful if they - // cannot move. - if(GetHasFeat(FEAT_KI_DAMAGE)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_KI_DAMAGE, GlobalMeleeTarget); - return FEAT_KI_DAMAGE; - } - // Define sizes of weapons, ETC. - // Check if they are disarmable. - if(bDisciplineFeats && GetIsCreatureDisarmable(GlobalMeleeTarget)) - { - nOurWeaponSize = AI_GetWeaponSize(oEquipped); - nTargetWeaponSize = AI_GetWeaponSize(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, GlobalMeleeTarget)); - // No AOO, and only a -4 penalty to hit. - if(GetHasFeat(FEAT_IMPROVED_DISARM)) - { - // We need to have valid sizes, so no odd weapons or shields to attack with... - if(nOurWeaponSize && nTargetWeaponSize)// Are both != 0? - { - // Apply weapon size penalites/bonuses to check - Use right weapons. - // We times it by 4. - // Test: Us, size 3, them size 1. (3 - 1 = 2) then (2 * 4 = 8) So +8 to hit. - nAddingModifier = (nOurWeaponSize - nTargetWeaponSize) * 4; - if((nAddingModifier + nOurHit - 4) >= GlobalMeleeTargetAC) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_IMPROVED_DISARM, GlobalMeleeTarget); - return FEAT_IMPROVED_DISARM; - } - } - } - // Provokes an AOO. Improved does not, but this is -6, - // and bonuses depend on weapons used (sizes) - else if(GetHasFeat(FEAT_DISARM)) - { - // We need to have valid sizes, so no odd weapons or shields to attack with... - if(nOurWeaponSize && nTargetWeaponSize)// Are both != 0? - { - // Apply weapon size penalites/bonuses to check - Use left weapons. - nAddingModifier = (nOurWeaponSize - nTargetWeaponSize) * 4; - // We take 6 and then 1 per melee attacker (AOOs) - if((nAddingModifier + nOurHit - 6 - GlobalMeleeAttackers) >= GlobalMeleeTargetAC) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_DISARM, GlobalMeleeTarget); - return FEAT_DISARM; - } - } - } - } - // Next, stunning fist. - // Stuns the target, making them unable to move. -4 attack. - // DC (fort) of 10 + HD/2 + wis mod. - if(bCanUseMonks && GetHasFeat(FEAT_STUNNING_FIST) && - !AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalMeleeTarget) && - !AI_GetAIHaveEffect(GlobalEffectDazed, GlobalMeleeTarget)) - { - // Start adding modifier at 0. - nAddingModifier = 0; - // If not a monk, its -4 to hit. Monk levels defaults to 1 if 0 - if(nMonkLevels == TRUE) nAddingModifier - 4; - // We hit ETC. - // Save is above - if(nOurHit >= GlobalMeleeTargetAC && - // Save - (10 + (GlobalOurHitDice / 2) + GetAbilityModifier(ABILITY_WISDOM) - >= GetFortitudeSavingThrow(GlobalMeleeTarget) + 5 + Random(15))) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_STUNNING_FIST, GlobalMeleeTarget); - return FEAT_STUNNING_FIST; - } - } - // We see if we want to use Whirlwind attack! - // - Check for amount of melee attackers. If 5 or more, use this. - // - We may use it later at 2 or more. :-) - // If we don't have 5 or more, we use some of the better single target - // feats before. This requires no BAB check - it is done at max BAB - if(GlobalEnemiesIn4Meters >= 2) - { - // - Free attack to all in 10'! This should be anyone in 6.6M or so. - if(GetHasFeat(FEAT_IMPROVED_WHIRLWIND)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_IMPROVED_WHIRLWIND, OBJECT_SELF); - return FEAT_IMPROVED_WHIRLWIND; - } - // All in 5' is still alright. 5 Feet = 3.3M or so. - else if(GetHasFeat(FEAT_WHIRLWIND_ATTACK)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_WHIRLWIND_ATTACK, OBJECT_SELF); - return FEAT_WHIRLWIND_ATTACK; - } - } - // Next, flurry of blows... - if(bCanUseMonks && nOurHit - 2 >= GlobalMeleeTargetAC && - GetHasFeat(FEAT_FLURRY_OF_BLOWS)) - { - AI_SetMeleeMode(ACTION_MODE_FLURRY_OF_BLOWS); - ActionAttack(GlobalMeleeTarget); - return FEAT_FLURRY_OF_BLOWS; - } - // Expertise, special case: If we have a high BAB verus thier AC. - // Only basic for now... - if(GetHasFeat(FEAT_IMPROVED_EXPERTISE)) - { - // Our hit is over thier AC, and thier BAB hits us all the time... - // OR when there are 3+ - if((nOurHit >= GlobalMeleeTargetAC && - // Add 5 to thier hit - GetBaseAttackBonus(GlobalMeleeTarget) + 5 >= GlobalOurAC) || - GlobalMeleeAttackers >= 3) - { - AI_SetMeleeMode(ACTION_MODE_IMPROVED_EXPERTISE); - ActionAttack(GlobalMeleeTarget); - return FEAT_IMPROVED_EXPERTISE; - } - } - if(GetHasFeat(FEAT_EXPERTISE)) - { - // Expertise, we may use even if we can hit only sometimes, and - // they always hit up sometiems (50% time) - // OR when there are 1 + 1/2HD attackers. - if((nOurHit >= GlobalMeleeTargetAC && - // Add 10 to thier hit - GetBaseAttackBonus(GlobalMeleeTarget) + 10 >= GlobalOurAC) || - GlobalMeleeAttackers >= 2) - { - AI_SetMeleeMode(ACTION_MODE_EXPERTISE); - ActionAttack(GlobalMeleeTarget); - return FEAT_EXPERTISE; - } - } - // At a -2 to hit, this can disarm the arms or legs...speed or attack bonus - if((nOurHit - 4) >= GlobalMeleeTargetAC && bDisciplineFeats && - GetHasFeat(FEAT_CALLED_SHOT) && - !GetHasFeatEffect(FEAT_CALLED_SHOT, GlobalMeleeTarget)) - { - AI_SetMeleeMode(); - ActionUseFeat(FEAT_CALLED_SHOT, GlobalMeleeTarget); - return FEAT_CALLED_SHOT; - } - // -10 to hit, for +10 damage. Good, I guess, in some circumstances. - // Uses base attack bonus, no additions. - if(GetHasFeat(FEAT_IMPROVED_POWER_ATTACK) && - GlobalOurBaseAttackBonus >= GlobalMeleeTargetAC) - { - AI_SetMeleeMode(ACTION_MODE_IMPROVED_POWER_ATTACK); - ActionAttack(GlobalMeleeTarget); - return FEAT_IMPROVED_POWER_ATTACK; - } - // is a -5 to hit. Uses random 5, to randomise a bit, - // I guess. Still means a massive BAB will use it. - // Uses base attack bonus, no additions. - if(GetHasFeat(FEAT_POWER_ATTACK) && - ((GlobalOurBaseAttackBonus + Random(5)) >= GlobalMeleeTargetAC)) - { - AI_SetMeleeMode(ACTION_MODE_POWER_ATTACK); - ActionAttack(GlobalMeleeTarget); - return FEAT_POWER_ATTACK; - } - // Either: Bad chance to hit, or only one attack, we use this for 1d4 more damage - if(GetHasFeat(FEAT_DIRTY_FIGHTING) && - GlobalOurBaseAttackBonus / 5 < 1 || - GlobalOurBaseAttackBonus + 15 < GlobalMeleeTargetAC) - { - AI_SetMeleeMode(ACTION_MODE_DIRTY_FIGHTING); - ActionAttack(GlobalMeleeTarget); - return FEAT_DIRTY_FIGHTING; - } - } - - // If we have not used any, well...oh well! Attack!! - ActionAttack(GlobalMeleeTarget); - return AI_NORMAL_MELEE_ATTACK; -} -// Wrapper for AI_AttemptAttack_MeleeAttack -// Includes debug string -int AI_AttemptMeleeAttackWrapper() -{ - // Errors - // We will exit if no valid melee target/dead - if(!GetIsObjectValid(GlobalMeleeTarget) || GetIsDead(GlobalMeleeTarget)) - { - // 3: "[DCR:Melee] Melee Code. No valid melee target/Dead. Exiting" - DebugActionSpeakByInt(3); - return FALSE; - } - int nFeat = AI_EquipAndAttack(); - // 4: "[DCR:Melee] Melee attack. [Target] " + GetName(GlobalMeleeTarget) + " [Feat/Attack] " + IntToString(nFeat) - DebugActionSpeakByInt(4, GlobalMeleeTarget, nFeat); - return nFeat; -} -/*:://///////////////////////////////////////////// -//:: Spell casting functions -//:://///////////////////////////////////////////// - Spell casting functions. -//:://///////////////////////////////////////////// -//:: Created by : Jasperre -//:://///////////////////////////////////////////*/ -// Used with GlobalLastSpellValid. If GlobalLastSpellValid is 0, sets locals for -// use later, and sets GlobalLastSpellValid to the spell in question. -void AI_SetBackupCastingSpellValues(int nSpellID, object oTarget, int bLocation, int nRequirement) -{ - if(GlobalLastSpellValid <= FALSE) - { - // Set last spell - GlobalLastSpellValid = nSpellID; - // Set values using 1 name, + a number - int nCnt = 1; - // SET... - // target - SetAIObject(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt), oTarget); - // location - nCnt++; - SetAIInteger(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt), bLocation); - // Requirements - nCnt++; - SetAIInteger(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt), nRequirement); - } -} - -/*:://///////////////////////////////////////////// -//:: Name AttemptSpecialConcentrationCheck -//:://///////////////////////////////////////////// - This is a good check against the enemies (highest AC one) Damage against concentration - Also, based on allies, enemies, and things, may move back (random chance, bigger with - more bad things, like no stoneskins, no invisibility etc.) - We will do this more at mid-intelligence, and better checks at most intelligence. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ - -int AI_AttemptConcentrationCheck(object oTarget) -{ - // Total off check - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_MASTER) || - // Or has no moving back needed. - GetHasFeat(FEAT_EPIC_IMPROVED_COMBAT_CASTING) || - // Or has all spells quickened! - GetHasFeat(FEAT_EPIC_AUTOMATIC_QUICKEN_3) || - // - Ignore 1, but not 3 or 2. - GetHasFeat(FEAT_EPIC_AUTOMATIC_QUICKEN_2)) - { - return FALSE; - } - // DEFENSIVE CASTING: - // This stops AOO's (normal damage concentration checks from attacks still applies) - // This is useful for stopping a lot of extra attacks. - - // Jump out if we use defensive casting! - if(GetHasSkill(SKILL_CONCENTRATION) && - // If we have 15 + 9 skill (for a level 9 spell) so we'll never fail, we - // always turn it on. - ((GetSkillRank(SKILL_CONCENTRATION) >= 24) || - // Else we'll turn it on based on our class level. Over class level - (((GetSkillRank(SKILL_CONCENTRATION) >= GlobalOurHitDice + 6) || - // Else, we'll turn it on if we have many melee attackers - the damage from - // them will be pretty high otherwise. (ONLY if they are a comparable level!) - ((GlobalMeleeAttackers >= 4 && GlobalAverageEnemyBAB + 15 >= GlobalOurAC) || - (GlobalMeleeAttackers >= 7)))))) - { - // Turn it on - // 5: "[DCR:Caster] Defensive Casting Mode ON [Enemy] " + GetName(GlobalSpellTarget) - DebugActionSpeakByInt(5, GlobalSpellTarget); - AI_SetMeleeMode(ACTION_MODE_DEFENSIVE_CAST); - return FALSE; - } - else if(GetDefensiveCastingMode(OBJECT_SELF) == DEFENSIVE_CASTING_MODE_ACTIVATED) - { - // Turn it off - SetActionMode(OBJECT_SELF, ACTION_MODE_DEFENSIVE_CAST, FALSE); - } - - if(// Check if we have the feat FEAT_EPIC_IMPROVED_COMBAT_CASTING - no AOO - !GetHasFeat(FEAT_EPIC_IMPROVED_COMBAT_CASTING) && - // We will never do anything if no melee attackers, or no ally that can help repel them - GlobalMeleeAttackers > FALSE && - // Target of the spell is not us, if it is us, we don't WANT to move!! (EG: Stoneskin casting) - oTarget != OBJECT_SELF && - // Do not move if we have protection spells, as it will be as good as we can get from stopping damage - // - May change - !AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) && - // We have an ally in 4M - GlobalValidAlly && GlobalRangeToAlly < 4.0 && - // Intelligence AND class mage - ((GlobalIntelligence >= 4 && - (GlobalOurChosenClass == CLASS_TYPE_WIZARD || - GlobalOurChosenClass == CLASS_TYPE_SORCERER || - GlobalOurChosenClass == CLASS_TYPE_FEY)) || - // Or override - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_MASTER))) - { - // First - checks concentration... - int nConcentration = GetSkillRank(SKILL_CONCENTRATION); - // If we have 0 concentration, we always run! - - - // Else we run back based on our concentration compared to how much - // damage we can take. - // - NOTE: Once we can activate defensive casting, we should do so and ignore AOO. - - // We may walk back quite often if there are quite a few allies around - // who'd benifit (IE from a person running after someone and might gain - // AOO) - // - We count up the melee enemy - // - We see how many compared to our protections - // - We move back quite often if the enemy are comparable levels and - // they are of comparable BAB (Consider average AC and average BAB) - - // We always move back if low concentration...under half our hit dice. - if(nConcentration <= GlobalOurHitDice/2 || - // Or that the average HD is quite high (compared to 2/3 our HD) - GlobalAverageEnemyHD >= ((GlobalOurHitDice * 3) / 2) || - // Or that the average BAB is quite high (compared to 2/3 our AC) - GlobalAverageEnemyBAB >= ((GlobalOurAC * 3) / 2)) - { - // We check the counter - int nCounter = GetAIInteger(AI_CONCENTRATIONMOVE_COUNTER); - nCounter++; - SetAIInteger(AI_CONCENTRATIONMOVE_COUNTER, nCounter); - // If the counter is <= 5, we will move back, else we've been moving - // back for 5 turns already! Stop and do something useful... - if(nCounter <= 5) - { - ClearAllActions(); - // 6: "[DCR:Caster] Moving away from AOO's. [Enemy] " + GetName(GlobalSpellTarget) - DebugActionSpeakByInt(6, GlobalSpellTarget); - ActionMoveAwayFromLocation(GetLocation(GlobalMeleeTarget), TRUE, 10.0); - return TRUE; - } - else if(nCounter >= 10) - { - // Reset once we get to 10 rounds. - DeleteAIInteger(AI_CONCENTRATIONMOVE_COUNTER); - } - else - { - // Counter between 5 and 10 - do normal things - return FALSE; - } - } - // If we don't move back, we reset the counter for time we have moved back - DeleteAIInteger(AI_CONCENTRATIONMOVE_COUNTER); - } - return FALSE; -} -// This is used for INFLICT spells, as GetHasSpell also can return 1+ for -// any extra castings - like if we had 2 light wounds and 2 blesses, it'd return -// 4. -// Input the nSpellID, oTarget in to cast the spell. TRUE if casted. No items checked. -int AI_ActionCastSpontaeousSpell(int nSpellID, object oTarget) -{ - if(GetHasSpell(nSpellID) && GetObjectSeen(oTarget)) - { - // Note: Not stored or used in time stop - // 8: "[DCR: Casting] Workaround for Spontaeous [SpellID] " + IntToString(nSpellID) + " [Target] " + GetName(oTarget) - DebugActionSpeakByInt(8, oTarget, nSpellID); - // Equip the best shield we have - AI_EquipBestShield(); - // 1.4 tested this. Just casting the spell doesn't work, sillily. Still - // stands there! - - // Decrement the spell being cast by one as we cheat cast it - DecrementRemainingSpellUses(OBJECT_SELF, nSpellID); - // Cheat cast, it'll remove inflict wounds if it is an inflict spell anyway. - ActionCastSpellAtObject(nSpellID, oTarget, METAMAGIC_NONE, TRUE); - return TRUE; - } - return FALSE; -} - -// This will cast the spell of ID in this order [Note: Always adds to time stop, as it will be on self, and benifical): -// 1. If they have the spell normally. -// * We always attack with a bow at ranged, but may attack normally after the spell. -// * If nTalent is 0, we do not cast it unless nRequirement is also 0. -// * If nRequirement is 0, it is considered innate. -// * Input nItemTalentValue and nPotionTalentValue to check item talents. -1 == No item. -// * If bSubspell is TRUE, we will cheat-cast and derement it. -int AI_ActionCastSpell(int nSpellID, object oTarget = OBJECT_SELF, int nRequirement = 0, int bLocation = FALSE, int bSubSpell = FALSE) -{ - // If it is not ever cast at location, but the target is ethreal, stop NOW - if(bLocation == FALSE && (GetIsEthereal(oTarget) || !GetObjectSeen(oTarget))) return FALSE; - - // Check GetHasSpell as long as we are not silenced, and have right modifier, and - // the object is seen (this is a backup for it!) - if(!GlobalSilenceSoItems && - (!nRequirement || GlobalSpellAbilityModifier >= nRequirement) && - GetHasSpell(nSpellID)) - { - // Make sure it is a spell, not an ability - if(nRequirement > FALSE) - { - // Attempt Concentration Check (Casting a spell, not an item) - if(AI_AttemptConcentrationCheck(oTarget)) return TRUE; - } - else - { - // Turn off all modes - remember, we can't use expertise with spellcasting! - AI_SetMeleeMode(); - } - // Set time stop stored to this spell. - AI_SetTimeStopStored(nSpellID); - - // 9: "[DCR:Casting] NormalSpell [ID] " + IntToString(nSpellID) + " [Target] " + GetName(oTarget) + " [Location] " + IntToString(bLocation) - DebugActionSpeakByInt(9, oTarget, nSpellID, IntToString(bLocation)); - - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - - // Equip the best shield we have - AI_EquipBestShield(); - - // Note: 1.3 fix. Action Cast At Object will be used if we can see - // the target, even if it is a location spell - if(GetObjectSeen(oTarget) && !GetIsEthereal(oTarget)) - { - // aim at the object directly! - // - See 1.3 fix below. Basically, this should use Meta Magic normally - ActionCastSpellAtObject(nSpellID, oTarget, METAMAGIC_ANY, bSubSpell); - } - // If location... - else //if(bLocation) - { - // Fire ActionSpellAtLocation at the given location - // 1.3 fix - Until ActionCastSpellAtLocation works with METAMAGIC - // it will cheat-cast, and decrement the spell by one, with no metamagic. - //ActionCastSpellAtLocation(nSpellID, GetLocation(oTarget), METAMAGIC_NONE, TRUE); - //DecrementRemainingSpellUses(OBJECT_SELF, nSpellID); - // 1.4 attempted check fix - ActionCastSpellAtLocation(nSpellID, GetLocation(oTarget), METAMAGIC_ANY, bSubSpell); - } - // If bSubSpell was true, so we cheat-cast it, decrement the spell by 1 - if(bSubSpell == TRUE) - { - DecrementRemainingSpellUses(OBJECT_SELF, nSpellID); - } - // Alway stop - we use else here, so we always do an action! :-D - return TRUE; - } - return FALSE; -} -// This will cast the spell of ID in this order [Note: Always adds to time stop, as it will be on self, and benifical): -// 0. If d100() is <= nRandom. -// 1. If they have the spell normally -// 2. If they have an item with the spell. -// 3. If they have a potion of the right type. -// - If we are at range from nearest enemy, we attack with a ranged weapon, else do nothing more. -// - If nTalent is -1, we do not check items. -// - Sets GlobalLastSpellValid to nSpellID if we can cast it, but don't randomly. -// Then you can use AI_ActionCastBackupRandomSpell to see if we can cast it later. -int AI_ActionCastSpellRandom(int nSpellID, int nRandom, object oTarget = OBJECT_SELF, int nRequirement = 0, int bLocation = FALSE) -{ - // If it is not ever cast at location, but the target is ethreal, stop NOW - if(bLocation == FALSE && (GetIsEthereal(oTarget) || !GetObjectSeen(oTarget))) return FALSE; - - // Check GetHasSpell as long as we are not silenced, and have right modifier, and - // the object is seen (this is a backup for it!) - if(!GlobalSilenceSoItems && - (!nRequirement || GlobalSpellAbilityModifier >= nRequirement) && - GetHasSpell(nSpellID)) - { - if(d100() <= nRandom + GlobalRandomCastModifier) - { - // Make sure it is a spell, not an ability - if(nRequirement > FALSE) - { - // Attempt Concentration Check (Casting a spell, not an item) - if(AI_AttemptConcentrationCheck(oTarget)) return TRUE; - } - else - { - // Turn off all modes - remember, we can't use expertise with spellcasting! - AI_SetMeleeMode(); - } - // Set time stop stored to this spell. - AI_SetTimeStopStored(nSpellID); - // 12: "[DCR:Casting] NormalRandomSpell. [ID] " + IntToString(nSpellID) + " [Target] " + GetName(oTarget) + " [Location] " + IntToString(bLocation) - DebugActionSpeakByInt(12, oTarget, nSpellID, IntToString(bLocation)); - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - // Equip the best shield we have - AI_EquipBestShield(); - // Note: 1.3 fix. Action Cast At Object will be used if we can see - // the target, even if it is a location spell - if(GetObjectSeen(oTarget) && !GetIsEthereal(oTarget)) - { - // aim at the object directly! - // - See 1.3 fix below. Basically, this should use Meta Magic normally - ActionCastSpellAtObject(nSpellID, oTarget); - } - // If location... - else //if(bLocation) - { - // Fire ActionSpellAtLocation at the given location - // 1.3 fix - Until ActionCastSpellAtLocation works with METAMAGIC - // it will cheat-cast, and decrement the spell by one, with no metamagic. - //ActionCastSpellAtLocation(nSpellID, GetLocation(oTarget), METAMAGIC_NONE, TRUE); - //DecrementRemainingSpellUses(OBJECT_SELF, nSpellID); - // 1.4 attempted fix. - ActionCastSpellAtLocation(nSpellID, GetLocation(oTarget)); - } - // Alway stop - we use else here, so we always do an action! :-D - return TRUE; - } - else - { - // Don't use acid fog as this (Spell 0). If we have one already set, - // this is a worse spell :-) - AI_SetBackupCastingSpellValues(nSpellID, oTarget, bLocation, nRequirement); - - // Always return FALSE. - return FALSE; - } - } - return FALSE; -} -// This will used a stored GlobalLastSpellValid to see if it should cast that -// spell (or attempt to!) as a backup. Uses stored targets from when it did know -// it was valid. -int AI_ActionCastBackupRandomSpell() -{ - // Need a valid spell - if(GlobalLastSpellValid > FALSE) - { - object oTarget; - int nSpell, bLocation, nRequirement; - nSpell = GlobalLastSpellValid; - // Delete again for other castings - GlobalLastSpellValid = FALSE; - // 13: "[DCR:Casting] Backup spell caught: " + IntToString(nSpell) - DebugActionSpeakByInt(13, OBJECT_INVALID, nSpell); - - // Get things from GLOBAL_LAST_SPELL_INFORMATION1 to GLOBAL...ATION5 - int nCnt = 1; - // GET... - // target - oTarget = GetAIObject(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt)); - // location - nCnt++; - bLocation = GetAIInteger(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt)); - // reqirement - nCnt++; - nRequirement = GetAIInteger(GLOBAL_LAST_SPELL_INFORMATION + IntToString(nCnt)); - - // Cast spell at 100% chance, and innate (already checked nRequirement) - // - Should cast. - if(AI_ActionCastSpell(nSpell, oTarget, nRequirement, bLocation)) return TRUE; - } - return FALSE; -} -// This will cast the spell/feat nSpellId (Or with nFeat), depending if it is a spell or a feat, -// at the summon location chosen before. Works similar to normal spells but -// at a special location. -// * If it is a feat, we use nFeat to define the feat, and nSpellId to define the -// spellability to use. -// * If nRequirement is -1, it is a feat. If 0, it is innate (as spells) -int AI_ActionCastSummonSpell(int nSpellId, int nRequirement = 0, int nSummonLevel = 0, int nFeat = 0) -{ - // Feat - if(nRequirement == -1) - { - // Use the new function for 1.4, to encompass spell-like-feats. - if(AI_ActionUseSpellLikeFeat(nFeat, nSpellId)) - { - // 14: "[DCR:Feat] [ID] " + IntToString(nFeat) + " [Enemy] " + GetName(oObject) - DebugActionSpeakByInt(14, OBJECT_SELF, nFeat); - SetAIInteger(AI_LAST_SUMMONED_LEVEL, nSummonLevel); - return TRUE; - } - } - else - { - // Check GetHasSpell as long as we are not silenced, and have right modifier, and - // the object is seen (this is a backup for it!) - if(!GlobalSilenceSoItems && - (nRequirement == FALSE || GlobalSpellAbilityModifier >= nRequirement) && - GetHasSpell(nSpellId)) - { - // Make sure it is a spell, not an ability - if(nRequirement > FALSE) - { - // Attempt Concentration Check (Casting a spell, not an item) - if(AI_AttemptConcentrationCheck(GlobalSpellTarget)) return TRUE; - } - else - { - // Turn off all modes - remember, we can't use expertise with spellcasting! - AI_SetMeleeMode(); - } - // Set time stop stored to this spell. - AI_SetTimeStopStored(nSpellId); - - // 9: "[DCR:Casting] NormalSpell [ID] " + IntToString(nSpellId) + " [Target] " + GetName(oTarget) + " [Location] " + IntToString(bLocation) - DebugActionSpeakByInt(9, GlobalSpellTarget, nSpellId); - - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - // Equip the best shield we have - AI_EquipBestShield(); - - // Target a special location. - location lTarget = AI_GetSummonLocation(); - - // Fire ActionSpellAtLocation at the given location - // 1.3 fix - Until ActionCastSpellAtLocation works with METAMAGIC - // it will cheat-cast, and decrement the spell by one, with no metamagic. - ActionCastSpellAtLocation(nSpellId, lTarget, METAMAGIC_NONE, TRUE); - DecrementRemainingSpellUses(OBJECT_SELF, nSpellId); - // Alway stop - we use else here, so we always do an action! :-D - return TRUE; - } - } - // No summon created - return FALSE; -} -// Gets an approprate summoning location. If we are set to summon better, we -// should get a good location between us and an enemy, else, it'll just return -// our location. -location AI_GetSummonLocation() -{ - // Get the location to cast the summoning spell at. - // It will be a location between us and our melee target, or - // our last hostile actor, if not in 5 M, or else us - location lTarget; - // - Summon spells have a 8M, short, range. - object oTarget = OBJECT_INVALID; - if(GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER)) - { - oTarget = GetLastHostileActor(); - if(AI_GetTargetSanityCheck(oTarget) && GetDistanceToObject(oTarget) <= 16.0) - { - // Use oTarget (Last hostile actor) - // oTarget = oTarget; - } - else if(GetDistanceToObject(GlobalRangedTarget) <= 16.0) - { - // Use our GlobalRangedTarget - oTarget = GlobalRangedTarget; - } - if(GetDistanceToObject(GlobalMeleeTarget) <= 16.0) - { - // Use our GlobalMeleeTarget - oTarget = GlobalMeleeTarget; - } - else - { - // Just cast it at ourselves. - return GetLocation(OBJECT_SELF); - } - } - else - { - // Just cast it at ourselves. - return GetLocation(OBJECT_SELF); - } - - // Taken from bioware's summon allies - half way between the targets. - // Because we get a maximum range of 16, it means the range will be 8. - vector vTarget = GetPosition(oTarget); - vector vSource = GetPosition(OBJECT_SELF); - vector vDirection = vTarget - vSource; - float fDistance = VectorMagnitude(vDirection) / 2.0; - vector vPoint = VectorNormalize(vDirection) * fDistance + vSource; - lTarget = Location(GetArea(OBJECT_SELF), vPoint, DIRECTION_NORTH); - - // Return lTarget. - return lTarget; -} -// If they have nFeat, they cheat-cast nSpell at oTarget. -// - This is a workaround for any feat, which acts as a spell, IE: A spell like feat, -// (a feat with casting times and so on) and more importantly, also will cast -// the nSpell if they have it anyway! so is useful for any feat.2da which -// references the spells.2da for its effects. -// 1.4: Added the fact they can be normal spells. -int AI_ActionUseSpellLikeFeat(int nFeat, int nSpell, object oTarget = OBJECT_SELF) -{ - // Check for nSpell's and nFeat's effect. nSpell is probably the more important. - if(GetHasSpellEffect(nSpell, oTarget) || GetHasFeatEffect(nFeat, oTarget)) return FALSE; - - // If they have the spell (or monster ability version) - if(GetHasSpell(nSpell)) - { - // Cast it as a normal spell. Can be assigned via. monster abilties. - // Cheat cast the spell - - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - - // Cast it normally. - ActionCastSpellAtObject(nSpell, oTarget); - return TRUE; - } - else if(GetHasFeat(nFeat)) - { - // 14: "[DCR:Feat] [ID] " + IntToString(nFeat) + " [Enemy] " + GetName(oTarget) - DebugActionSpeakByInt(14, oTarget, nFeat); - - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - - // Cheat cast the spell - ActionCastSpellAtObject(nSpell, oTarget, METAMAGIC_NONE, TRUE); - - // Decrement casting of it. - DecrementRemainingFeatUses(OBJECT_SELF, nFeat); - return TRUE; - } - return FALSE; -} - -// This attempts to check the talent TALENT_CATEGORY_HARMFUL_RANGED, 2, which -// holds grenades. Easy checks. -// TRUE if they fire a grenade. -int AI_AttemptGrenadeThrowing(object oTarget) -{ - // 1.4 Pre-beta - no items for now. - return FALSE; -/* - int bReturn = FALSE; - // Check if the items is a grenade: - // SPELL_GRENADE_ACID - 1d6 Acid Damge/Target, or 1 splash. - // SPELL_GRENADE_CALTROPS - Up to 25 normal damage, at 1 Damage/round to an AOE - // SPELL_GRENADE_CHICKEN - Chicken - fires a chicken and fireball - // SPELL_GRENADE_CHOKING - Stinking cloud type effect, dazes on fort save. - // SPELL_GRENADE_FIRE - 1d6 fire damage/target, or 1 splash - // SPELL_GRENADE_HOLY - 2d4 Divine Damage to undead, 1 to undead in splash - // SPELL_GRENADE_TANGLE - Entangles spell target, reflex save. - // SPELL_GRENADE_THUNDERSTONE - Deafens against a DC 15 fort save, AOE. - - // 744 Grenade_FireBomb - Big fire 'nade. Has an AOE after - // 745 Grenade_AcidBomb - Big Acid 'nade. Has an AOE after damage - - if((ItemHostRanged >= SPELL_GRENADE_FIRE && - ItemHostRanged <= SPELL_GRENADE_CALTROPS) || - ItemHostRanged == 744 || ItemHostRanged == 745) - { - // We have a valid item grenade. We then throw it (or attempt to!) - // - Check holy grenade not firing Versus non-undead - if(ItemHostRanged == SPELL_GRENADE_HOLY && - MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) - { - // Stop as they are not undead - return FALSE; - } - - // We fire the spell at the target if they are seen - // - If SpellTargetSeen is TRUE, fire at them - int bLocation = FALSE; - if(!GlobalSeenSpell) - { - bLocation = TRUE; - } - - // Apply EffectCutsceneImmobilize. It only removes ones with no spell ID anyway :-D - AI_SpecialActionApplyItem(); - - talent tBestOfIt = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_RANGED, 20); - // JUST to make sure! - if(GetIsTalentValid(tBestOfIt) && - GetIdFromTalent(tBestOfIt) == ItemHostRanged) - { - // 15: "[DCR:Casting] Grenade [ID] " + IntToString(ItemHostRanged) + " [Target] " + GetName(oTarget) + " [Location] " + IntToString(bLocation) - DebugActionSpeakByInt(15, GlobalSpellTarget, IntToString(bLocation)); - // Equip the best shield we have - AI_EquipBestShield(); - // Use this only for items, so we should not have the spell. - if(bLocation) - { - ActionUseTalentAtLocation(tBestOfIt, GetLocation(oTarget)); - } - else //if(!GetObjectSeen(GlobalSpellTarget)) // Should be seen - checked before. - { - ActionUseTalentOnObject(tBestOfIt, oTarget); - } - bReturn = TRUE; - } - // remove the EffectCutsceneImmobilize, if so. - AI_SpecialActionRemoveItem(); - - // Lasts...recheck items - // TALENT_CATEGORY_HARMFUL_RANGED is always checked for items. - ActionDoCommand(AI_SetItemTalentValue(TALENT_CATEGORY_HARMFUL_RANGED)); - } - return bReturn;*/ -} -/*:://///////////////////////////////////////////// -//:: Name: GetBestSpontaeousHealingSpell -//:://///////////////////////////////////////////// -// This will return the best spontaeous healing spell, so: -// - It uses just normal GetHasSpell for the clerical healing spells. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_GetBestSpontaeousHealingSpell() -{ - if(GetHasSpell(SPELL_CURE_CRITICAL_WOUNDS)) - { - return SPELL_CURE_CRITICAL_WOUNDS; - } - else if(GetHasSpell(SPELL_CURE_SERIOUS_WOUNDS)) - { - return SPELL_CURE_SERIOUS_WOUNDS; - } - else if(GetHasSpell(SPELL_CURE_MODERATE_WOUNDS)) - { - return SPELL_CURE_MODERATE_WOUNDS; - } - else if(GetHasSpell(SPELL_CURE_LIGHT_WOUNDS)) - { - return SPELL_CURE_LIGHT_WOUNDS; - } - else if(GetHasSpell(SPELL_CURE_MINOR_WOUNDS)) - { - return SPELL_CURE_MINOR_WOUNDS; - } - // False = no spell - return FALSE; -} - -/*:://///////////////////////////////////////////// -//:: Name: AI_SetUpUs -//:://///////////////////////////////////////////// - This sets up US, the user! :-) - - Determines class to use, dragon or not. - - And some other things that don't need to check allies/enemies for. - - Intelligence and so on, global effects of us and so on ;-) -//:://///////////////////////////////////////////*/ -void AI_SetUpUs() -{ - int nLastSpellType, nClass1, nClass2, nClass3, nLevel1, nLevel2, nLevel3, - nState1, nState2, nState3, nUseClass, nCurrent; - object oSummon; - float fTotal; - // We set up what intelligence we have (level). See OnSpawn for more info - // Default is 10, top 10, bottom 1. - GlobalIntelligence = GetBoundriedAIInteger(AI_INTELLIGENCE, 10, 10, 1); - // Checks the 3 classes, and returns one of them randomly based on how many they - // have in that level compared to the other 2. - GlobalOurHitDice = GetHitDice(OBJECT_SELF); - // HP - GlobalOurCurrentHP = GetCurrentHitPoints(); - GlobalOurMaxHP = GetMaxHitPoints(); - // Use Floats to get Decimal places. - GlobalOurPercentHP = AI_GetPercentOf(GlobalOurCurrentHP, GlobalOurMaxHP); - // AI - just normal. More added/subtracted be;pw - GlobalOurAC = GetAC(OBJECT_SELF); - switch(GetCreatureSize(OBJECT_SELF)) - { - case CREATURE_SIZE_TINY: GlobalOurAC += 2; break; - case CREATURE_SIZE_SMALL: GlobalOurAC += 1; break; - case CREATURE_SIZE_LARGE: GlobalOurAC -= 1; break; - case CREATURE_SIZE_HUGE: GlobalOurAC -= 2; break; - } - GlobalOurBaseAttackBonus = GetBaseAttackBonus(OBJECT_SELF); - // Spell Ranged Attacking - if(GetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER)) - { - SRA = TRUE; - } - // Set up the extra % to random cast - GlobalRandomCastModifier = GlobalIntelligence * 2; - // - 2% extra at 1, 20% at 10 :-) - - // Set if we are a global buffer - GlobalWeAreBuffer = GetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER); - - // Set if we only use items - GlobalSilenceSoItems = AI_GetAIHaveEffect(GlobalEffectSilenced); - - // If we have any of the silent feats, epic, we ignore any silence we have. - if(GlobalSilenceSoItems) - { - if(GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1) || - GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2) || - GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3)) - { - GlobalSilenceSoItems = FALSE; - } - } - - // Our reach is the distance we can immediantly attack, normally. - GlobalOurReach = IntToFloat(GetCreatureSize(OBJECT_SELF) * 4) + 1.0; - // Sets up the class to use. - fTotal = IntToFloat(GlobalOurHitDice); - nClass1 = GetClassByPosition(1); - nClass2 = GetClassByPosition(2); - nClass3 = GetClassByPosition(3); - - // If we only have one class, we buckle out here. - if(nClass2 == CLASS_TYPE_INVALID) - { - GlobalOurChosenClass = nClass1; - GlobalOurChosenClassLevel = GetLevelByClass(nClass1); - } - else - { - // Else, we DO do this each round, because if we have more then one - // class, we randomly choose which one we "are", for cirtain (although - // not many) choices made in the AI. - nLevel1 = GetLevelByClass(nClass1); - nLevel2 = GetLevelByClass(nClass2); - nLevel3 = GetLevelByClass(nClass3); - // Set up how much % each class occupies. - nState1 = FloatToInt((IntToFloat(nLevel1) / fTotal) * 100); - nState2 = FloatToInt((IntToFloat(nLevel2) / fTotal) * 100) + nState1; - nState3 = FloatToInt((IntToFloat(nLevel3) / fTotal) * 100) + nState2; - // Randomise the % we pick - nUseClass = d100(); - // Set the class, and that classes level. - if(nUseClass <= nState1) - { - GlobalOurChosenClass = nClass1; - GlobalOurChosenClassLevel = nLevel1; - } - else if(nUseClass > nState1 && nUseClass <= nState2) - { - GlobalOurChosenClass = nClass2; - GlobalOurChosenClassLevel = nLevel2; - } - else - { - GlobalOurChosenClass = nClass3; - GlobalOurChosenClassLevel = nLevel3; - } - } - - // Intelligence based spellcaster. - if(GlobalOurChosenClass == CLASS_TYPE_WIZARD) - { - GlobalSpellAbilityModifier = GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE); - GlobalSpellBaseSaveDC = 10 + GetAbilityModifier(ABILITY_INTELLIGENCE); - } - // Wisdom based spellcaster - else if(GlobalOurChosenClass == CLASS_TYPE_DRUID || - GlobalOurChosenClass == CLASS_TYPE_CLERIC) - { - GlobalSpellAbilityModifier = GetAbilityScore(OBJECT_SELF, ABILITY_WISDOM); - GlobalSpellBaseSaveDC = 10 + GetAbilityModifier(ABILITY_WISDOM); - } - // Charisma - else if(GlobalOurChosenClass == CLASS_TYPE_BARD || - GlobalOurChosenClass == CLASS_TYPE_SORCERER) - { - // Summoning specials (and some others). If we are a bard/sorceror, it means - // we cast 1 from X spells, not just "Only got that spell". - GlobalWeAreSorcerorBard = TRUE; - // Charisma based spellcaster - GlobalSpellAbilityModifier = GetAbilityScore(OBJECT_SELF, ABILITY_CHARISMA); - GlobalSpellBaseSaveDC = 10 + GetAbilityModifier(ABILITY_CHARISMA); - } - else // Monster - { - // - We set ability modifier to 25, so that they cast all spells - // and monster abilties - GlobalSpellAbilityModifier = 25; - GlobalSpellBaseSaveDC = 10 + GetAbilityModifier(ABILITY_CHARISMA); - } - // Set up GlobalSaveStupidity, 10 - Intelligence - // 0 is better then 10! Bascially, if they are immune (EG: Massive fortitude - // fighter VS death save) then taking 10 from thier save stat means a lower - // intelligence caster will fire it against immune beings. - // - Also used in AOE checking. - GlobalSaveStupidity = 10 - GlobalIntelligence; - - // Set up SR roll - // - 20 + Class level + 2 for spell penetration, +4 for greater. - // - We always take it as a 20 - but we set this for a huge amount. - // NOTE: we check HD only - because of monster abilities. - GlobalSpellPenetrationRoll = GlobalOurHitDice + 20; - // Check for feats - if(GetHasFeat(FEAT_EPIC_SPELL_PENETRATION)) - { - GlobalSpellPenetrationRoll += 6; - } - else if(GetHasFeat(FEAT_GREATER_SPELL_PENETRATION)) - { - GlobalSpellPenetrationRoll += 4; - } - else if(GetHasFeat(FEAT_SPELL_PENETRATION)) - { - GlobalSpellPenetrationRoll += 2; - } - // Summon checking (special) - // Used for summoned creatures. - oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); - if(GetIsObjectValid(oSummon) && !GetIsDead(oSummon)) - { - // If valid, we can use the level of the last cast to check if valid. - int nCurrentSummonLevel = GetAIInteger(AI_LAST_SUMMONED_LEVEL); - // - Never replace epic, or elemental sparm, or balors (10, 11/12) - // - Never replace sorcerors or bards - if(!GlobalWeAreSorcerorBard && nCurrentSummonLevel <= 9) - { - // We check thier HP. If they are under x6% and under 30HP, we may summon - // a summon over this one that exsists. - nCurrent = GetCurrentHitPoints(oSummon); - if(((nCurrent * 6) < GetMaxHitPoints(oSummon)) && (nCurrent <= 30)) - { - // Make it -1, so that we will say, summon a level 5 summon - // over a damaged level 6, but never a level 2 summon in replacement. - GlobalCanSummonSimilarLevel = nCurrentSummonLevel - 1; - } - } - // If we have not set GlobalCanSummonSimilarLevel, we set it so we - // should not summon anything at all! - if(!GlobalCanSummonSimilarLevel) - { - GlobalCanSummonSimilarLevel = 100; - } - } - else - { - // Reset to 0, false, to summon any monster - DeleteAIInteger(AI_LAST_SUMMONED_LEVEL); - GlobalCanSummonSimilarLevel = FALSE; - } -} -/*:://///////////////////////////////////////////// -//:: Name: AI_GetNearbyFleeObject -//:://///////////////////////////////////////////// - This returns an object, not seen not heard ally, who we - might flee to. Uses a loop, and runs only when we are going to flee for sure. -//:://///////////////////////////////////////////*/ -object AI_GetNearbyFleeObject() -{ - object oReturn, oGroup, oEndReturn; - int nCnt; - string sCheck; - if(GetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER)) - { - oReturn = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, 1, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD, - CREATURE_TYPE_IS_ALIVE, TRUE); - if(GetIsObjectValid(oReturn)) // Need LOS check - { - return oReturn; - } - } - if(GetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER)) - { - sCheck = GetLocalString(OBJECT_SELF, AI_FLEE_OBJECT); - if(sCheck != "") - { - // We need to get the nearest of sCheck objects we cannot see nor hear, and - // over 6 meters just in case. - nCnt = 1; - oReturn = GetNearestObjectByTag(sCheck, OBJECT_SELF, nCnt); - while(GetIsObjectValid(oReturn)) - { - // this should be simple enough to break when the object is valid. - if(!GetObjectSeen(oReturn) && !GetObjectHeard(oReturn) && - GetDistanceToObject(oReturn) > 6.0) // (must be same area) - { - // Stop if valid - return oReturn; - } - nCnt++; - oReturn = GetNearestObjectByTag(sCheck, OBJECT_SELF, nCnt); - } - if(!GetIsObjectValid(oReturn)) - { - // Just get any! - oReturn = GetObjectByTag(sCheck); - if(GetIsObjectValid(oReturn)) - { - return oReturn; - } - } - } - } - // Reset - oReturn = OBJECT_INVALID; - oGroup = OBJECT_INVALID; - // By default: - // At 1-3 INT, we run to the nearest non-seen, non-heard. - // At 4-7, we run to the best ally group, within 35M, or an ally who is +5 our HD. - // At 8+, we run to the best group, in 70M, or an ally who is +8 our HD, and we shout for help (HB) - - if(GlobalIntelligence <= 3) - { - // Don't care if not valid! - oReturn = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, 1, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD, - CREATURE_TYPE_IS_ALIVE, TRUE); - return oReturn; - } - - // Counters ETC - int nBestAllyGroupTotal, nCurrentGroupHD, nGroupCnt, nIfHigherBreak; - // Set floats - float fMaxCheckForGroup, fMaxGroupRange; - // Check range (Ie people we get near to us, need to be in this range) - fMaxCheckForGroup = 100.0;// 10 tiles - if(GlobalIntelligence >= 8) fMaxCheckForGroup *= 2; // Double check range. - fMaxGroupRange = 15.0;// Default. No need to change. - - // We break when we have a group totaling some value of our HD... - // It goes up as intelligence does.(IE 4, 5, 6, 7, 8, 9 or 10 * HD/2 + 1) - nIfHigherBreak = GlobalOurHitDice * ((GlobalIntelligence / 2) + 1); - // Note to self: THis means highest intelligence runs futhest away, hopefully smarter. - // Note: Need an acceptable limit. 10 * 20 is 200, now max 140 with - // level 40 creatures running around. - if(nIfHigherBreak > 140) nIfHigherBreak = 140; - - nCnt = 1;// Start at 1 nearest. - // Nearest ally is got...we use not seen/not heard, not PC and friendly. - // Making it oReturn might return something at the very least. - oReturn = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, nCnt, - CREATURE_TYPE_IS_ALIVE, TRUE, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - // Need to be valid, the things we get, and not in X float meters. - while(GetIsObjectValid(oReturn) && GetDistanceToObject(oReturn) <= fMaxCheckForGroup) - { - // Loop the people around him, - nCurrentGroupHD = GetHitDice(oReturn); - nGroupCnt = 1; - oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - oReturn, nGroupCnt, - CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - // Remember 15M range limit. - while(GetIsObjectValid(oGroup) && - GetDistanceBetween(oReturn, oGroup) <= fMaxGroupRange) - { - nCurrentGroupHD += GetHitDice(oGroup); - // Get next group object - nGroupCnt++; - oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - oReturn, nGroupCnt, - CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - } - // Break time. - // It is (Int * HD/2 + 1), max 140. Shouldn't be too bad. - if(nCurrentGroupHD > nIfHigherBreak) - { - // Return this person - return oReturn; - } - // Sets the ally, if got lots of allies. (Or a mass of HD) - else if(nCurrentGroupHD > nBestAllyGroupTotal) - { - nBestAllyGroupTotal = nCurrentGroupHD; - oEndReturn = oReturn; - } - nCnt++; - oReturn = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, nCnt, - CREATURE_TYPE_IS_ALIVE, TRUE, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - } - // By default, return nothing (oEndReturn = OBJECT_INVALID unless set in loop) - return oEndReturn; -} -/*:://///////////////////////////////////////////// -//:: Name: AI_CompareTimeStopStored -//:://///////////////////////////////////////////// - TRUE if the spell is one recorded as being cast before in time stop. - - Checks Global "Are we in time stop?" and returns FALSE if not in time stop -//:://///////////////////////////////////////////*/ -int AI_CompareTimeStopStored(int nSpell1, int nSpell2 = AI_SPELL_INVALID, int nSpell3 = AI_SPELL_INVALID, int nSpell4 = AI_SPELL_INVALID) -{ - // Set array size is under 0, IE no array, stop. - if(GlobalTimeStopArraySize < 0) return FALSE; - if(GlobalInTimeStop) - { - int nSpell = AI_SPELL_INVALID; - int nCnt; - if(GlobalTimeStopArraySize == 0) - { - GlobalTimeStopArraySize = GetAIInteger(TIME_STOP_LAST_ARRAY_SIZE); - if(GlobalTimeStopArraySize == 0) - { - GlobalTimeStopArraySize = -1; - } - } - if(GlobalTimeStopArraySize > 0) - { - for(nCnt = 1; nCnt <= GlobalTimeStopArraySize; nCnt++) - { - nSpell = GetAIConstant(TIME_STOP_LAST_ + IntToString(nCnt)); - if(nSpell == nSpell1 || - nSpell == nSpell2 || - nSpell == nSpell3 || - nSpell == nSpell4) - { - return TRUE; - } - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: AI_GetBestFriendyAreaSpellTarget -//:://///////////////////////////////////////////// - Returns the object to the specifications: - Within nRange (float) - The most targets around the creature in nRange, in nSpread. - Can be the caster, of course -//:://///////////////////////////////////////////*/ -/* UNCOMMENT -object AI_GetBestFriendyAreaSpellTarget(float fRange, float fSpread, int nShape) -{ - object oGroupies, oSpellTarget, oTarget; - int nCountOnPerson, nMostOnPerson, nCnt; - location lTarget; - // Will always at least return ourselves. - oSpellTarget = OBJECT_SELF; - nCnt = 1; - // Gets the nearest friend...the loops takes care of range. - oTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - // Start loop. Checks range here. - while(GetIsObjectValid(oTarget) && GetDistanceToObject(oTarget) <= fRange) - { - lTarget = GetLocation(oTarget); - // Starts the count at 0, as first object in shape will also include the target. - nCountOnPerson = 0; - // Reset/Start counting the spread on oTarget. - oGroupies = GetFirstObjectInShape(nShape, fSpread, lTarget); - // If oGroupies is invalid, nothing. - while(GetIsObjectValid(oGroupies)) - { - // Only add one if the person is an friend - if(GetIsFriend(oGroupies)) - { - nCountOnPerson++; - } - oGroupies = GetNextObjectInShape(nShape, fSpread, lTarget); - } - if(nCountOnPerson > nMostOnPerson) - { - nMostOnPerson = nCountOnPerson; - oSpellTarget = oTarget; - } - nCnt++; - oTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - } - // Will always return self if anything - return oSpellTarget; -} END UNCOMMENT*/ -// If the target will always save against nSaveType, and will take no damage, returns TRUE -// * Target is GlobalSpellTarget. Save is GlobalSpellTargetWill ETC. -// * nSaveType - SAVING_THROW WILL/REFLEX/FORTITUDE -// * nSpellLevel - Level of the spell being cast. -int AI_SaveImmuneSpellTarget(int nSaveType, int nSpellLevel) -{ - if(nSaveType == SAVING_THROW_FORT) - { - // Basic one here. Some addition and comparison. - if(GlobalSpellTargetFort - GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) return TRUE; - } - else if(nSaveType == SAVING_THROW_REFLEX) - { - // Evasion - full damaged saved if the save is sucessful. - if(GetHasFeat(FEAT_EVASION, GlobalSpellTarget) || - GetHasFeat(FEAT_IMPROVED_EVASION, GlobalSpellTarget)) - { - if(GlobalSpellTargetReflex - GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) return TRUE; - } - } - else if(nSaveType == SAVING_THROW_WILL) - { - // Slippery mind has a re-roll. 1.3 - Ignore - if(GlobalSpellTargetWill - GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) - { - return TRUE; - } - } - return FALSE; -} -// If the target will always save against nSaveType, and will take no damage, returns TRUE -// * oTarget - who saving against spell. -// * nSaveType - SAVING_THROW WILL/REFLEX/FORTITUDE -// * The save used is GetReflexSavingThrow* ETC. -// * nSpellLevel - Level of the spell being cast. -int AI_SaveImmuneAOE(object oTarget, int nSaveType, int nSpellLevel) -{ - // GlobalSaveStupidity = 10 - Intelligence. Basically, lower intellgence - // will fire spells which may do nothing more often. - - // Return if no level (innate ability normally) - if(nSpellLevel == FALSE) return FALSE; - if(nSaveType == SAVING_THROW_FORT) - { - // Basic one here. Some addition and comparison. - if(GetFortitudeSavingThrow(oTarget) - GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) return TRUE; - } - else if(nSaveType == SAVING_THROW_REFLEX) - { - // Evasion - full damaged saved if the save is sucessful. - if(GetHasFeat(FEAT_EVASION, oTarget) || - GetHasFeat(FEAT_IMPROVED_EVASION, oTarget)) - { - if(GetReflexSavingThrow(oTarget)- GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) return TRUE; - } - } - else if(nSaveType == SAVING_THROW_WILL) - { - // Slippery mind has a re-roll. We ignore in 1.3 - if(GetWillSavingThrow(oTarget) - GlobalSaveStupidity >= (GlobalSpellBaseSaveDC + nSpellLevel)) - { - return TRUE; - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: SpellResistanceImmune -//:://///////////////////////////////////////////// - This checks targets spell resistance. If our level + 20 is below thier - resistance, the spell won't affect them. -//::////////////////////////////////////////////*/ -int AI_SpellResistanceImmune(object oTarget) -{ - // Check the targets spell resistance VS our GlobalSpellPenetrationRoll - // GlobalSpellPenetrationRoll = Our Hit Dice + Special help feats. - if(GetSpellResistance(oTarget) >= GlobalSpellPenetrationRoll) - { - return TRUE; - } - // Note: Removed monk feat, and spell resistance spell, but not sure if - // it checks alignment-orientated SR's... - // 1.4: Removed redudant code. Even if it isn't checked, not much is lost. - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: GetSpellLevelEffect -//:://///////////////////////////////////////////// - This returns a number, 1-4. This number is the levels - of spell they will be totally immune to. -//::////////////////////////////////////////////*/ -int AI_GetSpellLevelEffect(object oTarget) -{ - int nNatural = GetLocalInt(oTarget, AI_SPELL_IMMUNE_LEVEL); - // Stop here, if natural is over 4 - if(nNatural > 4) return nNatural; - - // Big globe affects 4 or lower spells - if(GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, oTarget) || nNatural >= 4) - return 4; - // Minor globe is 3 or under - if(GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oTarget) || - // Shadow con version - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, oTarget) || - nNatural >= 3) - return 3; - // 2 and under is ethereal visage. - if(GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, oTarget) || nNatural >= 2) - return 2; - // Ghostly Visarge affects 1 or 0 level spells, and any spell immunity. - if(GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, oTarget) || nNatural >= 1 || - // Or shadow con version. - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE, oTarget)) - return 1; - // Return nNatural, which is 0-9 - return FALSE; -} -// Input oTarget and nLevel and it will check if they are automatically -// immune to the spell being cast. -int AI_GetSpellLevelEffectAOE(object oTarget, int nLevel = 9) -{ - // Return if no level (innate ability normally) - if(nLevel == FALSE) return FALSE; - // Checks any NPC natural total spell immunities (like globes, but on hides) - // - On PC's, the local will return 0. this saves an extra !GetIsPC check. - if(nLevel <= GetLocalInt(oTarget, AI_SPELL_IMMUNE_LEVEL)) - { - return TRUE; - } - // Big globe affects 4 or lower spells - if(nLevel <= 4 && GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, oTarget)) - { - return TRUE; - } - // Minor globe is 3 or under - if(nLevel <= 3 && (GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oTarget) || - // Shadow con version - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, oTarget))) - { - return TRUE; - } - // 2 and under is ethereal visage. - if(nLevel <= 2 && GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, oTarget)) - { - return TRUE; - } - // 1 and under is ghostly visage. - if(nLevel <= 1 && (GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, oTarget) || - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE))) - { - return TRUE; - } - // False if a level 5+ spell - return FALSE; -} - -// Returns TRUE if any of the checks the oGroupTarget is immune to. -int AI_AOEDeathNecroCheck(object oGroupTarget, int bNecromanticSpell, int bDeathImmune) -{ - if(bNecromanticSpell) - { - if(GetHasSpellEffect(SPELL_DEATH_WARD, oGroupTarget) || - GetHasSpellEffect(SPELL_UNDEATHS_ETERNAL_FOE, oGroupTarget)) return TRUE; - } - if(bDeathImmune) - { - return GetIsImmune(oGroupTarget, IMMUNITY_TYPE_DEATH); - } - return FALSE; -} -/*::////////////////////////////////////////////// -//:: Name Get the best HOSTILE spell target -//:: Function Name AI_GetBestAreaSpellTarget -//::////////////////////////////////////////////// - Returns the object to the specifications: - * fRange - Within fRange (fTouchRange 2.25, fShortRange 8.0, fMediumRange 20.0, fLongRange = 40.0) - * fSpread - Radius Size - RADIUS_SIZE_* constants (1.67 to 10.0M) - * nLevel - Used for saving throws/globe checks. Level of the spell added to save checks - * nSaveType = FALSE - SAVING_THROW_FORT/REFLEX/WILL. Not type, but the main save applied with it. - * nShape = SHAPE_SPHERE - SHAPE_* constants. - * bFriendlyFire = FALSE - Can this hurt allies? Best thing is to put - GlobalFriendlyFireHostile - GetIsReactionTypeHostile(oTarget) == TRUE - GlobalFriendlyFireFriendly - GetIsReactionTypeFriendly(oTarget) == FALSE - FALSE - Cannot hurt allies (GetIsEnemy/!GetIsFriend used) - * bDeathImmune = FALSE - Does it use a death save? (!GetIsImmune) - * bNecromanticSpell = FALSE - Is it a necromancy spell? Undead are also checked in this. - - 1.4 change: Cones ignore bFriendlyFire. - 1.4: MAYBE: should make it so fRange is ignored - since if we want SRA, we - will loop the SpellAllSpells() up to 4 times. -//::////////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -object AI_GetBestAreaSpellTarget(float fRange, float fSpread, int nLevel, int nSaveType = FALSE, int nShape = SHAPE_SPHERE, int bFriendlyFire = FALSE, int bDeathImmune = FALSE, int bNecromanticSpell = FALSE) -{ - // If it is a cone, we ignore bFriendlyFire and set it to FALSE - if(nShape == SHAPE_CONE || nShape == SHAPE_SPELLCONE) - { - bFriendlyFire = FALSE; - } - // Before we start, if it can harm us, we don't fire it if there are no - // enemies out of the blast, if it was centered on us - if(bFriendlyFire) - { - if(GlobalRangeToFuthestEnemy <= fSpread) return OBJECT_INVALID; - } - // Delcare objects - // (Target = Loop of nearest creatures. oResturnTarget = Who to return, - // and oGroupTarget is GetFirst/Next in nShape around oTarget) - object oTarget, oReturnTarget, oGroupTarget; - // Delcare Integers - int nCnt, nCntEnemiesOnTarget, nCntAlliesOnTarget, iNoHittingAllies, - nMostOnPerson, nMaxAlliesToHit, nOurToughness; - // Declare Booleans - int bWillHitAlly, bNoHittingAllies, bCheckAlliesHP; - location lTarget; - // Float values - float fDistance, fTargetMustBeFrom; - - // - We don't check specific immunities with cirtain properties/settings - // If we have NOT got the setting and <= 6 int - if(GlobalIntelligence <= 6 && - !GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER)) - { - bDeathImmune = FALSE; - bNecromanticSpell = FALSE; - } - // NOT got extra checks in. - if(!GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER)) - { - nLevel = 5; // This makes the spell think it gets past globes. - // - Problem is that the save DC will increase. Won't affect much. - } - - // We set up the distance that oTarget must be away from us, if it is - // no friendly fire, it will be 0.0 meters, so we always use them. - // - defaults to 0.0 meters unless FF is on - if(bFriendlyFire) - { - fTargetMustBeFrom = fSpread + 0.3; - } - - // Can we hit allies? - bNoHittingAllies = GetSpawnInCondition(AI_FLAG_COMBAT_NEVER_HIT_ALLIES, AI_COMBAT_MASTER); - // Do we check thier HP? (Allies) to see if they survive? - bCheckAlliesHP = GetSpawnInCondition(AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE, AI_COMBAT_MASTER); - - // We will subtract all non-enemies within -8 challenge, upwards. - nOurToughness = GlobalOurHitDice - GetBoundriedAIInteger(AI_AOE_HD_DIFFERENCE, -8, 0, -30); - // The maximum number of allies we can hit... - nMaxAlliesToHit = GetBoundriedAIInteger(AI_AOE_ALLIES_LOWEST_IN_AOE, 4, 90, 1); - // The target to return - set to invalid to start - oReturnTarget = OBJECT_INVALID; - - nCnt = 1; - // - 1.3 Change - made to target only creatures (trying to better performance) - oTarget = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF, nCnt); - // Need distance a lot. - fDistance = GetDistanceToObject(oTarget); - // Need to see the target, within nRange around self. - while(GetIsObjectValid(oTarget) && fDistance <= fRange) - { - // Need seen/heard target - // * The actual target can be a dead person, or anything, just something - // with a valid location. We thusly do not use AI_GetTargetSanityCheck() - // * NOTE: Ethereal checks NOT here, we can target any ethereal persons - // location (which might be better!) - if(GetObjectSeen(oTarget) || GetObjectHeard(oTarget)) - { - // Will not fire on self, if it is too near. - if(fDistance > fTargetMustBeFrom) - { - // Reset Targets - // - The person starts the spread at 0, because the object in shape - // will return the target as well. - nCntEnemiesOnTarget = FALSE; - nCntAlliesOnTarget = FALSE; - bWillHitAlly = FALSE; - // Must sue this - needs to use the correct shape - // This only gets creatures in shape to check. - lTarget = GetLocation(oTarget); - oGroupTarget = GetFirstObjectInShape(nShape, fSpread, lTarget); - // If oGroupies is invalid, nothing. Should not - as target will be returned at least. - while(GetIsObjectValid(oGroupTarget) && bWillHitAlly != TRUE) - { - // Sanity check for checking oGroupTarget - if(oGroupTarget != OBJECT_SELF && - // * This adds a check for seen or heard, which makes it more - // realistic! - AI_GetTargetSanityCheck(oGroupTarget) && - !AI_SpellResistanceImmune(oGroupTarget)) - { - // Check necromancy immunity, and death immunity. - // + Save check - // + Level Immunity check - if(!AI_AOEDeathNecroCheck(oGroupTarget, bNecromanticSpell, bDeathImmune) && - !AI_SaveImmuneAOE(oGroupTarget, nSaveType, nLevel) && - !AI_GetSpellLevelEffectAOE(oGroupTarget, nLevel)) - { - if(GetIsEnemy(oGroupTarget)) - { - // Only add one if the person is an enemy, - // and the spell will affect them - nCntEnemiesOnTarget++; - } - // But else if friendly fire, we will subract - // similar non-allies. - else if(bFriendlyFire && - (GetIsFriend(oGroupTarget) || GetFactionEqual(oGroupTarget)) && - GetHitDice(oGroupTarget) >= nOurToughness) - { - if(bNoHittingAllies) - { - bWillHitAlly = TRUE; - } - // We ignore if not got the setting to check HP, - // else, we take one from the nCntEnemiesOnTarget. - else if(bCheckAlliesHP && GetCurrentHitPoints(oGroupTarget) < 50) - { - nCntAlliesOnTarget++; - } - } - } - } - // Get next target in shape - oGroupTarget = GetNextObjectInShape(nShape, fSpread, lTarget); - } - // Make the spell target oTarget if so. - // If it is >= then we set it - it is a futher away target! - if(bWillHitAlly != TRUE && nCntEnemiesOnTarget >= 1 && - nCntAlliesOnTarget <= nMaxAlliesToHit && - ((nCntEnemiesOnTarget - nCntAlliesOnTarget) >= nMostOnPerson)) - { - nMostOnPerson = nCntEnemiesOnTarget - nCntAlliesOnTarget; - oReturnTarget = oTarget; - } - } - } - // Gets the next nearest. - nCnt++; - oTarget = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF, nCnt); - fDistance = GetDistanceToObject(oTarget); - } - // Will OBJECT_INVALID, or the best target in range. - return oReturnTarget; -} -/*:://///////////////////////////////////////////// -//:: Name: AI_SortSpellImmunities -//:://///////////////////////////////////////////// - Sets the Global Hex for the enemy spell target immunties. - - Uses effects loop and GetIsImmune to comprehend the most. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -void AI_SortSpellImmunities() -{ - // Error checking - if(!GetIsObjectValid(GlobalSpellTarget)) return; - // Get our good/evil alignment, for the purposes of the mind immunity - // commonly employed via. Protection From Alignment - int nGoodEvil = GetAlignmentGoodEvil(OBJECT_SELF); - - // Check effects of GlobalSpellTarget - effect eCheck = GetFirstEffect(GlobalSpellTarget); - while(GetIsEffectValid(eCheck)) - { - switch(GetEffectType(eCheck)) - { - case EFFECT_TYPE_TURNED: - case EFFECT_TYPE_FRIGHTENED: - { - AI_SetSpellTargetImmunity(GlobalImmunityFear); - } - break; - case EFFECT_TYPE_STUNNED: - case EFFECT_TYPE_PARALYZE: // Count as stun. Near as dammit - case EFFECT_TYPE_DAZED: // Here for now :-) - { - AI_SetSpellTargetImmunity(GlobalImmunityStun); - } - break; - case EFFECT_TYPE_SLEEP: - { - AI_SetSpellTargetImmunity(GlobalImmunitySleep); - } - break; - case EFFECT_TYPE_POISON: - AI_SetSpellTargetImmunity(GlobalImmunityPoison); - break; - case EFFECT_TYPE_NEGATIVELEVEL: - AI_SetSpellTargetImmunity(GlobalImmunityNegativeLevel); - break; - case EFFECT_TYPE_ENTANGLE: - AI_SetSpellTargetImmunity(GlobalImmunityEntangle); - break; - case EFFECT_TYPE_DOMINATED: - case EFFECT_TYPE_CHARMED: - AI_SetSpellTargetImmunity(GlobalImmunityMind); - break; - case EFFECT_TYPE_CONFUSED: - { - AI_SetSpellTargetImmunity(GlobalImmunityConfusion); - } - break; - case EFFECT_TYPE_DISEASE: - AI_SetSpellTargetImmunity(GlobalImmunityDisease); - break; - case EFFECT_TYPE_CURSE: - AI_SetSpellTargetImmunity(GlobalImmunityCurse); - break; - case EFFECT_TYPE_BLINDNESS: - case EFFECT_TYPE_DEAF: - AI_SetSpellTargetImmunity(GlobalImmunityBlindDeaf); - break; - case EFFECT_TYPE_SLOW: - AI_SetSpellTargetImmunity(GlobalImmunitySlow); - break; - // All - case EFFECT_TYPE_PETRIFY: - // * This should never be set, we do not target petrified people! - AI_SetSpellTargetImmunity(GlobalImmunityPetrify); - break; - // Defualt, check spell ID - default: - { - switch(GetEffectSpellId(eCheck)) - { - // Mantals - case SPELL_GREATER_SPELL_MANTLE: - case SPELL_SPELL_MANTLE: - case SPELL_LESSER_SPELL_MANTLE: - AI_SetSpellTargetImmunity(GlobalImmunityMantalProtection); - break; - // If the target has death ward, they are immune. - case SPELL_DEATH_WARD: - AI_SetSpellTargetImmunity(GlobalImmunityDeath); - break; - // Spells that stop negative energy spells: Shadow Shield, Negative energy protection - case SPELL_SHADOW_SHIELD: - case SPELL_UNDEATHS_ETERNAL_FOE:// New one SoU - { - AI_SetSpellTargetImmunity(GlobalImmunityNegativeEnergy); - AI_SetSpellTargetImmunity(GlobalImmunityNecromancy); - } - break; - case SPELL_NEGATIVE_ENERGY_PROTECTION: - AI_SetSpellTargetImmunity(GlobalImmunityNegativeEnergy); - break; - case SPELL_CLARITY: - case SPELL_MIND_BLANK: - case SPELL_LESSER_MIND_BLANK:// New one SoU - AI_SetSpellTargetImmunity(GlobalImmunityMind); - break; - case SPELL_UNHOLY_AURA: - case SPELL_MAGIC_CIRCLE_AGAINST_GOOD: - case SPELL_PROTECTION_FROM_GOOD:// New one SoU - if(nGoodEvil == ALIGNMENT_GOOD) AI_SetSpellTargetImmunity(GlobalImmunityMind); - break; - case SPELL_HOLY_AURA: - case SPELL_PROTECTION_FROM_EVIL: - case SPELL_MAGIC_CIRCLE_AGAINST_EVIL:// New one SoU - if(nGoodEvil == ALIGNMENT_EVIL) AI_SetSpellTargetImmunity(GlobalImmunityMind); - break; - } - } - break; - } - eCheck = GetNextEffect(GlobalSpellTarget); - } - // Immunity Things - // We only use these if 7+ Intelligence - if(GlobalIntelligence >= 7 || - GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER)) - { - // Necromancy immune if undead - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - (GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD || - GlobalSpellTargetRace == RACIAL_TYPE_CONSTRUCT)) - AI_SetSpellTargetImmunity(GlobalImmunityNecromancy); - // Death immunity - if(!AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - (GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_DEATH) || - GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD || - GlobalSpellTargetRace == RACIAL_TYPE_CONSTRUCT)) - AI_SetSpellTargetImmunity(GlobalImmunityDeath); - // confusion immunity - if(!AI_GetSpellTargetImmunity(GlobalImmunityConfusion) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_CONFUSED)) - AI_SetSpellTargetImmunity(GlobalImmunityConfusion); - // Negative level immunity - if(!AI_GetSpellTargetImmunity(GlobalImmunityNegativeLevel) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL)) - AI_SetSpellTargetImmunity(GlobalImmunityNegativeLevel); - // Mind immunity - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_MIND_SPELLS)) - AI_SetSpellTargetImmunity(GlobalImmunityMind); - // Old ones, I doubt needed with GetIsImmune in. - // - Dragon race, Construct, Undead and Empty Body. - // Fear checking - if(!AI_GetSpellTargetImmunity(GlobalImmunityFear) && - (AI_GetSpellTargetImmunity(GlobalImmunityMind) || - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_FEAR))) - { - AI_SetSpellTargetImmunity(GlobalImmunityFear); - } - // Old ones for fear. - // - Undead, Dragon, Construct, Outsider - // - Feat Aura of courage, resist natures lure - // This stops curses. - if(!AI_GetSpellTargetImmunity(GlobalImmunityCurse) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_CURSED)) - AI_SetSpellTargetImmunity(GlobalImmunityCurse); - // This stops poison. - if(!AI_GetSpellTargetImmunity(GlobalImmunityPoison) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_POISON)) - AI_SetSpellTargetImmunity(GlobalImmunityPoison); - // This will stop blindness/deafness spells - if(!AI_GetSpellTargetImmunity(GlobalImmunityBlindDeaf) && - (GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_BLINDNESS) || - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_DEAFNESS))) - AI_SetSpellTargetImmunity(GlobalImmunityBlindDeaf); - // Stun (And paralsis) - if(!AI_GetSpellTargetImmunity(GlobalImmunityStun) && - (GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_STUN) || - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_PARALYSIS))) - AI_SetSpellTargetImmunity(GlobalImmunityStun); - // This stops entanglement. - if(!AI_GetSpellTargetImmunity(GlobalImmunityEntangle) && - (GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_ENTANGLE) || - GetHasFeat(FEAT_WOODLAND_STRIDE, GlobalSpellTarget))) - AI_SetSpellTargetImmunity(GlobalImmunityEntangle); - // Sleep - if(!AI_GetSpellTargetImmunity(GlobalImmunitySleep) && - (GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_SLEEP) || - GetHasFeat(FEAT_IMMUNITY_TO_SLEEP, GlobalSpellTarget))) - AI_SetSpellTargetImmunity(GlobalImmunitySleep); - // Poison - if(!AI_GetSpellTargetImmunity(GlobalImmunityPoison) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_POISON)) - AI_SetSpellTargetImmunity(GlobalImmunityPoison); - // Disease - if(!AI_GetSpellTargetImmunity(GlobalImmunityDisease) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_DISEASE)) - AI_SetSpellTargetImmunity(GlobalImmunityDisease); - // We don't check these feats for immune disease/poison till checked - // if the immune doesn't include htem - // GetHasFeat(FEAT_RESIST_DISEASE, GlobalSpellTarget) - // GetHasFeat(FEAT_VENOM_IMMUNITY, GlobalSpellTarget) - // GetHasFeat(FEAT_DIAMOND_BODY, GlobalSpellTarget) - if(!AI_GetSpellTargetImmunity(GlobalImmunitySlow) && - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_SLOW)) - AI_SetSpellTargetImmunity(GlobalImmunitySlow); - // Domination (+Charm) - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination)) - { - if(GetIsObjectValid(GetMaster(GlobalSpellTarget)) || - GlobalSpellTargetRace == RACIAL_TYPE_ELEMENTAL || - GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD || - GlobalSpellTargetRace == RACIAL_TYPE_VERMIN || - GlobalSpellTargetRace == RACIAL_TYPE_CONSTRUCT || - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_DOMINATE) || - GetIsImmune(GlobalSpellTarget, IMMUNITY_TYPE_CHARM) || - GetIsObjectValid(GetAssociate(ASSOCIATE_TYPE_DOMINATED))) - { - AI_SetSpellTargetImmunity(GlobalImmunityDomination); - } - } - } - // We won't use petrify on those immune, though. This is taken from - // x0_0_spells. Stops silly basalisks or something. :-) - // - ANY intelligence - if(!AI_GetSpellTargetImmunity(GlobalImmunityPetrify)) - { - switch(GetAppearanceType(GlobalSpellTarget)) - { - case APPEARANCE_TYPE_BASILISK: - case APPEARANCE_TYPE_COCKATRICE: - case APPEARANCE_TYPE_MEDUSA: - case APPEARANCE_TYPE_ALLIP: - case APPEARANCE_TYPE_ELEMENTAL_AIR: - case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: - case APPEARANCE_TYPE_ELEMENTAL_EARTH: - case APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER: - case APPEARANCE_TYPE_ELEMENTAL_FIRE: - case APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER: - case APPEARANCE_TYPE_ELEMENTAL_WATER: - case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: - case APPEARANCE_TYPE_GOLEM_STONE: - case APPEARANCE_TYPE_GOLEM_IRON: - case APPEARANCE_TYPE_GOLEM_CLAY: - case APPEARANCE_TYPE_GOLEM_BONE: - case APPEARANCE_TYPE_GORGON: - case APPEARANCE_TYPE_HEURODIS_LICH: - case APPEARANCE_TYPE_LANTERN_ARCHON: - case APPEARANCE_TYPE_SHADOW: - case APPEARANCE_TYPE_SHADOW_FIEND: - case APPEARANCE_TYPE_SHIELD_GUARDIAN: - case APPEARANCE_TYPE_SKELETAL_DEVOURER: - case APPEARANCE_TYPE_SKELETON_CHIEFTAIN: - case APPEARANCE_TYPE_SKELETON_COMMON: - case APPEARANCE_TYPE_SKELETON_MAGE: - case APPEARANCE_TYPE_SKELETON_PRIEST: - case APPEARANCE_TYPE_SKELETON_WARRIOR: - case APPEARANCE_TYPE_SKELETON_WARRIOR_1: - case APPEARANCE_TYPE_SPECTRE: - case APPEARANCE_TYPE_WILL_O_WISP: - case APPEARANCE_TYPE_WRAITH: - case APPEARANCE_TYPE_BAT_HORROR: - AI_SetSpellTargetImmunity(GlobalImmunityPetrify); - break; - } - } - // Earthquake check removed. -/* Still got: - IMMUNITY_TYPE_ABILITY_DECREASE IMMUNITY_TYPE_AC_DECREASE - IMMUNITY_TYPE_ATTACK_DECREASE IMMUNITY_TYPE_CRITICAL_HIT - IMMUNITY_TYPE_DAMAGE_DECREASE IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE - IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE IMMUNITY_TYPE_SAVING_THROW_DECREASE - IMMUNITY_TYPE_SILENCE IMMUNITY_TYPE_SKILL_DECREASE - IMMUNITY_TYPE_SPELL_RESISTANCE_DECREASE IMMUNITY_TYPE_TRAP */ - -} - -/*:://///////////////////////////////////////////// -//:: Name: AI_ActionDispelAOE -//:://///////////////////////////////////////////// - Dispels or moves out of the oAOE. - - If we have >= nMax AND <= nDamage HP... - AND under nPercent total HP... - - We Dispel, or move out of the AOE. Move if friendly. - Note: We get nearest AOE of sAOE tag. Must be valid as well. - - 1.3 - Added -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -int AI_ActionDispelAOE(int nSpell, int bDamageOnly, float fRange, int nDamage, int nMax, int nPercent) -{ - object oAOE = GetAIObject(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpell)); - // Get damage done - int nLastDamage = GetAIInteger(ObjectToString(oAOE)); - // Delete/clean up - DeleteAIInteger(ObjectToString(oAOE)); - // Check we will be affected, or are affected, by the AOE at all! - if(GetIsObjectValid(oAOE) && GetDistanceToObject(oAOE) <= fRange && - // + Damaged from that AOE, or affected by that AOE. - (nLastDamage >= TRUE || (GetHasSpellEffect(nSpell) && !bDamageOnly))) - { - // Either Under nMax AND under - if((GlobalOurMaxHP >= nMax && GlobalOurCurrentHP <= nDamage) || - GlobalOurPercentHP <= nPercent || !GlobalAnyValidTargetObject) - { - // 16: "[AOE Call] Moving out of/Dispeling an AOE. [Tag] " + GetTag(oAOE) - DebugActionSpeakByInt(16, oAOE); - // If an enemy, Dispel it. - if(!GetIsFriend(GetAreaOfEffectCreator(oAOE))) - { - // 11 = Harmful AOE indis. 2 = Harmful ranged. - // Gust of Wind. Level 3 (Bard/Mage) Dispels all AOE's in radius, and save VS fort for 3 round knockdown. - if(AI_ActionCastSpell(SPELL_GUST_OF_WIND, oAOE, 13, TRUE)) return TRUE; - // Worst to best, then move...wind gust best! - // - Note that they have a % chance to remove stuff... - if(AI_ActionCastSpell(SPELL_LESSER_DISPEL, oAOE, 12, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_DISPEL_MAGIC, oAOE, 13, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_DISPELLING, oAOE, 16, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_MORDENKAINENS_DISJUNCTION, oAOE, 19, TRUE)) return TRUE; - } - // Else move. We force this until we are out of the AOE - SetAIObject(AI_AOE_FLEE_FROM, oAOE); - SetLocalFloat(OBJECT_SELF, AI_AOE_FLEE_FROM_RANGE, fRange + GlobalOurReach); - SetCurrentAction(AI_SPECIAL_ACTIONS_MOVE_OUT_OF_AOE); - ActionMoveAwayFromLocation(GetLocation(oAOE), TRUE, fRange + GlobalOurReach); - return TRUE; - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: Special Checks -//:://///////////////////////////////////////////// - This will check for darkness, AOE spells, - time stop stored, and a few other things. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptSpecialChecks() -{ - // Delete stored ints if not in time stop. - if(!GlobalInTimeStop) AI_DeleteTimeStopStored(); - - // - Fleeing is performed in ClearAllAction()'s wrapper - - // Darkness! the ENEMY OF THE ARTIFICAL INTELlIGENCE!!! MUAHAHAH! WE COMBAT IT WELL! (sorta) - if((AI_GetAIHaveSpellsEffect(GlobalEffectDarkness) && - !AI_GetAIHaveEffect(GlobalEffectUltravision) && - !AI_GetAIHaveEffect(GlobalEffectTrueSeeing)) - // Check nearest enemy with darkness effect. Use heard only (they won't be seen!) - || GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_DARKVISION, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD))) - { - // Ultravision - Talent category 10 (Benificial enchancement Self). - if(AI_ActionCastSpell(SPELL_DARKVISION, OBJECT_SELF, 13, FALSE)) return TRUE; - // 1.30/SoU trueeing should Dispel it. (Benificial conditional AOE) - if(AI_ActionCastSpell(SPELL_TRUE_SEEING, OBJECT_SELF, 16, FALSE)) return TRUE; - - // If we are a rubbish fightingclass OR we cannot hear any enemy to attack...move or something. - if(!GlobalValidNearestSeenEnemy && - // If only someone else has it, don't worry, its only if we cannot see anyone - (GlobalOurChosenClass == CLASS_TYPE_WIZARD || - GlobalOurChosenClass == CLASS_TYPE_SORCERER || - GlobalOurChosenClass == CLASS_TYPE_FEY)) - { - // 17: "[DCR:Special] Darkness + Caster. No seen enemy. Dispel/Move." - DebugActionSpeakByInt(17); - // Dispel it - trying nearest creature, if has darkness as well - // 11 = Harmful AOE indis. 2 = Harmful ranged. - // WORST to BEST as all of them never check caster levels for AOEs (Silly bioware!) - if(AI_ActionCastSpell(SPELL_LESSER_DISPEL, OBJECT_SELF, 12, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_DISPEL_MAGIC, OBJECT_SELF, 13, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_DISPELLING, OBJECT_SELF, 16, TRUE)) return TRUE; - if(AI_ActionCastSpell(SPELL_MORDENKAINENS_DISJUNCTION, OBJECT_SELF, 19, TRUE)) return TRUE; - - ActionMoveAwayFromLocation(GetLocation(OBJECT_SELF), TRUE, 6.0); - return TRUE; - } - } - object oInvisible = GetAIObject(AI_LAST_TO_GO_INVISIBLE); - DeleteAIObject(AI_LAST_TO_GO_INVISIBLE); - // Intelligence: 8+ means HIPS check. There is a 80% chance. - if((!GetIsObjectValid(oInvisible) || GetObjectSeen(oInvisible)) && - GlobalIntelligence >= 8 && d10() <= 8) - { - // Makes the AI cast seeing spells against shadowdancers who will HIPS - oInvisible = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_SHADOWDANCER, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_IS_ALIVE, TRUE); - DeleteAILocation(AI_LAST_TO_GO_INVISIBLE); - } - // If we have a previously set invisible enemy or if high intelligence, a shadowdancer in range. - if(GetIsObjectValid(oInvisible)) - { - // 1.30/SoU trueeing should Dispel it. (Benificial conditional AOE) - if(AI_ActionCastSpell(SPELL_TRUE_SEEING, OBJECT_SELF, 16, FALSE)) return TRUE; - // Invisiblity purge! SpellConAre - if(AI_ActionCastSpell(SPELL_INVISIBILITY_PURGE, OBJECT_SELF, 14, FALSE)) return TRUE; - // This should work well as well! SpellConSinTar - if(AI_ActionCastSpell(SPELL_SEE_INVISIBILITY, OBJECT_SELF, 12, FALSE)) return TRUE; - - location lTarget = GetAILocation(AI_LAST_TO_GO_INVISIBLE); - DeleteAILocation(AI_LAST_TO_GO_INVISIBLE); - - // Check location validness - if(GetIsObjectValid(GetAreaFromLocation(lTarget))) - { - // We will cast at thier previous location, using a temp object we actually - // create there for a few seconds. - oInvisible = CreateObject(OBJECT_TYPE_PLACEABLE, "", lTarget); - // Check range - if(GetIsObjectValid(oInvisible) && - GetDistanceToObject(oInvisible) < 40.0) - { - // 1.4: Temp: Cast at location with the base spells only - if(GetHasSpell(SPELL_MORDENKAINENS_DISJUNCTION)) - { - ActionCastSpellAtLocation(SPELL_MORDENKAINENS_DISJUNCTION, lTarget); - return TRUE; - } - else if(GetHasSpell(SPELL_GREATER_DISPELLING)) - { - ActionCastSpellAtLocation(SPELL_GREATER_DISPELLING, lTarget); - return TRUE; - } - else if(GetHasSpell(SPELL_DISPEL_MAGIC)) - { - ActionCastSpellAtLocation(SPELL_DISPEL_MAGIC, lTarget); - return TRUE; - } - else if(GetHasSpell(SPELL_LESSER_DISPEL)) - { - ActionCastSpellAtLocation(SPELL_LESSER_DISPEL, lTarget); - return TRUE; - } - - // Best to worst - //if(AI_ActionCastSpell(SPELL_MORDENKAINENS_DISJUNCTION, oInvisible, 19, TRUE)) return TRUE; - //if(AI_ActionCastSpell(SPELL_GREATER_DISPELLING, oInvisible, 16, TRUE)) return TRUE; - //if(AI_ActionCastSpell(SPELL_DISPEL_MAGIC, oInvisible, 13, TRUE)) return TRUE; - //if(AI_ActionCastSpell(SPELL_LESSER_DISPEL, oInvisible, 12, TRUE)) return TRUE; - } - } - } - // AOE spells - // - Either we Dispel it or move out of it. - // - Dispeling more if higher INT. - // - We always move if it does great damage - // - Low intelligence ignores this (probably to thier doom). - - // We have already: - // - Set if there is an AOE that affects us cast at us. - // - Checked any saves avalible, and immunities (Intelligence based) - - // Delcarations. - object oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT); - float fDistance = GetDistanceToObject(oAOE); - - // First check: We randomly check this if INT 1-5, and always check 6+ - if(GlobalIntelligence >= (6 - d6()) && - // Second: Need a valid AOE, of course! - GetIsObjectValid(oAOE) && - // Third: Needs to be in 10.0 M - fDistance <= RADIUS_SIZE_COLOSSAL) - { - int bElemental = AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections); - int bPhisical = AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections); - // We can check the timers added to spells, to check for AOEs we are in. - - // Long range ones...already made sure of collosal range! - // Storm of vengance...a lot of damage (so we need only 30HP left) - // Stats: Raduis 10! d6(3) , Get Is Friend/Friendly. - // Either: Electical (reflex) and stun (failed save), else Acid, d6(6). - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_STORM_OF_VENGEANCE)) && !bElemental) - { - if(AI_ActionDispelAOE(SPELL_STORM_OF_VENGEANCE, TRUE, RADIUS_SIZE_COLOSSAL, 30, 50, 20)) return TRUE; - } - // Next range...6.7 - if(fDistance <= RADIUS_SIZE_HUGE) - { - // Creeping doom! - // This can get a lot of damage. We might check the counter status... - // Stats: Radius 6.7. Initial d20 damage (can't stop), Slow as well. Reaction Type Friendly. - // d6(Amount of rounds in effect) each round after that, HURTS! (up to 1000) - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_CREEPING_DOOM)) && !bPhisical) - { - if(AI_ActionDispelAOE(SPELL_CREEPING_DOOM, TRUE, RADIUS_SIZE_HUGE, GetLocalInt(oAOE, "NW_SPELL_CONSTANT_CREEPING_DOOM1" + ObjectToString(GetAreaOfEffectCreator(oAOE))) * 6, 40, 40)) return TRUE; - } - // Stinking cloud! - // No damage, only daze. If we are immune to it - fine. - // Note: PATCH 1.30 should make daze walkable - we can wait - // to be affected then walk out of the area :-) - // Only fortitude save. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_STINKING_CLOUD))) - { - if(AI_ActionDispelAOE(SPELL_STINKING_CLOUD, TRUE, RADIUS_SIZE_HUGE, 25, 60, 35)) return TRUE; - } - // Grease - // Stats: Radius 6. (count as 6.7) We get slowed (unless Woodland Stride) in it always. - // On a reflex save each round, knockdown effect (4 seconds). Reaction Type Friendly. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_GREASE))) - { - if(AI_ActionDispelAOE(SPELL_GREASE, FALSE, RADIUS_SIZE_HUGE, 10, 25, 15)) return TRUE; - } - // Wall of fire... - // Stats: 10M x 2M rectangle. d6(4) Fire damage (Reflex save). - // Notes: level 5/6 spell. Not bad, up to 24 damage! Reaction Type Frendly. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_WALL_OF_FIRE)) && !bElemental) - { - if(AI_ActionDispelAOE(SPELL_WALL_OF_FIRE, TRUE, RADIUS_SIZE_HUGE, 20, 50, 25)) return TRUE; - } - // Blade Barrier (special shape!) - // Stats: 10M x 1M rectangle. d6(CasterLevel) Piercing damage (Reflex save). - // Notes: LOTs of damage! warning about this one! Reaction Type friendly. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_BLADE_BARRIER)) && !bPhisical) - { - if(AI_ActionDispelAOE(SPELL_BLADE_BARRIER, TRUE, RADIUS_SIZE_HUGE, 30, 50, 35)) return TRUE; - } - // Next range...5.0 - if(fDistance <= RADIUS_SIZE_LARGE) - { - // Acid Fog spell - // Stats: Radius 5. Damage: d6(2), Fort/2. Slow on failed Fort save (On Enter) - // Notes: Level 6 spell. Uses ReactionType, not GetFriend. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_ACID_FOG)) && !bElemental) - { - // Ignore slowing effect - if(AI_ActionDispelAOE(SPELL_ACID_FOG, TRUE, RADIUS_SIZE_HUGE, 20, 40, 25)) return TRUE; - } - // Inceniary Cloud spell - // Stats: Radius 5. Damage: d6(4), Reflex. Slow always. - // Notes: Level 8 spell. Uses ReactionTypeFriendly, not GetFriend. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_INCENDIARY_CLOUD)) && !bElemental) - { - // Ignore slow - if(AI_ActionDispelAOE(SPELL_INCENDIARY_CLOUD, TRUE, RADIUS_SIZE_HUGE, 30, 50, 35)) return TRUE; - } - // Cloudkill spell - // Stats: Radius 5. Under 3HD Die. 4-7 Save VS Death (Fort) - // All Damage d10(), no save. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_CLOUDKILL))) - { - // Damage only - if(AI_ActionDispelAOE(SPELL_CLOUDKILL, TRUE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - // Evards Black Tenticals. - // Stats: Radius 5. 1d6 damage if d20 + 5 hits the target. (Reaction Type Hostile) - // May paralize them as well, on a fort save. Up to 5 of these tenticals BTW. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_EVARDS_BLACK_TENTACLES)) && !bPhisical) - { - if(AI_ActionDispelAOE(SPELL_EVARDS_BLACK_TENTACLES, TRUE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - // Mind Fog spell - // Stats: Radius 5. - // -10 to will saves, if fail a will save (and it continues out of it). - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_MIND_FOG)) && - GetLocalInt(OBJECT_SELF, AI_ABILITY_DECREASE) > FALSE) - { - // No damage - if(AI_ActionDispelAOE(SPELL_MIND_FOG, FALSE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - // Entangle - // Stats: Radius 5. Reaction Type hostile used. - // Entangle effect against a reflex save each round (for 12 seconds). - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_ENTANGLE)) && - AI_GetAIHaveEffect(GlobalEffectEntangle)) - { - // No damage - if(AI_ActionDispelAOE(SPELL_ENTANGLE, FALSE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - // Vine mine - // Stats: Radius as Entangle - Radius 5 - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_VINE_MINE_ENTANGLE)) && - AI_GetAIHaveEffect(GlobalEffectEntangle)) - { - // " " - if(AI_ActionDispelAOE(SPELL_VINE_MINE_ENTANGLE, FALSE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - // Hamper movement one - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_VINE_MINE_HAMPER_MOVEMENT)) && - AI_GetAIHaveEffect(GlobalEffectMovementSpeedDecrease)) - { - if(AI_ActionDispelAOE(SPELL_VINE_MINE_HAMPER_MOVEMENT, FALSE, RADIUS_SIZE_HUGE, 15, 30, 25)) return TRUE; - } - } - // Web - // Stats: 6.67 Radius - // Notes: Just a large entange + Slow for anyone. - if(GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(SPELL_WEB)) && - AI_GetAIHaveEffect(GlobalEffectEntangle)) - { - if(AI_ActionDispelAOE(SPELL_WEB, FALSE, RADIUS_SIZE_HUGE, 30, 50, 35)) return TRUE; - } - } - } - // End AOE - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: AI_GetHealingSpellRank, AI_GetHealingSpellPower -//:://///////////////////////////////////////////// - Returns the rank (the first) and the spell power/average healing (the latter) -//:://///////////////////////////////////////////// -//:: Created by: Jasperre -//:://///////////////////////////////////////////*/ -// Returns the healing "Rank" of nSpellId (made up by me) which the spell is. -// Used in healing, Heal (+Mass Heal) is done seperatly in the healing routines. -// * Returns a default of 0 if no valid healing spell is found (Or was a Heal spell) -// * Use bSelf to be TRUE if you want to include "Cure Other" spells in Hordes -int AI_GetHealingSpellRank(int nSpellId, int bSelf = FALSE) -{ - // On error - return 0 rank, or 0 heal. - if(nSpellId <= FALSE) return FALSE; - switch(nSpellId) - { - // Each spell has a specific rank, such as Heal is highest, Cure Minor is - // lowest. - // Critical: Rank 10 - case SPELL_CURE_CRITICAL_WOUNDS: return 10; break; - // Cure light wounds (Lesser Body Adjustment is the same script) is rank 2 - case SPELLABILITY_LESSER_BODY_ADJUSTMENT: - case SPELL_CURE_LIGHT_WOUNDS: - return 2; - break; - // Cure minor - lowest, rank 1. - case SPELL_CURE_MINOR_WOUNDS: return 1; break; - // Moderate rank 3. - case SPELL_CURE_MODERATE_WOUNDS: return 3; break; - // Serious rank 4. - case SPELL_CURE_SERIOUS_WOUNDS: return 4; break; - // Healing circle, rank 4. AOE healing isn't returned in the same talent - // as Single Target healing. - case SPELL_HEALING_CIRCLE: return 4; break; - // Cure Critical Wounds other depends on if bSelf is FALSE. - case AI_SPELLABILITY_CURE_CRITICAL_WOUNDS_OTHER: return 9; break; - } - // On error - return 0 rank - return FALSE; -} - -// This will return the average amount healed by nSpellId, determined as if they -// were the minimum level used to cast it, and average rolls were performed. -// * Used in healing to check if we should bother using the spell yet, eg: -// a 50HP person with a ciritical wounds potion might take it at 10HP, not 25HP, -// because it heals a lot. -int AI_GetHealingSpellPower(int nSpellId) -{ - // On error - return 0 rank, or 0 heal. - if(nSpellId <= FALSE) return FALSE; - switch(nSpellId) - { - // RANK - NAME = D8 AMOUNTs + RANGE OF CLERIC LEVELS ADDED. MAX. - // AVERAGE OF DICE. ABOUT 2/3 OF MODIFIERS. - - // 20 - Critical = 4d8 + 7-20. Max of 32. Take as 24. Take modifiers as 10. - case SPELL_CURE_CRITICAL_WOUNDS: return 35; break; - // 10 - Lesser Bodily Adjustment = 1d8 + 1-5. Max of 8. Take as 6. Take modifiers as 3. - // NOTE: same spell script as Cure Light Wounds, but no concentration check! - // 8 - Light = 1d8 + 2-5. Max of 8. Take as 6. Take modifiers as 3. - case SPELLABILITY_LESSER_BODY_ADJUSTMENT: - case SPELL_CURE_LIGHT_WOUNDS: - return 9; - break; - // 4 - Minor = 1. Max of 1. Take as 1. Take modifiers as 0. - case SPELL_CURE_MINOR_WOUNDS: return 1; break; - // 12 - Moderate = 2d8 + 3-10. Max of 16. Take as 12. Take modifiers as 5. - case SPELL_CURE_MODERATE_WOUNDS: return 17; break; - // 16 - Serious = 3d8 + 5-15. Max of 24. Take as 18. Take modifiers as 7. - case SPELL_CURE_SERIOUS_WOUNDS: return 25; break; - // 14 - Healing circle = 1d8 + 9-20. Max of 8. Take as 8. Take modifiers as 10. - case SPELL_HEALING_CIRCLE: return 18; break; - // As cure critical wounds, but cures another and damages us... - // Rank is 0 if this spell is put in and the target isn't us. We don't - // need a bSelf check therefore. - // 20 - Critical = 4d8 + 7-20. Max of 32. Take as 24. Take modifiers as 9. - case AI_SPELLABILITY_CURE_CRITICAL_WOUNDS_OTHER: return 35; break; - } - // On error - return 0 rank, or 0 heal. - return FALSE; -} - -// Wrappers action Use Talent with debug string -void AI_ActionUseTalentDebug(talent tChosenTalent, object oTarget) -{ - // 18: "[DRC:Talent] Using Talent (Healing). [TalentID] " + IntToString(GetIdFromTalent(tChosenTalent)) + " [Target] " + GetName(oTarget) - DebugActionSpeakByInt(18, oTarget, GetIdFromTalent(tChosenTalent)); - // Moved Equip best shield in here - AI_EquipBestShield(); - ActionUseTalentOnObject(tChosenTalent, oTarget); -} -/*:://///////////////////////////////////////////// -//:: Name: AI_ActionHealObject -//:://///////////////////////////////////////////// - This will heal oTarget using the best spell it can, even ones it can - spontaeously cast. - - Just does best spell. - - May use spontaneous ones as well. :-) - - Called from AI_AttemptHealing_Self and AI_AttemptHealing_Ally -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_ActionHealObject(object oTarget, int bPotionsValid = FALSE) -{ - // Set healing talents - talent tAOEHealing, tTouchHealing, tPotionHealing; - // These are left at 0 if we have no SpawnInCondition setting them. - int nAOEHealingValue, nTouchHealingValue, nPotionValue; - - // We set up OnSpawn if any of the 3 talents are valid - tAOEHealing = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_HEALING_AREAEFFECT, 20); - nAOEHealingValue = GetIdFromTalent(tAOEHealing); - - // Touch healing (Cure XXX wounds, Heal...) - tTouchHealing = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH, 20); - nTouchHealingValue = GetIdFromTalent(tTouchHealing); - - // First, we check for heal spells in the talents we have. They are special cases! - int nTargetCurrentHP, nTargetMaxHP, nTargetPercentHP, bTargetSelf; - // If the target is ourselves... - if(oTarget == OBJECT_SELF) - { - nTargetCurrentHP = GlobalOurCurrentHP; - nTargetMaxHP = GlobalOurMaxHP; - nTargetPercentHP = GlobalOurPercentHP; - bTargetSelf = TRUE; - // We might use potions - if(bPotionsValid == TRUE) - { - tPotionHealing = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_HEALING_POTION, 20); - nPotionValue = GetIdFromTalent(tPotionHealing); - } - } - // Something else - else - { - // If not us, we don't know HP values. - nTargetCurrentHP = GetCurrentHitPoints(oTarget); - nTargetMaxHP = GetMaxHitPoints(oTarget); - // Percent = Current/Max * 100 - nTargetPercentHP = AI_GetPercentOf(nTargetCurrentHP, nTargetMaxHP); - bTargetSelf = FALSE; - } - - // Check for heal amounts, oTarget might have to be X damaged. - // - If we have someone using knockdown on us, we make SURE we cast it sooner - if(nTargetCurrentHP < 25 || nTargetPercentHP < 30 || - // High damage at once for target (over 40) - (GetLocalInt(oTarget, AI_INTEGER + AI_HIGHEST_DAMAGE_AMOUNT) > 40 && nTargetPercentHP < 40) || - // Had knockdown used on us lately - we'll heal allies sooner if this is - // the case too! - (GetLocalTimer(AI_TIMER_KNOCKDOWN) && - (nTargetCurrentHP < 40 || nTargetPercentHP < 40))) - { - // If we have heal, we will use it now. - // * Potion, then Touch, then Mass heal. - if(bPotionsValid && nPotionValue == SPELL_HEAL) - { - // Potion spell - AI_ActionUseTalentDebug(tPotionHealing, OBJECT_SELF); - return TRUE; - } - else if(nTouchHealingValue == SPELL_HEAL) - { - // Touch heal spell - AI_ActionUseTalentDebug(tTouchHealing, oTarget); - return TRUE; - } - else if(nAOEHealingValue == SPELL_MASS_HEAL) - { - // Mass heal spell - AI_ActionUseTalentDebug(tAOEHealing, oTarget); - return TRUE; - } - } - // Else, another talent - IE critical wounds and under. - int nSponteousHealingValue = AI_GetBestSpontaeousHealingSpell(); - - // Are any of them valid? - if(nSponteousHealingValue >= 1 || - nAOEHealingValue >= 1 || nTouchHealingValue >= 1 || nPotionValue >= 1) - { - // We must work out the rank of each thing we can use, IE 10 best, - // 1 worst or whatever :-D - int nSpontaeousRank, nPotionRank, nAOERank, nTouchRank, nRank, - nDamageNeededToBeDone, nRankOfSpell, // nRank must be 0, which it starts at. - // Spontaeous or a talent? 1 = Talent, 2 = Spontaeous, 0 = Error/none - nTalentOrSpon; - // What talent should we use? - talent tToUse; - - // Set the healing ranks. - nSpontaeousRank = AI_GetHealingSpellRank(nSponteousHealingValue, bTargetSelf); - nAOERank = AI_GetHealingSpellRank(nAOEHealingValue, bTargetSelf); - nTouchRank = AI_GetHealingSpellRank(nTouchHealingValue, bTargetSelf); - nPotionRank = AI_GetHealingSpellRank(nPotionValue, bTargetSelf); - - // Need a valid rank - we COULD get healing feats with these talents - if(nAOERank >= 1 || nAOERank >= 1 || nPotionRank >= 1 || nSpontaeousRank >= 1) - { - // Determine what to use... - // 1.4 - Cleaned this up. Less lines. - // A Potion? We like these...a lot. No concentration checks! - if(bPotionsValid && nPotionRank >= nAOERank && - nPotionRank >= nSpontaeousRank && nPotionRank >= nTouchRank) - { - // 1 = Talent - nTalentOrSpon = 1; - // Use a potion, so get the potion information - tToUse = tPotionHealing; - nRank = nPotionRank; - nDamageNeededToBeDone = AI_GetHealingSpellPower(nPotionValue); - } - // Test touch rank - else if(nTouchRank >= nAOERank && nTouchRank >= nSpontaeousRank) - { - // 1 = Talent - nTalentOrSpon = 1; - // Use a touch healing spell - tToUse = tTouchHealing; - nRank = nTouchRank; - nDamageNeededToBeDone = AI_GetHealingSpellPower(nTouchHealingValue); - } - // Test AOE rank - else if(nAOERank >= nSpontaeousRank) - { - // 1 = Talent - nTalentOrSpon = 1; - // Use a AOE healing spell - tToUse = tAOEHealing; - nRank = nPotionRank; - nDamageNeededToBeDone = AI_GetHealingSpellPower(nAOEHealingValue); - } - else if(nSpontaeousRank >= 1) - { - // 2 = Spontaeous - nTalentOrSpon = 2; - // Use a spontaeous healing spell - nRank = nSpontaeousRank; - nDamageNeededToBeDone = AI_GetHealingSpellPower(nSponteousHealingValue); - } - // Now, have we a talent or spell to use? - if(nTalentOrSpon >= 1 && nRank >= 1) - { - // If the current HP is under the damage that is healed, - // or under 25% left :-) - if(nTargetCurrentHP <= (nTargetMaxHP - nDamageNeededToBeDone) || - (nTargetPercentHP < 25)) - { - // Level check. Our HD must be a suitble amount, or no melee attackers. - // Even if we are healing others - we don't bother with bad healing - - // Rank of the spell, can be in a range over our HD -5. - if(((nRank - GlobalOurHitDice) >= -5) || - // OR Rank of 16+ (critical wounds or more) are always done. - (nRank >= 16) || - // OR no valid nearest enemy. - (!GlobalAnyValidTargetObject) || - // OR 0 Melee attackers, and a larger range (up to -10 our HD) - ((GlobalMeleeAttackers < 1) && ((nRank - GlobalOurHitDice) >= -10))) - { - // Use it...and attack with a bow. Always return TRUE. - // Need only one debug :-P - // 19: "[DCR:Healing] (Should) Healing [Target]" + GetName(oTarget) + " [CurrentHP|Max|ID|Rank|Power] " + IntToString((10000 * nTargetCurrentHP) + (1000 * nTargetMaxHP) + (100 * GetIdFromTalent(tToUse)) + (10 * iRank) + (nDamageNeededToBeDone)) - DebugActionSpeakByInt(19, oTarget, ((10000 * nTargetCurrentHP) + (1000 * nTargetMaxHP) + (100 * GetIdFromTalent(tToUse)) + (10 * nRank) + (nDamageNeededToBeDone))); - - // Talent! - if(nTalentOrSpon == 1) - { - if(GetIsTalentValid(tToUse)) - { - AI_EquipBestShield(); - // No AI_ActionUseTalentDebug, just normal. Debug string above. - DeleteLocalInt(OBJECT_SELF, AI_SPONTAEUOUSLY_CAST_HEALING); - ActionUseTalentOnObject(tToUse, oTarget); - return TRUE; - } - } - // Spontaeous Spell! - else //if(nTalentOrSpon == 2) // (is always 2 or 1 or 0) - { - // Use the same thing as the inflict spell - if(AI_ActionCastSpontaeousSpell(nSponteousHealingValue, oTarget)) return TRUE; - } - } - } - } - } - // Else, no healing is valid...ranks, ETC. - else - // Check if it is us and so on. - // If it is us, and we have no potion spell, - if(oTarget == OBJECT_SELF && - GlobalOurPercentHP < 40 && !nPotionRank && - GetSpawnInCondition(AI_FLAG_OTHER_CHEAT_MORE_POTIONS, AI_OTHER_MASTER)) - { - if(!GetIsObjectValid(GetItemPossessedBy(OBJECT_SELF, "nw_it_mpotion003"))) - { - // 20: "[DCR Healing] Boss Action, create Critical Wounds potion" - DebugActionSpeakByInt(20); - // 1.4 - This is now made undroppable, so will not be looted. - object oPotion = CreateItemOnObject("nw_it_mpotion003"); - SetDroppableFlag(oPotion, FALSE); - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: AI_ActionHealUndeadObject -//:://///////////////////////////////////////////// - This will heal oTarget using the best negative energy spell it can use, - - Used best spell (including harm, ETC) -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -int AI_ActionHealUndeadObject(object oTarget) -{ - // First, we check for heal spells in the talents we have. They are special cases! - int nTargetCurrentHP, nTargetMaxHP, nTargetPercentHP; - // Test if we are targeting ourselves. - if(oTarget == OBJECT_SELF) - { - // We set this to the right value if the target is us. - nTargetCurrentHP = GlobalOurCurrentHP; - nTargetMaxHP = GlobalOurMaxHP; - nTargetPercentHP = GlobalOurPercentHP; - } - else - { - // If not us, we don't know HP values. - nTargetCurrentHP = GetCurrentHitPoints(oTarget); - nTargetMaxHP = GetMaxHitPoints(oTarget); - // Percent = Current/Max * 100 - nTargetPercentHP = AI_GetPercentOf(nTargetCurrentHP, nTargetMaxHP); - } - // Check for Harm amounts, oTarget might have to be X damaged. - if(nTargetCurrentHP < 25 || nTargetPercentHP < 30 || - // High damage at once for target (over 40) - (GetLocalInt(oTarget, AI_INTEGER + AI_HIGHEST_DAMAGE_AMOUNT) > 40 && nTargetPercentHP < 40) || - // Had knockdown used on us lately - (GetLocalTimer(AI_TIMER_KNOCKDOWN) && - (nTargetCurrentHP < 40 || nTargetPercentHP < 40))) - { - // If us, use harm self - if(oTarget == OBJECT_SELF) - { - // Innate ability. Under healing self, so leave as innate. - if(AI_ActionCastSpell(AI_SPELLABILITY_UNDEAD_HARM_SELF, oTarget)) return TRUE; - } - // Use it...if we have it. Healing with harm rocks! - if(AI_ActionCastSpell(SPELL_HARM, oTarget, 16, FALSE)) return TRUE; - } - // Other Under things! - // Inflict range...always use top 2. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_CRITICAL_WOUNDS, oTarget)) return TRUE; - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_SERIOUS_WOUNDS, oTarget)) return TRUE; - // Circle of doom: d8 + Caster level heal. Category 1. - if(AI_ActionCastSpell(SPELL_CIRCLE_OF_DEATH, oTarget, 15, TRUE)) return TRUE; - // Negative Energy Burst...this is good enough to always use normally...same as Circle of doom! (d8 + caster) - if(AI_ActionCastSpell(SPELL_NEGATIVE_ENERGY_BURST, oTarget, 13, TRUE)) return TRUE; - // Lower ones ain't too good for some HD (ours!) - if(!GlobalAnyValidTargetObject || GlobalOurHitDice <= 12) - { - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_MODERATE_WOUNDS, oTarget)) return TRUE; - if(!GlobalAnyValidTargetObject || GlobalOurHitDice <= 6) - { - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_LIGHT_WOUNDS, oTarget)) return TRUE; - if(!GlobalAnyValidTargetObject || GlobalOurHitDice <= 2) - { - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_MINOR_WOUNDS, oTarget)) return TRUE; - } - } - } - // No undead healing cast - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: TalentHealingSelf -//:://///////////////////////////////////////////// - Uses the best it can. - 1. If it is heal, they need to be under half HP and under 40 HP - 2. If not, it has to be under half HP and not be heal/mass heal - 3. Testing to see if harm will be cast by undead - - 1.3 changes: A few bug fixes...not sure what was wrong before. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -int AI_AttemptHealingSelf() -{ - // Flag for "Do not heal anyone". Useful also for stopping non-healers - // even checking. - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER)) return FALSE; - - // If we are polymorphed, cannot heal anyone - thats cheating. Using our - // class feats we shouldn't have access to also isn't a nice idea. - if(AI_GetAIHaveEffect(GlobalEffectPolymorph)) return FALSE; - - // Determine what we should heal at... - int nPercent = GetBoundriedAIInteger(AI_HEALING_US_PERCENT, 50, 100, 1); - int nRace = MyPRCGetRacialType(OBJECT_SELF); - - // What % are we at? It is GlobalOurPercentHP - // Are we under the right %? - if(GlobalOurPercentHP <= nPercent) - { - // We can't be a silly race! - if(nRace != RACIAL_TYPE_UNDEAD && - nRace != RACIAL_TYPE_CONSTRUCT) - { - int nWillHeal; - // If we can heal self with feats...use them! No AOO - if(GetHasFeat(FEAT_WHOLENESS_OF_BODY) && - ((GlobalOurCurrentHP <= GetLevelByClass(CLASS_TYPE_MONK, OBJECT_SELF) * 2) || - GlobalOurPercentHP < 20)) - { - if(AI_ActionUseSpellLikeFeat(FEAT_WHOLENESS_OF_BODY, SPELLABILITY_WHOLENESS_OF_BODY)) return TRUE; - } - // Only use this on ourselves. - if(GetHasFeat(FEAT_LAY_ON_HANDS)) - { - // This does the actual formula...note, putting ones to stop DIVIDE BY ZERO errors - int nChr = GetAbilityModifier(ABILITY_CHARISMA); - if(nChr < 1) nChr = 1;// Error checking - int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN); - if(nLevel < 1) nLevel = 1;// Error checking - //Caluclate the amount needed to be at, to use. - int nHeal = nLevel * nChr; - if(nHeal < 1) nHeal = 1;// Error checking - // We can be under the amount healed, or under 30 - if(GlobalOurCurrentHP < nHeal || - GlobalOurPercentHP < 30) - { - if(AI_ActionUseSpellLikeFeat(FEAT_LAY_ON_HANDS, SPELLABILITY_LAY_ON_HANDS)) return TRUE; - } - } - // Note: Feat Lesser Bodily Adjustment uses cure light wounds spell script. - // Odd classes mean no potions. - int bPotions = TRUE; - if(nRace == RACIAL_TYPE_ABERRATION || - nRace == RACIAL_TYPE_BEAST || nRace == RACIAL_TYPE_ELEMENTAL || - nRace == RACIAL_TYPE_VERMIN || nRace == RACIAL_TYPE_MAGICAL_BEAST || - nRace == RACIAL_TYPE_DRAGON || nRace == RACIAL_TYPE_ANIMAL) - bPotions = FALSE; - - // Lets see if we can use a healing kit! Only a valid race (as potions) - if(bPotions && GetAIInteger(AI_VALID_HEALING_KITS) && - !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER)) - { - // Healing Kits - int nHealLeft = GetAIInteger(AI_VALID_HEALING_KITS); - object oKit; - // We have a healing kit? - if(nHealLeft > 0) - { - // Get the kit - object oKit = GetAIObject(AI_VALID_HEALING_KIT_OBJECT); - // Oh, if we don't have one, re-set them, and only them. - if(!GetIsObjectValid(oKit) && nHealLeft >= 2) - { - SetAIInteger(RESET_HEALING_KITS, TRUE); - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - // Need a valid kit and skill to be worth using :-) - if((GetSkillRank(SKILL_HEAL) >= (GlobalOurHitDice / 3) || - GlobalOurPercentHP < 30)) - { - AI_EquipBestShield(); - // 21: "[DCR:Casting] Healing self with healing kit, [Kit] " + GetName(oKit) - DebugActionSpeakByInt(21, oKit); - ActionUseSkill(SKILL_HEAL, OBJECT_SELF, 0, oKit); - return TRUE; - } - } - } - // Finally, heal self with potions, spells or whatever. - return AI_ActionHealObject(OBJECT_SELF, bPotions); - } - else if(nRace == RACIAL_TYPE_UNDEAD) - { - // Undead can cast some spells to heal... - return AI_ActionHealUndeadObject(OBJECT_SELF); - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: TalentCureCondition -//:://///////////////////////////////////////////// - Uses spells to cure conditions. Needs to be checked fully - - Uses allies own integers to check thier effects - - Loops spells (Best => worst) and if we havn't cast it in an amount of time - we check effects (Us, leader, allies seen) until we find someone (nearest) - who we can cast it on. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptCureCondition() -{ - // Set OnSpawn if we have any of the spells we use. - if(/*!GetSpawnInCondition(AI_VALID_CURE_CONDITION_SPELLS, AI_VALID_SPELLS) ||*/ - GetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_CURING_ALLIES, AI_OTHER_MASTER) || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER)) return FALSE; - - // If we are polymorphed, cannot heal anyone - thats cheating. Using our - // class feats we shouldn't have access to also isn't a nice idea. - if(AI_GetAIHaveEffect(GlobalEffectPolymorph)) return FALSE; - - // Check timer - if(GetLocalTimer(AI_TIMER_CURE_CONDITION)) return FALSE; - - int nTimer = GetAIInteger(SECONDS_BETWEEN_STATUS_CHECKS); - if(nTimer >= 1) - { - // Set timer - SetLocalTimer(AI_TIMER_CURE_CONDITION, IntToFloat(nTimer)); - } - - // Cure spells: - // SPELL_GREATER_RESTORATION - Ability Decrease, AC decrease, Attack decrease, - // Damage Decrease, Damage Immunity Decrease, Saving Throw Decrease, - // Spell resistance Decrease, Skill decrease, Blindness, Deaf, Curse, Disease, - // Poison, Charmed, Dominated, Dazed, Confused, Frightened, Negative level, - // Paralyze, Slow, Stunned. - // SPELL_RESTORATION - Ability Decrease, AC decrease, Attack Decrease, - // Damage Decrease, Damage Immunity Decrease, Saving Throw Decrease, - // Spell Resistance Decrease, Skill Decrease, Blindess, Deaf, Paralyze, Negative level - // SPELL_LESSER_RESTORATION - Ability Decrease, AC decrease, Attack Decrease, - // Damage Decrease, Damage Immunity Decrease, Saving throw Decrease, - // Spell Resistance Decrease, Skill decrease. - // - More Specific ones. - // SPELL_FREEDOM - Paralyze, Entangle, Slow, Movement speed decrease. (+Immunity!) - // SPELL_REMOVE_BLINDNESS_AND_DEAFNESS - Blindess, Deaf. - // SPELL_NEUTRALIZE_POISON - Poison - // SPELL_REMOVE_DISEASE - Disease - // SPELL_REMOVE_CURSE - Curse - - // Note: We like to dispel anything that stuns us - EG paralyze effects, - // stunning, confusion, dazedness VIA Greater Restoration, after that, - // blindness (A great inhibiter) and then poison disease and curse. - - // Check seen allies in 20M - // Work in a loop of all creatures to check the loop only once. - - // To prioritise (IE: Ignore our poison, but heal someone who is petrified) - // we loop all targets, and set them to variable objects for this function. - int bPetrify, bParalsis, bDazed, bBlind, bNegative, nAbilityDamage, - bSlow, bEntangle,/* Set bEntangle to bSpeedDecrease too */ bDeaf, - bCurse, bDisease, bPoison, bFear, bStun; - // Objects which have those effects - object oPetrify, oParalsis, oDazed, oBlind, oNegative, oAbilityDamage, - oSlow, oEntangle,/* Set oEntangle to oSpeedDecrease too */ oDeaf, - oCurse, oDisease, oPoison, oFear, oStun; - - // THOUGHTS: - - // Perhaps have heal self, then check very bad conditoins (paralysis, petrify) - // unless a really damaged ally is nearby, then heal, then remove the not so - // bad effects. - - // However, start with us! - int nCnt = 0;// When we add 1, we'll get the first target. - int nEffectHex, nAbility; - object oHeal = OBJECT_SELF; - while(GetIsObjectValid(oHeal) && GetDistanceToObject(oHeal) <= 20.0) - { - // Don't target undead - if(MyPRCGetRacialType(oHeal) != RACIAL_TYPE_UNDEAD) - { - // Go through possible effects in priority order. - nEffectHex = GetLocalInt(oHeal, AI_EFFECT_HEX); - if(bPetrify != TRUE && (nEffectHex & GlobalEffectPetrify)) - { - oPetrify = oHeal; - bPetrify = TRUE; - } - // Paralsis - if(bParalsis != TRUE && (nEffectHex & GlobalEffectParalyze)) - { - oParalsis = oHeal; - bParalsis = TRUE; - } - // Stun - if(bStun != TRUE && (nEffectHex & GlobalEffectStun)) - { - oStun = oHeal; - bStun = TRUE; - } - // Fear - if(bFear != TRUE && (nEffectHex & GlobalEffectFear)) - { - oFear = oHeal; - bFear = TRUE; - } - // Dazed - if(bDazed != TRUE && (nEffectHex & GlobalEffectDazed)) - { - oDazed = oHeal; - bDazed = TRUE; - } - // Blindness - if(bBlind != TRUE && (nEffectHex & GlobalEffectBlindness)) - { - oBlind = oHeal; - bBlind = TRUE; - } - // Negative level is tough - if(bNegative != TRUE && (nEffectHex & GlobalEffectNegativeLevel)) - { - oNegative = oHeal; - bNegative = TRUE; - } - // Slow - only set if they are not hasted. It'd be a waste otherwise. - if(bSlow != TRUE && (nEffectHex & GlobalEffectSlowed) && - !AI_GetAIHaveEffect(GlobalEffectHaste, oHeal)) - { - oSlow = oHeal; - bSlow = TRUE; - } - // Entangle OR movement slowed. - if(bEntangle != TRUE && ((nEffectHex & GlobalEffectSlowed) || - (nEffectHex & GlobalEffectMovementSpeedDecrease))) - { - oEntangle = oHeal; - bEntangle = TRUE; - } - // Deafness - if(bDeaf != TRUE && (nEffectHex & GlobalEffectDeaf)) - { - oDeaf = oHeal; - bDeaf = TRUE; - } - // Curse - if(bCurse != TRUE && (nEffectHex & GlobalEffectCurse)) - { - oCurse = oHeal; - bCurse = TRUE; - } - // Disease - if(bDisease != TRUE && (nEffectHex & GlobalEffectDisease)) - { - oDisease = oHeal; - bDisease = TRUE; - } - // Poison - if(bPoison != TRUE && (nEffectHex & GlobalEffectPoison)) - { - oPoison = oHeal; - bPoison = TRUE; - } - // Lots of negative effects. - // Set all 3 here. - - // Returns the nearest ally with nMin effects, and X more based on HD. - // - Checks us first. True if (HD/6) Effects and (nMin - 1) effects - // - Checks leader next. True if (HD/5) Effects and (nMin - 2) effects - // - Checks allies after. True if (HD/4) Effects and (nMin) effects - nAbility = GetLocalInt(oHeal, AI_ABILITY_DECREASE); - - // Must have more ability decreases then the last one checked, and - // more damage then a cirtain amount compared to the hit dice, or - // at least 10. - // A LOT more simple then before. - if(nAbility > nAbilityDamage && nAbility >= 10 && - nAbility >= GetHitDice(oHeal) / 4) - { - nAbilityDamage = nAbility; - oAbilityDamage = oHeal; - } - } - // If we are blind, we cannot target others to heal them. We must only - // target ourselves (if anyone!) - if(AI_GetAIHaveEffect(GlobalEffectBlindness, OBJECT_SELF)) - { - // Break. - break; - } - // Carry on loop - nCnt++; - oHeal = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - } - - - // Lastly, ability damage ETC can come in after the stuns, or right at - // the end, depending on the amount. - - // Petrify - remove it first. - if(bPetrify) - { - // Only one - if(AI_ActionCastSpell(SPELL_STONE_TO_FLESH, oPetrify)) return TRUE; - } - // First, Paralysis should be removed (Includes stunning) - if(bParalsis) - { - // Freedom first - if(AI_ActionCastSpell(SPELL_FREEDOM_OF_MOVEMENT, oParalsis)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oParalsis)) return TRUE; - } - // Stun - only G.Restoration removes this. - if(bStun) - { - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oStun)) return TRUE; - } - // Daze - if(bDazed) - { - // Freedom first - if(AI_ActionCastSpell(SPELL_FREEDOM_OF_MOVEMENT, oDazed)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oDazed)) return TRUE; - } - // Fear - if(bFear) - { - // Freedom first - if(AI_ActionCastSpell(SPELL_REMOVE_FEAR, oFear)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oFear)) return TRUE; - } - // Next? blindness - if(bBlind) - { - // Remove first - if(AI_ActionCastSpell(SPELL_REMOVE_BLINDNESS_AND_DEAFNESS, oBlind)) return TRUE; - if(AI_ActionCastSpell(SPELL_FREEDOM_OF_MOVEMENT, oBlind)) return TRUE; - if(AI_ActionCastSpell(SPELL_RESTORATION, oBlind)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oBlind)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oBlind)) return TRUE; - } - // Lots of negative effects. - if(nAbilityDamage >= 7) - { - // Only these can remove ability decreases ETC. - if(AI_ActionCastSpell(SPELL_LESSER_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(SPELL_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oAbilityDamage)) return TRUE; - } - // Negative level is tough - if(bNegative) - { - // Only these can remove it - if(AI_ActionCastSpell(SPELL_RESTORATION, oNegative)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oNegative)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oNegative)) return TRUE; - } - // Slow - if(bSlow) - { - // haste - we don't set we have this OnSpawn, because if we have not - // got any other healing cure spells, we're probably not meant to cast it on slowed people. - if(AI_ActionCastSpell(SPELL_MASS_HASTE, oSlow)) return TRUE; - if(AI_ActionCastSpell(SPELL_HASTE, oSlow)) return TRUE; - } - // Heal things with freedom of movement/greater restoration - if(bSlow) - { - oHeal = oSlow; - } - else if(bEntangle) - { - oHeal = oSlow; - } - // If got either, then oHeal will be the appropriate one to heal ith FoM - if(bSlow || bEntangle) - { - // Freedom first - if(AI_ActionCastSpell(SPELL_FREEDOM_OF_MOVEMENT, oHeal)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oHeal)) return TRUE; - } - // Deafness - if(bDeaf) - { - // Remove first - if(AI_ActionCastSpell(SPELL_REMOVE_BLINDNESS_AND_DEAFNESS, oDeaf)) return TRUE; - if(AI_ActionCastSpell(SPELL_FREEDOM_OF_MOVEMENT, oDeaf)) return TRUE; - if(AI_ActionCastSpell(SPELL_RESTORATION, oDeaf)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oDeaf)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oDeaf)) return TRUE; - } - // Quite a few negative effects (5 or more) - if(nAbilityDamage >= 5) - { - // Only these can remove ability decreases ETC. - if(AI_ActionCastSpell(SPELL_LESSER_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(SPELL_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oBlind)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oAbilityDamage)) return TRUE; - } - // Curse - if(bCurse) - { - // Remove first - if(AI_ActionCastSpell(SPELL_REMOVE_CURSE, oCurse)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oCurse)) return TRUE; - } - // Disease - if(bDisease) - { - // Remove first - if(AI_ActionCastSpell(SPELL_REMOVE_DISEASE, oDisease)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oDisease)) return TRUE; - } - // Poison - if(bPoison) - { - // Remove first - if(AI_ActionCastSpell(SPELL_NEUTRALIZE_POISON, oPoison)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oPoison)) return TRUE; - } - // See if there is anyone with a decent amount of effects. - // Some negative effects (3 or more) - if(nAbilityDamage >= 3) - { - // Only these can remove ability decreases ETC. - if(AI_ActionCastSpell(SPELL_LESSER_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(SPELL_RESTORATION, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(AI_SPELLABILITY_RESTORATION_OTHERS, oAbilityDamage)) return TRUE; - if(AI_ActionCastSpell(SPELL_GREATER_RESTORATION, oAbilityDamage)) return TRUE; - } - return FALSE; -} - -/*:://///////////////////////////////////////////// -//:: Name: TalentHeal -//:://///////////////////////////////////////////// - HEAL ALL ALLIES - Only if they are in sight, and are under a percent%. Always nearest... -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptHealingAlly() -{ - // If we are polymorphed, cannot heal anyone - thats cheating. Using our - // class feats we shouldn't have access to also isn't a nice idea. - if(AI_GetAIHaveEffect(GlobalEffectPolymorph)) return FALSE; - - // Are we able to raise allies? - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER)) - { - // Leader - if dead, make sure we raise them! - if(GetIsObjectValid(GlobalNearestLeader) && - GetIsDead(GlobalNearestLeader) && - !GetLocalInt(GlobalNearestLeader, AI_INTEGER + I_AM_TOTALLY_DEAD)) - { - // Talent 7 - Conditional single. - if(AI_ActionCastSpell(SPELL_RESURRECTION, GlobalNearestLeader, 17, FALSE)) return TRUE; - if(AI_ActionCastSpell(SPELL_RAISE_DEAD, GlobalNearestLeader, 15, FALSE)) return TRUE; - } - // Get the nearest ally, seen, who is dead - // - This can cause problems as no looping dead people, as there is a - // "totally dead" flag, used for bioware's lootable corpses. - int nCnt = 1; - object oDead = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, FALSE, OBJECT_SELF, nCnt, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - // Loop the dead people we see (allied ones) if we test just one - it/ - // can go wrong. - while(GetIsObjectValid(oDead)) - { - if(GetIsObjectValid(oDead) && !GetIgnore(oDead) && - !GetLocalInt(oDead, AI_INTEGER + I_AM_TOTALLY_DEAD)) - { - if(AI_ActionCastSpell(SPELL_RESURRECTION, oDead, 17, FALSE)) return TRUE; - if(AI_ActionCastSpell(SPELL_RAISE_DEAD, oDead, 15, FALSE)) return TRUE; - } - // Get next dead seen ally - nCnt++; - oDead = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, FALSE, OBJECT_SELF, nCnt, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - } - } - // Do we heal allies? Spawn toggles for this. Only cure self means we don't - // target others at all. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF, AI_OTHER_COMBAT_MASTER) && - !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER)) - { - // We always heal leaders - // - Might make % HP checks. - if(GlobalValidLeader) - { - if(AI_ActionHealObject(GlobalNearestLeader)) return TRUE; - } - // Else we may heal a set ally - else if(GlobalValidSeenAlly) - { - // We run through a loop, and get who we might heal ;-) - int nNeedToBeAt = GetBoundriedAIInteger(AI_HEALING_ALLIES_PERCENT, 60, 100, 1); - object oAllyToHeal, oLoopTarget; - int nCnt, nPercentHitPoints, nChosenPercentHitPoints; - float fDistance, fChosenLastDistance; - // bSummonHeal will be TRUE to heal associates only if we have <= 3 allies in total - int bSummonHeal = FALSE; - if(GlobalTotalAllies <= 3) - { - bSummonHeal = TRUE; - } - fChosenLastDistance = 60.0;// So 1st target in health band gets picked - nCnt = 1; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oLoopTarget)) - { - if(MyPRCGetRacialType(oLoopTarget) != RACIAL_TYPE_CONSTRUCT && - (GetAssociateType(oLoopTarget) == ASSOCIATE_TYPE_NONE || bSummonHeal == TRUE)) - { - // We do actually not ALWAYS use the nearest dead person, nor - // the most damaged in 20M or so. We use a mixture - the most - // damaged in a cirtain range. - nPercentHitPoints = AI_GetPercentOf(GetCurrentHitPoints(oLoopTarget), GetMaxHitPoints(oLoopTarget)); - // Do we consider them needing healing? - if(nPercentHitPoints <= nNeedToBeAt) - { - // Distance to them - we may not just heal the nearest under 60% - fDistance = GetDistanceToObject(oLoopTarget); - if(fDistance < fChosenLastDistance || - (fDistance < (fChosenLastDistance + 5.0) && - nPercentHitPoints < nChosenPercentHitPoints - 10)) - { - oAllyToHeal = oLoopTarget; - fChosenLastDistance = fDistance; - nChosenPercentHitPoints = nPercentHitPoints; - } - } - } - nCnt++; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - } - // Did we find someone to heal? - if(nChosenPercentHitPoints > 0) - { - int nAllyHealRace = MyPRCGetRacialType(oAllyToHeal); - // Undead - negative energy heals! - if(nAllyHealRace == RACIAL_TYPE_UNDEAD) - { - // Stop now whatever, true or false. - return AI_ActionHealUndeadObject(oAllyToHeal); - } - else //if(nAllyHealRace != RACIAL_TYPE_CONSTRUCT) // Checked earlier - { - if(AI_ActionHealObject(oAllyToHeal)) - { - return TRUE; - } - // This will, if they have any (Standard ones! unless you add them in) - // healing potions, they will, if close and no cleric, pass them to - // people who need them. It uses ActionGiveItem so may move to target. - // There are extra speakstrings for these events. - else if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER) && - // Can they use potions anyway? - nAllyHealRace != RACIAL_TYPE_ABERRATION && nAllyHealRace != RACIAL_TYPE_BEAST && - nAllyHealRace != RACIAL_TYPE_ELEMENTAL && nAllyHealRace != RACIAL_TYPE_VERMIN && - nAllyHealRace != RACIAL_TYPE_MAGICAL_BEAST && nAllyHealRace != RACIAL_TYPE_DRAGON && - nAllyHealRace != RACIAL_TYPE_ANIMAL) - { - // So we pass over a potion. Obviously, we do not need healing, - // so any potion is good! - // NW_IT_MPOTION001 = Light - // NW_IT_MPOTION002 = Serious - // NW_IT_MPOTION003 = Critical - // NW_IT_MPOTION012 = Heal - // NW_IT_MPOTION020 = Moderate - - // Do we have any of the above? Eh? - // Heal - object oPotionToPass = GetItemPossessedBy(OBJECT_SELF, "NW_IT_MPOTION012"); - if(!GetIsObjectValid(oPotionToPass)) - { - // Critical - oPotionToPass = GetItemPossessedBy(OBJECT_SELF, "NW_IT_MPOTION003"); - if(!GetIsObjectValid(oPotionToPass)) - { - // Serious - oPotionToPass = GetItemPossessedBy(OBJECT_SELF, "NW_IT_MPOTION002"); - if(!GetIsObjectValid(oPotionToPass)) - { - // Moderate - oPotionToPass = GetItemPossessedBy(OBJECT_SELF, "NW_IT_MPOTION020"); - if(!GetIsObjectValid(oPotionToPass)) - { - // Light - oPotionToPass = GetItemPossessedBy(OBJECT_SELF, "NW_IT_MPOTION001"); - if(!GetIsObjectValid(oPotionToPass)) - { - // If NONE are valid, we delete this spawn in condition - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER); - // Stop - passing potions is last thing to try - return FALSE; - } - } - } - } - } - // If any valid, we pass it. - if(GetIsObjectValid(oPotionToPass)) - { - // Pass it over with ActionGiveItem - ActionGiveItem(oPotionToPass, oAllyToHeal); - // Speak arrays. - string sSpeak = GetLocalString(OBJECT_SELF, AI_TALK_WE_PASS_POTION + "1"); - if(sSpeak != "") - { - SpeakString(sSpeak); - } - sSpeak = GetLocalString(OBJECT_SELF, AI_TALK_WE_GOT_POTION + "1"); - if(sSpeak != "") - { - AssignCommand(oAllyToHeal, SpeakString(sSpeak)); - } - return TRUE; - } - } - } - } - } - } - return FALSE; -} - -/*:://///////////////////////////////////////////// -//:: Name: DoSummonFamiliar -//:://///////////////////////////////////////////// - This will, if it can, summon a familiar, or - animal companion, and if set to want to. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptFeatSummonFamiliar() -{ - if(GetSpawnInCondition(AI_FLAG_COMBAT_SUMMON_FAMILIAR, AI_COMBAT_MASTER)) - { - // Summon our familiar (Bat) first. - if(!GetIsObjectValid(GetAssociate(ASSOCIATE_TYPE_FAMILIAR))) - { - // We use the new function. We use the spellability, as to not - // cause any errors (hopefully) - if(AI_ActionUseSpellLikeFeat(FEAT_SUMMON_FAMILIAR, SPELLABILITY_SUMMON_FAMILIAR)) - { - // 22: "[DCR:Feat] Summoning my familiar" - DebugActionSpeakByInt(22); - return TRUE; - } - } - // Else, check for our companion (Badger) - else if(!GetIsObjectValid(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION))) - { - // Same as above for Summoning my Animal Companion. - if(AI_ActionUseSpellLikeFeat(FEAT_ANIMAL_COMPANION, SPELLABILITY_SUMMON_ANIMAL_COMPANION)) - { - // 23: "[DCR:Feat] Summoning my animal companion" - DebugActionSpeakByInt(23); - return TRUE; - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name AI_ActionFleeScared -//:://///////////////////////////////////////////// - Makes the person move away from the nearest enemy, or the defined target. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:: Created On: 13/01/03 -//:://///////////////////////////////////////////*/ -void AI_ActionFleeScared() -{ - // Sets to flee mode - SetCurrentAction(AI_SPECIAL_ACTIONS_FLEE); - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - SpeakArrayString(AI_TALK_ON_STUPID_RUN); - } - ClearAllActions(); - // 24: "[DCR:Fleeing] Stupid/Panic/Flee moving from enemies/position - We are a commoner/no morale/failed < 3 int" - DebugActionSpeakByInt(24); - - // Turn on fleeing visual effect - ApplyFleeingVisual(); - - // Get a target, or run from position - object oTarget = GlobalNearestEnemySeen; - if(!GetIsObjectValid(oTarget)) - { - oTarget = GlobalNearestEnemyHeard; - if(!GetIsObjectValid(oTarget)) - { - oTarget = GetLastHostileActor(); - // Sanity check checks seen or heard too. - if(AI_GetTargetSanityCheck(oTarget)) - { - // Away from position (EG: Away from an hostile AOE spell) - ActionMoveAwayFromLocation(GetLocation(OBJECT_SELF), TRUE, 50.0); - return;// Stop, no move away from enemy - } - } - } - // Default action is to move away from the nearest seen enemy - in this case, - // it is valid. - ActionMoveAwayFromObject(oTarget, TRUE, 50.0); -} -/*:://///////////////////////////////////////////// -//:: Name Flee -//:://///////////////////////////////////////////// - Makes checks, and may flee. - - SpawnInCondition(TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER); - // This turns OFF any sort of group morale bonuses. - - - SpawnInCondition(FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER); - // This is a simple thing, and will, instead of moving to the best - // group of allies, will just move to the nearest non-seen and non-heard - // ally. This may help resources...if fleeing is activated. - - SpawnInCondition(FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER); - // This will flee to an object, with the correct tag. - // ONLY if they are not there already, of course. Gets nearest (but if - // not valid, any one). This will get any object - placeables, monsters, - // well - anything! Also, waypoints, so this is easily useful. - // Can be dynamic: Instead of "BOS.." it could be GetTag(OBJECT_SELF) + "_FLEE" or something - // Ideas: Fleeing to thier leader, fleeing to a cage or a door (can be other area). - - LocalString(OBJECT_SELF, AI_FLEE_OBJECT, "BOSS_TAG_OR_WHATEVER"); - // This needs setting if the above is to work. - -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ -// Only true if we have a flee object. -int AI_ActionFlee(string sArray) -{ - object oToFlee = AI_GetNearbyFleeObject(); - if(GetIsObjectValid(oToFlee)) - { - // Speak string... - if(sArray != "") - { - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - SpeakArrayString(sArray); - } - } - // Set it so we will not return for a bit. - SetAIObject(AI_FLEE_TO, oToFlee); - // Sets to flee mode - SetCurrentAction(AI_SPECIAL_ACTIONS_FLEE); - // Turn on fleeing visual effect - ApplyFleeingVisual(); - // 25: [DCR:Fleeing] Fleeing to allies. [ID Array] " + sArray + " [Ally] " + GetName(oToFlee) - DebugActionSpeakByInt(25, oToFlee, FALSE, sArray); - // Move too them. - ActionMoveToObject(oToFlee, TRUE); - return TRUE; - } - return FALSE; -} -// Fleeing - set OnSpawn for setup. Uses a WILL save! -// - Bonuses in groups -// - May go get help -// - Won't run on a CR/HD threshold. -// - Leaders help! And all is intelligence based. -int AI_AttemptMoraleFlee() -{ - // If we are immune to fleeing somehow, break - if(GetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER)) return FALSE; - - // Get our morale value (Higher = Break less often) - int nMoraleValue = GetAIInteger(AI_MORALE); - // Commoner flee. Commoners have AI_MORALE set to -1. - if(nMoraleValue < FALSE) - { - AI_ActionFleeScared(); - return TRUE; - } - // Declare vaiables... - // We only flee every few rounds, or at least check too! - // - Its on a timer. - if(!GetLocalTimer(AI_TIMER_FLEE) || - // - We check each round if under 40 and under 10% HP - (GlobalOurCurrentHP <= 40 && GlobalOurPercentHP <= 10)) - { - // Re-set timer even if we don't do the morale check. - if(!GetLocalTimer(AI_TIMER_FLEE)) - { - SetLocalTimer(AI_TIMER_FLEE, 20.0); - } - // Bosses, when they flee, make others flee. - int bBoss = GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Specials first: Never fight against impossible odds...or leader sense. - if(GlobalAverageEnemyHD > GlobalOurHitDice + 8) - { - // If we don't fight against impossible odds, we will flee given that - // they are very powerful (compared to us). Bosses automatically - // have this Spawn condition set (IE: Says || bBoss) - if(GetSpawnInCondition(AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS, AI_TARGETING_FLEE_MASTER) || bBoss) - { - // You see, if there is no valid object ,we stop the script so not to call GetNearbyFleeObject more then once - if(AI_ActionFlee(AI_TALK_ON_MORALE_BREAK)) - { - // Are we a boss? If we are, and we want to flee, we force - // the men we command to run away too! - if(bBoss) - { - // AI command - makes everyone flee. - // * This isn't spoken, just generally "Done", as we - // normally see in the movies and so on... - AISpeakString(AI_SHOUT_LEADER_FLEE_NOW); - } - return TRUE; - } - else - { - // Didn't want to flee, don't do anything special. - return FALSE; - } - } - } - // HP check - int nHPBeAt = GetBoundriedAIInteger(HP_PERCENT_TO_CHECK_AT, 80, 100, 1); - // Do the check - if(GlobalOurPercentHP <= nHPBeAt || - // Either HP OR one of these: - (!GetSpawnInCondition(AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT, AI_TARGETING_FLEE_MASTER) && - // - If the enemy is very strong, we do a will save (8 HD over us) - (GlobalAverageEnemyHD > GlobalOurHitDice + 8 || - // - If we have a morerate morale penalty (Set by massive damage/many deaths around us) - // - We are alone - GetAIInteger(AI_MORALE_PENALTY) >= 10 || - GlobalTotalAllies < 1))) - { - // Difference of HD to cancle out check... - int nDifference = GetBoundriedAIInteger(AMOUNT_OF_HD_DIFFERENCE_TO_CHECK, -2, -50, 50);// Default to -2. - int nAlliesBonus = FALSE; - // We add X amount per ally present. - // - We can add up to a minimum of 6, maximum of our hit dice/2. - if(!GetSpawnInCondition(AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER) && - GlobalTotalAllies >= 1) - { - if(GlobalTotalAllies > 6) - { - nAlliesBonus = 6; - } - else if(nAlliesBonus > GlobalOurHitDice/2) - { - nAlliesBonus = GlobalOurHitDice/2; - } - else - { - nAlliesBonus = GlobalTotalAllies; - } - nMoraleValue += nAlliesBonus; - } - // Double value if leader present! - if(GlobalValidLeader) nMoraleValue *= 2; - // Check... - if((GlobalOurHitDice - nDifference) < GlobalAverageEnemyHD) - { - // Save DC from 0 to 50. Default 20. This is the base. - int nSaveDC = GetBoundriedAIInteger(BASE_MORALE_SAVE, 20, 100, 1); - // Change it as with our leader, morale and group morale bonuses. - nSaveDC -= nMoraleValue; - // Note we will add DC based on difference in HD between us - // and our Global Melee Target (as the fact is, it is normally - // the nearest, and is always valid. Also, if you are fighting - // something you can defeat (EG: Badger summon) you don't run, - // but you will run against the level 20 mage who summoned it, if - // you were levle 5 or so. - - // Add thiers to DC, take ours. Basically Ours - Theres added on. - nSaveDC += GetHitDice(GlobalMeleeTarget); - nSaveDC -= GlobalOurHitDice; - - // If we have a save DC of over 1...we check! - if(nSaveDC >= 1) - { - // This reports the will save to the enemy - who we check against, - // and thusly might well be immune to fear (such as via. - // protection from evil and so on). - if(!WillSave(OBJECT_SELF, nSaveDC, SAVING_THROW_TYPE_FEAR, GlobalMeleeTarget)) - { - // If we fail the will save, VS fear... - // You see, if there is no valid object ,we stop the script so not to call GetNearbyFleeObject more then once - if(AI_ActionFlee(AI_TALK_ON_MORALE_BREAK)) - { - return TRUE; - } - // Intelligence 1-3 runs when we fail and no allies. - // 4+ means we don't run, and stay and fight (IE FALSE) - else if(GlobalIntelligence <= 3) - { - // Stupid run - AI_ActionFleeScared(); - return TRUE; - } - else - // Higher intelligence don't run from them, but does say something - { - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - SpeakArrayString(AI_TALK_ON_CANNOT_RUN); - } - } - return FALSE; - } - } - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: GoForTheKill -//:://///////////////////////////////////////////// - Very basic at the moment. This will, if thier inteligence is - high and they can be hit relitivly easily, and at low HP - will attack in combat. May add some spells, if I can be bothered. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptGoForTheKill() -{ - // Turn off script - if(GetSpawnInCondition(AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL, AI_COMBAT_MASTER) || - GlobalIntelligence <= 8) - { - return FALSE; - } - // TRUE means melee only - int bSleepingOnly = FALSE; - // Finish off a dead PC, or dying one, out of combat. - object oTempEnemy = GetNearestCreature( - CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, - OBJECT_SELF, 1, - CREATURE_TYPE_IS_ALIVE, FALSE, - CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - // Check if valid. If not, check for one with the spell "sleep" on them. - if(!GetIsObjectValid(oTempEnemy) || AI_GetAIHaveEffect(GlobalEffectPetrify, oTempEnemy) || - GetCurrentHitPoints(oTempEnemy) <= -10) - { - // This means we only attack in melee (no spells, no ranged) - bSleepingOnly = TRUE; - oTempEnemy = GetNearestCreature( - CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, - OBJECT_SELF, 1, - CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_SLEEP, - CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - // Dragon sleep breath - if(!GetIsObjectValid(oTempEnemy) || GetHitDice(oTempEnemy) > 4 || - AI_GetAIHaveEffect(GlobalEffectPetrify, oTempEnemy)) - { - oTempEnemy = GetNearestCreature( - CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, - OBJECT_SELF, 1, - CREATURE_TYPE_HAS_SPELL_EFFECT, SPELLABILITY_DRAGON_BREATH_SLEEP, - CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - // Could add something about Paralyzed people here... - } - } - float fDistance = GetDistanceToObject(oTempEnemy); - // Valid, and is not "dead dead" - if(GetIsObjectValid(oTempEnemy) && - // -10 is TOTALLY dead. - GetCurrentHitPoints(oTempEnemy) > -10 && - // Intelligence 9+. 10 will attack with many enemies, 9 with 1 or under - ((GlobalMeleeAttackers <= 3 && - GlobalIntelligence >= 10) || - GlobalMeleeAttackers <= 1) && - // Make sure it isn't too far, and they are only sleeping - (bSleepingOnly == FALSE || - fDistance < 6.0) && - // Big AC check, but mages with +1, VS ac of 30 won't hit :-) - GlobalOurBaseAttackBonus >= GetAC(oTempEnemy) - 25) - { - // 26: "[DCR:GFTK] Attacking a PC who is dying/asleep! [Enemy]" + GetName(oTempEnemy) - DebugActionSpeakByInt(26, oTempEnemy); - // Attempt default most damaging to try and do most damage. - if(fDistance > GlobalRangeToMeleeTarget) - { - ActionEquipMostDamagingRanged(oTempEnemy); - } - else - { - ActionEquipMostDamagingMelee(oTempEnemy); - } - ActionAttack(oTempEnemy); - return TRUE; - } - - // Now, we check for most damaged member of the nearest enemies faction. - // - Uses bioware function - just...simpler - // - Only with 9+ int - oTempEnemy = GetFactionMostDamagedMember(GlobalMeleeTarget); - // - Effect, if lots of people can attack this, like with ranged things, - // it can lead to some bloody deaths, especially for some classes. - // - Note: Intelligence of 9+ shouldn't be used for low levels! - if(GetIsObjectValid(oTempEnemy)) - { - // From 1-6, or 1-10 HP they need. - int nHP = GetCurrentHitPoints(oTempEnemy); - int nBeBelow = 6 + Random(4); - int bHTH = FALSE;// TRUE = melee - fDistance = GetDistanceToObject(oTempEnemy); - // If in melee range, we set to melee, and add stength to what we can knock off! - if(fDistance <= 4.0) - { - bHTH = TRUE; - nBeBelow += GetAbilityModifier(ABILITY_STRENGTH); - } - // Check... - if(GetCurrentHitPoints(oTempEnemy) <= nBeBelow && - GetMaxHitPoints(oTempEnemy) >= 20) - { - // We also need to check if we can hit them to kill them! - // - Either high BAB against thier AC (take roll as 15+) - if(GlobalOurBaseAttackBonus >= GetAC(oTempEnemy) - 15 || - // - or it is 0.75 of our hit dice (IE cleric or better). - GlobalOurBaseAttackBonus >= ((GetHitDice(oTempEnemy) * 3) / 2)) - { - if(bHTH) - { - ActionEquipMostDamagingMelee(oTempEnemy); - } - // We take a big risk here... we equip a ranged (default call) - // not how good it is, things in the way, or - // if we don't have ammo or even have it! - // - EquipsMelee Anyway. - // - Still needs to be valid, else we do normal actions. - else if(GetIsObjectValid(GetAIObject(AI_WEAPON_RANGED))) - { - ActionEquipMostDamagingRanged(oTempEnemy); - } - else // If we have no ranged wepaon, ignore this. - { - return FALSE; - } - ActionAttack(oTempEnemy); - return TRUE; - } - // Else, we do spells! Just a few... - else - { - // This stops us being unprotected, as there may be melee attackers. - if(!bHTH || GlobalMeleeAttackers < 3) - { - // Spells are done with little consideration for immunities. - // - Saves power, and shows fury to knock out. - // - All auto-hit, no-save spells. - // - No items. - // - Checks immunity level, incase of globes. - int nImmuneLevel = AI_GetSpellLevelEffect(oTempEnemy); - - // Isaacs storms are long range beasts! - // Greater Missile Storm. Level 6 (Wizard). 2d6 * Caster level dice up to 20, divided between targets. - if(AI_ActionCastSpell(SPELL_ISAACS_GREATER_MISSILE_STORM, oTempEnemy, 16)) return TRUE; - - if(nImmuneLevel < 4) - { - // Lesser Missile Storm. Level 4 (Wizard). 1d6 * Caster level dice up to 10, divided between targets. - if(AI_ActionCastSpell(SPELL_ISAACS_LESSER_MISSILE_STORM, oTempEnemy, 14)) return TRUE; - - if(nImmuneLevel < 3) - { - // Searing light. Level 3 (Cleric). Full level: 1-10d6 VS undead. Half Level: 1-5d6 VS constructs. 1-5d8 VS Others. - if(AI_ActionCastSpell(SPELL_SEARING_LIGHT, oTempEnemy, 13)) return TRUE; - - if(nImmuneLevel < 2) - { - // Acid arrow. Level 2 (Wizard). 3d6 damage on hit. 1d6 for more rounds after. - if(AI_ActionCastSpell(SPELL_MELFS_ACID_ARROW, oTempEnemy, 12)) return TRUE; - - if(nImmuneLevel < 1) - { - // Magic missile. Good knockout spell. Shield stops it. - if(!GetHasSpellEffect(SPELL_SHIELD, oTempEnemy)) - { - // Shad. conjuration version. - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_MAGIC_MISSILE, oTempEnemy, 11, FALSE, TRUE)) return TRUE; - - // Magic Missile. Level 1 (Wizard). 1-5 missiles, 1-9 levels. 1d4+1 damage/missile. - if(AI_ActionCastSpell(SPELL_MAGIC_MISSILE, oTempEnemy, 11)) return TRUE; - } - - // Negative energy ray - note will save! - if(fDistance < fMediumRange && - !AI_SaveImmuneAOE(oTempEnemy, SAVING_THROW_WILL, 1)) - { - // Negative Energy Ray. Level 1 (Mage) 2 (Cleric) 1d6(CasterLevel/2) to 5d6 negative damage. - if(AI_ActionCastSpell(SPELL_NEGATIVE_ENERGY_RAY, oTempEnemy, 11)) return TRUE; - } - } - } - } - } - } - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name: AbilityAura -//:://///////////////////////////////////////////// - This will use all aura (or "Persistant") abilties. - - Note: - - - They are cheat cast. If removed, as DMG, they are instantly re-applied as - a free action! - - They are cast instantly for the above reason, and cheat-cast. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -void AI_AttemptCastAuraSpell(int nSpellID) -{ - if(GetHasSpell(nSpellID) && !GetHasSpellEffect(nSpellID)) - { - // Cheat/fast cast the aura. - ActionCastSpellAtObject(nSpellID, OBJECT_SELF, METAMAGIC_NONE, TRUE, 20, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - } -} -// This will fire any aura's they have, quickened cast, and added to the top of -// thier action queue. -void AI_ActionAbilityAura() -{ - int nCnt; - // We can loop around a few: - // 195 AURA_BLINDING - // 196 Aura_Cold - // 197 Aura_Electricity - // 198 Aura_Fear - // 199 Aura_Fire - // 200 Aura_Menace - // 201 Aura_Protection - // 202 Aura_Stun - // 203 Aura_Unearthly_Visage - // 204 Aura_Unnatural - for(nCnt = SPELLABILITY_AURA_BLINDING; nCnt <= SPELLABILITY_AURA_UNNATURAL; nCnt++) - { - // Wrapper function. - AI_AttemptCastAuraSpell(nCnt); - } - // Other auras we would have unlimited uses in - AI_AttemptCastAuraSpell(SPELLABILITY_DRAGON_FEAR); - AI_AttemptCastAuraSpell(SPELLABILITY_TYRANT_FOG_MIST); - AI_AttemptCastAuraSpell(AI_SPELLABILITY_AURA_OF_HELLFIRE); - AI_AttemptCastAuraSpell(SPELLABILITY_AURA_HORRIFICAPPEARANCE); - - // Then, ones that are limited duration, or limited uses. - if(!GetHasSpellEffect(SPELLABILITY_MUMMY_BOLSTER_UNDEAD) && - GetHasSpell(SPELLABILITY_MUMMY_BOLSTER_UNDEAD)) - { - ActionCastSpellAtObject(SPELLABILITY_MUMMY_BOLSTER_UNDEAD, OBJECT_SELF); - } - // This acts like an ability - well, from my perspective. We add actions - // after it, and it is important to keep up. - // * Quick note: requires at least 1 monk level to work. - // * Note 2: Uses the new spell-like-feat abilties function, which did the - // same stuff as before, but is easier to debug etc. (although, empty body - // was a feat which worked fine). - AI_ActionUseSpellLikeFeat(FEAT_EMPTY_BODY, SPELLABILITY_EMPTY_BODY); -} -/*:://///////////////////////////////////////////// -//:: Name LeaderActions -//:://///////////////////////////////////////////// - This will make the leader "command" allies. Moving - one to get others, orshout attack my target. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -void AI_ActionLeaderActions() -{ - // We only advance if we are the group leader. - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER)) - { - // Does the enemy out class us by a random amount? (2-6 HD difference). - // Sends a runner. - if(GlobalAverageEnemyHD > (GlobalAverageFriendlyHD + d4() + 2)) - { - if(GlobalValidAlly && !GetLocalTimer(AI_TIMER_LEADER_SENT_RUNNER)) - { - object oBestAllies = AI_GetNearbyFleeObject(); - if(GetIsObjectValid(oBestAllies)) // Send a runner... - { - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - // Speak array. - SpeakArrayString(AI_TALK_ON_LEADER_SEND_RUNNER); - } - // All we need to do is set an action on the nearest ally, - // and the object to run to. - SetLocalObject(GlobalNearestAlly, AI_OBJECT + AI_RUNNER_TARGET, oBestAllies); - // Set action. - SetLocalInt(GlobalNearestAlly, AI_CURRENT_ACTION, AI_SPECIAL_ACTIONS_ME_RUNNER); - // Don't send another for 50 seconds. - SetLocalTimer(AI_TIMER_LEADER_SENT_RUNNER, 50.0); - } - } - } - // Second, we shout for people to target this person - IF we need help - // - Example, low HP us, high HP them. - // - Uses melee target. - int nLeaderCountForShout = GetAIInteger(AI_LEADER_SHOUT_COUNT); - nLeaderCountForShout++; - if(nLeaderCountForShout >= 5) - { - // Check HD difference - if(GetHitDice(GlobalMeleeTarget) - 5 > GlobalAverageEnemyHD) - { - // Set who we want them to attack. - SetAIObject(AI_ATTACK_SPECIFIC_OBJECT, GlobalMeleeTarget); - // Shout counter re-set - nLeaderCountForShout = FALSE; - - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - // Speak random custom shout (like "You lot, attack this one!") - SpeakArrayString(AI_TALK_ON_LEADER_ATTACK_TARGET); - } - - // Speak a silent AI shout - AISpeakString(AI_SHOUT_LEADER_ATTACK_TARGET); - } - } - SetAIInteger(AI_LEADER_SHOUT_COUNT, nLeaderCountForShout); - } -} -/*:://///////////////////////////////////////////// -//:: Name ArcherRetreat -//:://///////////////////////////////////////////// - This may make the archer retreat - if we have an ally helping, and - we have a nearby enemy. Means the loss of AOO's. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptArcherRetreat() -{ - // Many conditions - we must have it to start! - if(GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER) || - GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER)) - { - // Enemy range must be close (HTH distance, roughly) and we must have - // a close ally. ELSE we'll just get lots of AOO and die running (pointless) - // * Was > 1, now >= 1, 1.4 fix. - if((GlobalEnemiesIn4Meters >= 1 && GlobalValidAlly && GlobalRangeToAlly < 4.0) || - GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER)) - { - // We may, if at the right range (and got a ranged weapon) equip it. - object oRanged = GetAIObject(AI_WEAPON_RANGED); - if(GetIsObjectValid(oRanged) && - GetItemPossessor(oRanged) == OBJECT_SELF) - { - // Is the ranged weapon valid? - // We need valid ammo, else we eqip nothing! - int bValidAmmo = GetAIInteger(AI_WEAPON_RANGED_AMMOSLOT); - if(bValidAmmo == INVENTORY_SLOT_RIGHTHAND || - GetIsObjectValid(GetItemInSlot(bValidAmmo))) - { - // 27: "[DCR:Moving] Archer Retreating back from the enemy [Enemy]" + GetName(GlobalMeleeTarget) - DebugActionSpeakByInt(27, GlobalMeleeTarget); - // - Equip the rnaged weapon if not already - if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND) != oRanged) - { - ActionEquipItem(oRanged, INVENTORY_SLOT_RIGHTHAND); - } - // This action will cancle next round if we are far enough - // away from enemies. - ActionMoveAwayFromObject(GlobalMeleeTarget, TRUE, 15.0); - return TRUE; - } - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name UseTurning -//:://///////////////////////////////////////////// - This, if we have the feat, will turn things it can. - Need to really make sure it works well, and maybe - make an interval between one and another. -//:://///////////////////////////////////////////// -//:: Created By: Bioware. Edited by Jasperre. -//::////////////////////////////////////////////*/ -int AI_AttemptFeatTurning() -{ - // We loop the targets and see who we come up with to hit! - // - Use ranged enemy checks, seen/heard and only if we have any - // valid races in the area. - if(GetHasFeat(FEAT_TURN_UNDEAD)) - { - // The turn level is set OnSpawn if we have FEAT_TURN_UNDEAD - int nTurnLevel = GetAIInteger(AI_TURNING_LEVEL); - // Error checking - if(nTurnLevel <= 0) return FALSE; - - // We then loop through targets nearby, up to 20M. We can easily use - // GetHasSpellEffect(AI_SPELL_FEAT_TURN_UNDEAD) - // and for the epic feat - // GetHasSpellEffect(AI_SPELL_FEAT_PLANAR_TURNING) - - // Ok, so how does turning work? - // - Basically, all undead/virmin/elementals or outsiders are turned, - // with constructs being damaged (which still rocks!) - // - Works agasints non-friends. - // - If we have nClassLevel/2 >= nHD (nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget) - // then kill, else turn. - // - Only can turn if nHD <= nTurnLevel. - // - 20M range. - // Flags for bonus turning types - int bElemental = GetHasFeat(FEAT_AIR_DOMAIN_POWER) + GetHasFeat(FEAT_EARTH_DOMAIN_POWER) + GetHasFeat(FEAT_FIRE_DOMAIN_POWER) + GetHasFeat(FEAT_WATER_DOMAIN_POWER); - int bVermin = GetHasFeat(FEAT_PLANT_DOMAIN_POWER) + GetHasFeat(FEAT_ANIMAL_COMPANION); - int bConstructs = GetHasFeat(FEAT_DESTRUCTION_DOMAIN_POWER); - int bPlanarTurning = GetHasFeat(AI_FEAT_EPIC_PLANAR_TURNING); - // Outsiders can be turned via. Epic Planar Turning too. - int bOutsider = bPlanarTurning + GetHasFeat(FEAT_GOOD_DOMAIN_POWER) + GetHasFeat(FEAT_EVIL_DOMAIN_POWER); - int nHD, nRacial, bValid; - // Loop, using a sort of loop used for the turning check. - // - Same GetNearestCreature() as 1.64 has: Alive + Seen. - // - We stop if, when we would use it, it'd re-apply effects to one - // already turned. - // - We stop if we get to something we can turn! - int nCnt = 1; - object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, OBJECT_SELF, nCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - while(GetIsObjectValid(oTarget) && bValid == FALSE && GetDistanceToObject(oTarget) <= 20.0) - { - // Same check as in turn undead script. - if(!GetIsFriend(oTarget)) - { - nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget); - nRacial = MyPRCGetRacialType(oTarget); - // Planar creatures add spell resistance (don't bother if can't turn them) - if(nRacial == RACIAL_TYPE_OUTSIDER && bOutsider) - { - if(bPlanarTurning) - { - // Half with the epic feat - nHD += (GetSpellResistance(oTarget)/2); - } - else - { - // Full SR added without the epic feat. - nHD += GetSpellResistance(oTarget); - } - } - if(nHD <= nTurnLevel) - { - // If we would try and re-apply effects, then break and do - // not use - if(GetHasSpellEffect(AI_SPELL_FEAT_TURN_UNDEAD, oTarget) || - GetHasSpellEffect(AI_SPELL_FEAT_PLANAR_TURNING, oTarget)) - { - bValid = 2; - } - // Else Check the various domain turning types - else if(nRacial == RACIAL_TYPE_UNDEAD || - (nRacial == RACIAL_TYPE_VERMIN && bVermin) || - (nRacial == RACIAL_TYPE_ELEMENTAL && bElemental) || - (nRacial == RACIAL_TYPE_CONSTRUCT && bConstructs) || - (nRacial == RACIAL_TYPE_OUTSIDER && bOutsider)) - { - bValid = TRUE; - } - } - } - // Next alive, seen creature. - nCnt++; - oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, OBJECT_SELF, nCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - } - // If valid, use it - if(bValid == TRUE) - { - // 28: "[DCR:Turning] Using Turn Undead" - DebugActionSpeakByInt(28); - // We do not bother turning off hiding/searching - but we do check - // expertise! - if(GlobalIntelligence >= 4) - { - if(GetHasFeat(FEAT_IMPROVED_EXPERTISE)) - { - AI_SetMeleeMode(ACTION_MODE_IMPROVED_EXPERTISE); - } - else if(GetHasFeat(FEAT_EXPERTISE)) - { - AI_SetMeleeMode(ACTION_MODE_EXPERTISE); - } - } - // Note: No equipping shield, do it ASAP. Usually a shield is - // already equipped anyway, if we had one. - ActionUseFeat(FEAT_TURN_UNDEAD, OBJECT_SELF); - return TRUE; - } - } - // Else nothing to do it against or no feat. - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name TalentBardSong -//:://///////////////////////////////////////////// - This, if we have the feat, and not the effects, - will use it on ourselves. -//:://///////////////////////////////////////////// -//:: Created By: Bioware -//::////////////////////////////////////////////*/ -int AI_AttemptFeatBardSong() -{ - // Got it and not silenced - if(GetHasFeat(FEAT_BARD_SONGS) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - // The spell script used is 411 - it is also now named in the AI constant file - // Get nearest without this spell's effect to check too - object oSonged = GetNearestCreature(CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, AI_SPELLABILITY_BARD_SONG, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - if((/* 1.4: Noticed no need for below check - !GetHasSpellEffect(AI_SPELLABILITY_BARD_SONG, oSonged) && */ - !GetHasFeatEffect(FEAT_BARD_SONGS, oSonged) && - // Do not use if we are deaf... - !AI_GetAIHaveEffect(GlobalEffectDeaf, oSonged)) || - // ...but we could use it if we have an undeaf ally in 8M - (GetIsObjectValid(oSonged) && GetDistanceToObject(oSonged) < 8.0 && - !AI_GetAIHaveEffect(GlobalEffectDeaf, oSonged))) - { - // 29: "[DCR:Bard Song] Using" - DebugActionSpeakByInt(29); - // We do not bother turning off hiding/searching - ActionUseFeat(FEAT_BARD_SONGS, OBJECT_SELF); - return TRUE; - } - // We may use curse song! - else if(GetHasFeat(FEAT_CURSE_SONG)) - { - // get nearest without this spell's effect - oSonged = GetNearestCreature(CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELLABILITY_EPIC_CURSE_SONG, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - // If they are not cursed, IE valid, in 8M (1.4 change: was 6), - // and not deaf, we try it. - if(GetIsObjectValid(oSonged) && - GetDistanceToObject(oSonged) <= 8.0 && - !AI_GetAIHaveEffect(GlobalEffectDeaf, oSonged)) - { - // 30: "[DCR:Bard Curse Song] Using" - DebugActionSpeakByInt(30); - // We do not bother turning off hiding/searching - ActionUseFeat(FEAT_CURSE_SONG, OBJECT_SELF); - return TRUE; - } - } - } - return FALSE; -} - -// Wrappers for spellcasting groups of spells. - -// Wrappers Greater and Lesser spell breach. -int AI_ActionCastBreach() -{ - // Greater Spell Breach. Level 6 (Wizard). Dispels cirtain protections automatically + lowers spell resistance - if(AI_ActionCastSpell(SPELL_GREATER_SPELL_BREACH, GlobalDispelTarget, 16, FALSE)) return TRUE; - // Lesser Spell Breach. Level 4 (Wizard) Dispels cirtain protections automatically + lowers spell resistance - if(AI_ActionCastSpell(SPELL_LESSER_SPELL_BREACH, GlobalDispelTarget, 14, FALSE)) return TRUE; - return FALSE; -} -// Wrappers all dispel spells -int AI_ActionCastDispel() -{ - // Mordenkainens Disjunction. Level 9 (Wizard). Acts like a breach, dispel AND lowers SR, in a big area. - if(AI_ActionCastSpell(SPELL_MORDENKAINENS_DISJUNCTION, GlobalDispelTarget, 19, FALSE)) return TRUE; - // Greater Dispeling. Level 5 (Bard/Innate) 6 (Cleric/Druid/Mage) General dispel up to 15 caster levels. - if(AI_ActionCastSpell(SPELL_GREATER_DISPELLING, GlobalDispelTarget, 16, FALSE)) return TRUE; - // Dispel Magic. Level 3 (Bard/Cleric/Paladin/Mage/Innate) 6 (Druid) General dispel up to 10 caster levels. - if(AI_ActionCastSpell(SPELL_DISPEL_MAGIC, GlobalDispelTarget, 13, FALSE)) return TRUE; - // Only lesser if under 15 HD, because it may not be worth it (DC wise) - if(GlobalAverageEnemyHD < 15) - { - // Lesser Dispel. Level 1 (Bard) 2 (Cleric/Druid/Mage/Innate). General dispel up to 5 caster levels. - if(AI_ActionCastSpell(SPELL_LESSER_DISPEL, GlobalDispelTarget, 12, FALSE)) return TRUE; - } - return FALSE; -} -// This wrappers AI_ActionCastBreach() and AI_ActionCastDispel(). Input -// nValue for 1 (Lowest priority) to 5, to see if we'll use them. Returns -// TRUE if any are cast. -int AI_ActionAttemptDispel(int nValue, int bRangeMediumValid) -{ - // All range medium spells. Shouldn't use them in Time Stop. - if(bRangeMediumValid && !GlobalInTimeStop) - { - // Dispel number need to be nValue at least to use a breach - if(GlobalDispelTargetHighestBreach >= nValue) - { - // Wrapers Greater and Lesser Breach. - if(AI_ActionCastBreach()) return TRUE; - } - // Dispel >= nValue - if(GlobalDispelTargetHighestDispel >= nValue) - { - // Wrappers the dispel spells - if(AI_ActionCastDispel()) return TRUE; - } - } - // No dispels cast. - return FALSE; -} -// Wrappers Premonition, Greater Stoneskin and Stoneskin. -// Includes Shades Stoneskin too. SPELL_SHADES_STONESKIN -// - nLowest - 8 = Prem, 6 = Greater, 4 = Stoneskin -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) -int AI_SpellWrapperPhisicalProtections(int nLowest = 1) -{ - // Stoneskin - protection from attackers. - if(!AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections)) - { - // Epic Warding (Mage Only) - Damage reduction 50/+20. Lasts 1 round per level. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_EPIC_WARDING, AI_SPELL_EPIC_WARDING)) return TRUE; - - // Psionic Inertial Barrier - if(AI_ActionCastSpell(AI_SPELLABILITY_PSIONIC_INERTIAL_BARRIER)) return TRUE; - - if(nLowest <= 8) - { - // Preminition is 30/+5 damage resistance. Level 8 spell. Always class - // as level 9. (Mage) - if(AI_ActionCastSpell(SPELL_PREMONITION, OBJECT_SELF, 18, FALSE)) return TRUE; - if(nLowest <= 6) - { - // Then, greater stoneskin protects a lot of damage - 20/+5. - // We also consider this to be a high-level spell. Level 6 (Mage) 7 (druid) - if(AI_ActionCastSpell(SPELL_GREATER_STONESKIN, OBJECT_SELF, 16, FALSE)) return TRUE; - if(nLowest <= 4) - { - // Shades stoneskin. SPELL_SHADES_STONESKIN (Cast via. subspell) - if(AI_ActionCastSpell(SPELL_SHADES_STONESKIN, OBJECT_SELF, 16, FALSE, TRUE)) return TRUE; - - // Stoneskin is next, level 4, but 10/+5 resistance Level 4 (Mage) 5 (Druid) - if(AI_ActionCastSpell(SPELL_STONESKIN, OBJECT_SELF, 14, FALSE)) return TRUE; - } - } - } - } - return FALSE; -} -// Wrappers Energy Buffer, Protection From Elements, Resist Elements, Endure elements -// - nLowest - Goes 5, 3, 2, 1. -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections) -int AI_SpellWrapperElementalProtections(int nLowest = 1) -{ - // Elemental protections (fireball ETC) - if(!AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections) && nLowest <= 5) - { - // Energy buffer - 40/- resistance to the damage. - // 6 for druids ETC, but 5 Mage/Innate. - if(AI_ActionCastSpell(SPELL_ENERGY_BUFFER, OBJECT_SELF, 15, FALSE)) return TRUE; - if(nLowest <= 3) - { - // Protection from elements - 30/- resistance to the damage. Level 3 - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_ELEMENTS, OBJECT_SELF, 13, FALSE)) return TRUE; - if(nLowest <= 2) - { - // Resist elements - 20/- resistance to the damage. Level 2 - if(AI_ActionCastSpell(SPELL_RESIST_ELEMENTS, OBJECT_SELF, 12, FALSE)) return TRUE; - if(nLowest <= 1) - { - // Endure elements - 10/- resistance to the damage. Level 1 - if(AI_ActionCastSpell(SPELL_ENDURE_ELEMENTS, OBJECT_SELF, 11, FALSE)) return TRUE; - } - } - } - } - return FALSE; -} -// Wrappers Haste and Mass Haste. -// - nLowest - 6 = Mass, 3 = Haste -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) -int AI_SpellWrapperHasteEnchantments(int nLowest = 1) -{ - // Excelent to cast this normally - +4AC. Probably normally best after protections from - // phisical attacks. - if(!AI_GetAIHaveEffect(GlobalEffectHaste) && nLowest <= 6) - { - // The feat, for haste, called blinding speed. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_BLINDING_SPEED, AI_SPELLABILITY_BLINDING_SPEED)) return TRUE; - - // Mass haste, level 6 spell. (Mage/Bard) Affects allies, and adds +1 action, +4 AC and +150% move - if(AI_ActionCastSpell(SPELL_MASS_HASTE, OBJECT_SELF, 16, FALSE)) return TRUE; - - if(nLowest <= 3) - { - // Haste, Level 3 spell. (Mage/Bard), see mass haste. - if(AI_ActionCastSpell(SPELL_HASTE, OBJECT_SELF, 13, FALSE)) return TRUE; - } - } - return FALSE; -} -// Wrappers Shadow Shield, Ethereal Visage and Ghostly Visage. -// Includes Greater Shadow Conjuration Ghostly Visage (SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE -// - nLowest - 7 = Shadow, 6 = Ethereal 2 = Ghostly -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasVisageProtections) -int AI_SpellWrapperVisageProtections(int nLowest = 1) -{ - // Visages are generally lower DR, with some spell-resisting or effect-immunty extras. - if(!AI_GetAIHaveSpellsEffect(GlobalHasVisageProtections) && nLowest <= 7) - { - // Shadow Shield - has 10/+3 damage reduction - // Level 7 (Mage) - if(AI_ActionCastSpell(SPELL_SHADOW_SHIELD, OBJECT_SELF, 17, FALSE)) return TRUE; - if(nLowest <= 6) - { - // Ethereal Visage (level 6 (Mage)) is 20/+3 damage reduction - no limit! - // + Immunity to level 2, 1, 0 level spells. - if(AI_ActionCastSpell(SPELL_ETHEREAL_VISAGE, OBJECT_SELF, 16, FALSE)) return TRUE; - if(nLowest <= 2) - { - // This is the shadow dancer evade - if(AI_ActionUseSpellLikeFeat(FEAT_SHADOW_EVADE, SPELL_SHADOW_EVADE)) return TRUE; - - // This is the assassin ghostly visage. - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_SPELL_GHOSTLY_VISAGE, SPELLABILITY_AS_GHOSTLY_VISAGE)) return TRUE; - - // This is ghostly visage, dispite the spell constant name. G.Shadow conjuration - // * Cast as a sub-spell. - if(AI_ActionCastSpell(SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE, OBJECT_SELF, 15, FALSE, TRUE)) return TRUE; - - // Ghostly Visage is only 5/+1, but could work at the lower levels! Immunity to 1-0 spells too. - // Level 2 (Mage). - if(AI_ActionCastSpell(SPELL_GHOSTLY_VISAGE, OBJECT_SELF, 12, FALSE)) return TRUE; - } - } - } - return FALSE; -} -// Wrappers All Mantals (Greater, Normal, Lesser) (Spell Mantals) -// - nLowest - 9 = Greater, 7 = Normal. 5 = Lesser -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasMantalProtections) -int AI_SpellWrapperMantalProtections(int nLowest = 1) -{ - // Provides total spell immunity (for most spells, say, 99%) until runs out/dispeled. - if(!AI_GetAIHaveSpellsEffect(GlobalHasMantalProtections) && nLowest <= 9) - { - // Greater Spell mantal. Level 9 (Mage), for d12() + 10 spell levels protected. - if(AI_ActionCastSpell(SPELL_GREATER_SPELL_MANTLE, OBJECT_SELF, 19, FALSE)) return TRUE; - if(nLowest <= 7) - { - // Normal, level 7 spell (Mage). d6() + 8 spell levels protected. - if(AI_ActionCastSpell(SPELL_SPELL_MANTLE, OBJECT_SELF, 17, FALSE)) return TRUE; - if(nLowest <= 5) - { - // Lesser, level 5 spell (Mage). d4() + 6 spell levels protected. - if(AI_ActionCastSpell(SPELL_LESSER_SPELL_MANTLE, OBJECT_SELF, 15, FALSE)) return TRUE; - } - } - } - return FALSE; -} -// Wrappers All Globes (Greater, Shadow Conjuration, Minor) -// - nLowest - 6 = Greater, 4 = Shadow/Minor -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasGlobeProtections) -int AI_SpellWrapperGlobeProtections(int nLowest = 1) -{ - // Immunity to most spells of X or under. Good because level 4 spells have a large selection of AOE ones. - if(!AI_GetAIHaveSpellsEffect(GlobalHasGlobeProtections) && nLowest <= 6) - { - // Normal globe, level 6 spell (Mage). Protects vurses 4 or lower spells. - if(AI_ActionCastSpell(SPELL_GLOBE_OF_INVULNERABILITY, OBJECT_SELF, 16, FALSE)) return TRUE; - // Note! Ethereal Visage protects VS 0, 1, 2 levels spells. - if(nLowest <= 4) - { - // SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE. - // As Minor globe, except shadow version. Cast as sub-spell. - if(AI_ActionCastSpell(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, OBJECT_SELF, 15, FALSE, TRUE)) return TRUE; - - // Minor globe, level 4 spell (Mage). Protects vurses 3 or lower spells. - if(AI_ActionCastSpell(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, OBJECT_SELF, 14, FALSE)) return TRUE; - } - } - return FALSE; -} -// Wrappers All Shields - Elemental Shield, Wounding Whispers -// - nLowest - 4 = Elemental, 3 = Wounding. -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasElementalShieldSpell) -int AI_SpellWrapperShieldProtections(int nLowest = 1) -{ - // These help deflect damage :-D - if(!AI_GetAIHaveEffect(GlobalEffectDamageShield) && nLowest <= 4) - { - // Elemental Shield. Level 4 (Mage). Does some damage to melee attackers (Casterlvl + d6(), Fire). +50% cold/fire resistance. - if(AI_ActionCastSpell(SPELL_ELEMENTAL_SHIELD, OBJECT_SELF, 14, FALSE)) return TRUE; - if(nLowest <= 3) - { - // Acid Sheath. Level 3 (Mage) Does some damage to melee attackers (2 * CasterLvl + 1d6, Acid). - if(AI_ActionCastSpell(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF, 13, FALSE)) return TRUE; - - // Wounding Whispers. Level 3 (bard) Does some damage to melee attackers (Casterlvl + d6(), Sonic). - if(AI_ActionCastSpell(SPELL_WOUNDING_WHISPERS, OBJECT_SELF, 13, FALSE)) return TRUE; - - if(nLowest <= 2) - { - // Death Armor. Level 2 (Mage) Does some damage to melee attackers (Caster Level/2 (to +5) + 1d4, Magical) - if(AI_ActionCastSpell(SPELL_DEATH_ARMOR, OBJECT_SELF, 13, FALSE)) return TRUE; - } - } - } - return FALSE; -} -// Wrappers All Mind resistance spells - Mind blank, Lesser and Clarity. bioware likes 3's... -// - nLowest - 8 = Mind Blank, 5 = Lesser, 2 = Clarity -// - Checks AI_GetAIHaveSpellsEffect(GlobalHasMindResistanceProtections) -int AI_SpellWrapperMindResistanceProtections(int nLowest = 1) -{ - // immunties against mind - cool :-D (but not 100% useful). - // Might add more "if they cast a mind spell, we cast this to stop more" in sometime - if(!AI_GetAIHaveSpellsEffect(GlobalHasMindResistanceProtections) && nLowest <= 8) - { - // Mind Blank. Level 8 (Mage) Mind immunity (and clean up) - if(AI_ActionCastSpell(SPELL_MIND_BLANK, OBJECT_SELF, 18, FALSE)) return TRUE; - if(nLowest <= 5) - { - // Lesser Mind Blank. Level 5 (Mage) Mind immunity (and clean up) - if(AI_ActionCastSpell(SPELL_LESSER_MIND_BLANK, OBJECT_SELF, 15, FALSE)) return TRUE; - if(nLowest <= 2) - { - // Clarity. Level 2 (Bard/Innate) 3 (Cleric/Mage) Mind immunity (and clean up) - if(AI_ActionCastSpell(SPELL_CLARITY, OBJECT_SELF, 12, FALSE)) return TRUE; - } - } - } - return FALSE; -} - -// Wrappers All Consealment spells - Improved Invisiblity. Displacement. -// - nLowest - 4 = Improved Invisiblit, 3 = Displacement -// - Checks !AI_GetAIHaveEffect(GlobalEffectInvisible, oTarget) && !AI_GetAIHaveSpellsEffect(GlobalHasConsealmentSpells, oTarget) -int AI_SpellWrapperConsealmentEnhancements(object oTarget, int nLowest = 1) -{ - if(!AI_GetAIHaveEffect(GlobalEffectInvisible, oTarget) && - !GetHasSpellEffect(SPELL_DISPLACEMENT, oTarget)) - { - if(oTarget == OBJECT_SELF) - { - // Shadow dragon special consealment - if(AI_ActionCastSpell(AI_SPELLABILITY_SHADOWBLEND)) return TRUE; - } - if(nLowest <= 4) - { - if(oTarget == OBJECT_SELF) - { - // Improved Invis - assassin - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_INVISIBILITY_2, SPELLABILITY_AS_IMPROVED_INVISIBLITY)) return TRUE; - } - // Improved Invis. Level 4 (Bard, Mage). 50% consealment + invisibility. - if(AI_ActionCastSpell(SPELL_IMPROVED_INVISIBILITY, oTarget, 14, FALSE)) return TRUE; - - if(nLowest <= 3) - { - // Displacement. Level 3 (Mage). 50% consealment. - if(AI_ActionCastSpell(SPELL_DISPLACEMENT, oTarget, 13, FALSE)) return TRUE; - } - } - } - return FALSE; -} -// Shades darkness, assassin feat, normal spell. -int AI_SpellWrapperDarknessSpells(object oTarget) -{ - // Special Assassin Version - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_DARKNESS, SPELLABILITY_AS_DARKNESS, oTarget)) return TRUE; - // Shades one. Cast as sub-spell. - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_DARKNESS, oTarget, 14, TRUE, TRUE)) return TRUE; - // Darkness. Area of consealment. Level 2 (Cleric/Bard/Mage) Specail Assassin. - if(AI_ActionCastSpell(SPELL_DARKNESS, oTarget, 12, TRUE)) return TRUE; - - return FALSE; -} -// Invisibility spells + feats -int AI_SpellWrapperNormalInvisibilitySpells() -{ - // Special Harper Version - Normal invisibility. - if(AI_ActionUseSpellLikeFeat(FEAT_HARPER_INVISIBILITY, AI_SPELLABILITY_HARPER_INVISIBILITY)) return TRUE; - // Special Assassin Version - Normal invisibility. - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_INVISIBILITY_1, SPELLABILITY_AS_INVISIBILITY)) return TRUE; - // Cast invisiblity spells! - // Invisiblity Sphere. Level 3 (Bard, Mage). Invisibility till attacked for an area! - if(AI_ActionCastSpell(SPELL_INVISIBILITY_SPHERE, OBJECT_SELF, 13, FALSE)) return TRUE; - // Shad. conjuration. Cast as sub-spell. - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_INIVSIBILITY, OBJECT_SELF, 12, FALSE, TRUE)) return TRUE; - // Invisiblity. Level 2 (Bard, Mage). Invisibility till attacked. - if(AI_ActionCastSpell(SPELL_INVISIBILITY, OBJECT_SELF, 12, FALSE)) return TRUE; - - return FALSE; -} - -// This will loop seen allies in a cirtain distance, and get the first one without -// the spells effects of nSpell1 to nSpell4 (and do not have the spells). -// - Quite expensive loop. Only used if we have the spell (nSpellToUse1+) -// in the first place (no items!) and not the timer which stops it for a few rounds (on nSpellToUse1) -// - TRUE if it casts its any of nSpellToUseX's. -// * It has only a % chance to cast if GlobalWeAreBuffer is not TRUE. -int AI_ActionCastAllyBuffSpell(float fMaxRange, int nPercent, int nSpellToUse1, int nSpellToUse2 = AI_SPELL_INVALID, int nSpellToUse3 = AI_SPELL_INVALID, int nSpellToUse4 = AI_SPELL_INVALID, int nSpellOther1 = AI_SPELL_INVALID, int nSpellOther2 = AI_SPELL_INVALID) -{ - // Not in time stop - if(GlobalInTimeStop) return FALSE; - - // Check buff ally is valid - if(!GetIsObjectValid(GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN_BUFF + "1"))) return FALSE; - - // Check % (buffers add 150, so always pass this) - if(d100() > (nPercent + // Default % - (150 * GlobalWeAreBuffer) - // Always cast if buffer - (GlobalWeAreSorcerorBard * 50) + // Much less (50%) if sorceror/bard - (FloatToInt(GlobalRangeToMeleeTarget))// Add a little for range to melee target - )) return FALSE; - - // Check local timer for the top spell to cast against the ally. Only the - // top spell is timed. - if(GetLocalTimer(AI_TIMER_BUFF_ALLY_SPELL + IntToString(nSpellToUse1))) return FALSE; - - // Set local timer to not use it for a while - SetLocalTimer(AI_TIMER_BUFF_ALLY_SPELL + IntToString(nSpellToUse1), 18.0); - - // Check if we have the spell - if(!GetHasSpell(nSpellToUse1) && !GetHasSpell(nSpellToUse2) && - !GetHasSpell(nSpellToUse3) && !GetHasSpell(nSpellToUse4)) return FALSE; - - // - This lets real-hardcode buffers go to a longer range. - float fRangeToGoTo = fMaxRange + GlobalBuffRangeAddon; - // Loop nearest to futhest allies - int nCnt = 1; - object oAlly = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN_BUFF + IntToString(nCnt)); - // Loop Targets - // - nCnt is our breaker. We only check 10 nearest allies, and set to 20 if break. - while(GetIsObjectValid(oAlly) && nCnt <= 10 && GetDistanceToObject(oAlly) <= fRangeToGoTo) - { - // Check for thier effects - if((nSpellToUse1 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellToUse1, oAlly)) && - (nSpellToUse2 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellToUse2, oAlly)) && - (nSpellToUse3 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellToUse3, oAlly)) && - (nSpellToUse4 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellToUse4, oAlly)) && - (nSpellOther1 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellOther1, oAlly)) && - (nSpellOther2 == AI_SPELL_INVALID || !GetHasSpellEffect(nSpellOther2, oAlly)) && - !GetHasSpell(nSpellToUse1, oAlly) && !GetHasSpell(nSpellToUse2, oAlly) && - !GetHasSpell(nSpellToUse3, oAlly) && !GetHasSpell(nSpellToUse4, oAlly)) - { - // Break with this ally as target - nCnt = 20; - } - else - { - // Get Next ally - nCnt++; - oAlly = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN_BUFF + IntToString(nCnt)); - } - } - // If valid, cast at the target and return TRUE. - if(nCnt == 20) - { - // oAlly is our buff target - cast the best to worst on it! - if(nSpellToUse1 != AI_SPELL_INVALID) - if(AI_ActionCastSpell(nSpellToUse1, oAlly)) return TRUE; - if(nSpellToUse2 != AI_SPELL_INVALID) - if(AI_ActionCastSpell(nSpellToUse2, oAlly)) return TRUE; - if(nSpellToUse3 != AI_SPELL_INVALID) - if(AI_ActionCastSpell(nSpellToUse3, oAlly)) return TRUE; - if(nSpellToUse4 != AI_SPELL_INVALID) - if(AI_ActionCastSpell(nSpellToUse4, oAlly)) return TRUE; - } - // Return FALSE - no spell cast - return FALSE; -} - -// This will run through most avalible protections spells. -// - TRUE if we cast any. -// Used when invisible to protect before we break the invisibility. -// - We may cast many on allies too -int AI_ActionCastWhenInvisible() -{ - // We run through some spells. Primarily, protection then buffs. - // We don't target others else we'd break the invisiblity. - - // Haste's - if(AI_SpellWrapperHasteEnchantments()) return TRUE; - - // Stoneskin - protection from attackers. - if(AI_SpellWrapperPhisicalProtections()) return TRUE; - - // Mantals - if(AI_SpellWrapperMantalProtections()) return TRUE; - - // Elemental protections (fireball ETC) - if(AI_SpellWrapperElementalProtections()) return TRUE; - - // Visages - if(AI_SpellWrapperVisageProtections()) return TRUE; - - // Globes - if(AI_SpellWrapperGlobeProtections()) return TRUE; - - // Shields - if(AI_SpellWrapperShieldProtections()) return TRUE; - - // Mind resistances - if(AI_SpellWrapperMindResistanceProtections()) return TRUE; - - // Thats us done, what about allies? - // - Buffs for allies (Reference!) - // Stoneskin (+ Greater) - // Improved Invisibility, Displacement - // Haste, Mass Haste - // Energy Protections (Buffer, Protection From, Resist, Endure) - // Ultravision (special case: Nearest seen ally with Darkness and not this effect) - // Spell Resistance - // Death Ward (If we can see arcane spellcasters, as it only provides death immunity) - // Regenerate, Monstourous Regeneration - // Negative Energy Protection (If we see any clerics, druids, with harm, else only self) - - // Only if buffer: - // Mage armor, Barkskin - // Bless, Aid - // Bulls Strength, Cats Grace, Endurance - // Stone bones - On undead only. - - // Not cast: - // Weapon spells (Blackstaff ETC) - We wouldn't have many. - // Protection From Spells - AOE, and the AOE includes us anyway (so gets captured when we cast it) - // Mind blanks - Mind protection, not worth casting on allies, its more for removal. - // Normal invisilbilties - They would normally be broken right away. - // Natures Balance - Healing AOE only really, mostly enemy SR lowering in AOE. - // Prayer - Cast on self - // Freedom of movement - More removal if anyone needs it. Doesn't stop too much. - - // Much lower % as sorceror or bard. - - // Try stoneskins as a main one - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_GREATER_STONESKIN, SPELL_STONESKIN)) return TRUE; - - // Hastes! - if(AI_ActionCastAllyBuffSpell(8.0, 100, SPELL_HASTE, SPELL_MASS_HASTE)) return TRUE; - - // Consealment spells - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_IMPROVED_INVISIBILITY, SPELL_DISPLACEMENT)) return TRUE; - - // Elemental protections - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_ENERGY_BUFFER, SPELL_PROTECTION_FROM_ELEMENTS, SPELL_RESIST_ELEMENTS, SPELL_ENDURE_ELEMENTS)) return TRUE; - - // If we have the setting to buff allies, we carry on buffing with some - // other spells. - if(GlobalWeAreBuffer) - { - // Some AC protections - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_MAGE_ARMOR, SPELL_BARKSKIN)) return TRUE; - - // Bulls Strength, Cats Grace, Endurance - if(AI_ActionCastAllyBuffSpell(10.0, 100, SPELL_ENDURANCE, SPELL_CATS_GRACE, SPELL_ENDURANCE, -1, SPELL_GREATER_BULLS_STRENGTH, SPELL_GREATER_CATS_GRACE)) return TRUE; - - // Bless, Aid - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_AID, SPELL_BLESS)) return TRUE; - } - // Return FALSE - nothing cast - return FALSE; -} - -// Using the array ARRAY_ENEMY_RANGE, we return a % of seen/heard people who -// DO have any of the spells which see through the invisiblity spells. -// * nLimit - when we get to this number of people who have invisiblity, we stop and return 100% -// If ANY of the people are attacking us and have the effect, we return +30% for each. -int AI_GetSpellWhoCanSeeInvis(int nLimit) -{ - // Loop LOS range enemies. - int nCnt = 1; - int nHasSeeingTotal, nTotal, nAdditional; - // Loop start - object oEnemy = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oEnemy) && nAdditional < 100) - { - // Seen/heard check is already done - // Add one to total. - nTotal++; - // Make this the total of any seeing spells. - if(GetHasSpellEffect(SPELL_SEE_INVISIBILITY, oEnemy) || - GetHasSpellEffect(SPELL_TRUE_SEEING, oEnemy) || - // - We obviously can tell with creatures with true seeing hides. Only checking hides! - GetItemHasItemProperty(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oEnemy), ITEM_PROPERTY_TRUE_SEEING)) - { - nHasSeeingTotal++; - // Limit checking - if(nHasSeeingTotal >= nLimit) - { - nAdditional += 100; - } - // Special: If they are attacking us (with it) we add 30% - // to outcome, and add 1. - else if(GetAttackTarget(oEnemy) == OBJECT_SELF) - { - nAdditional += 30; - } - } - nCnt++; - oEnemy = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - if(nHasSeeingTotal > FALSE) - { - return AI_GetPercentOf(nHasSeeingTotal, nTotal) + nAdditional; - } - return FALSE; -} - -// Returns a dismissal target - a target with a master, and they -// are a Familiar, Animal companion or summon. -// - Nearest one in 10 M. Seen ones only. -object AI_GetDismissalTarget() -{ - object oMaster, oReturn; - int nCnt = 1; - string sCnt = IntToString(nCnt); - object oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - float fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - while(GetIsObjectValid(oLoopTarget) && fDistance <= 10.0) - { - // Check if they are a valid summon/familar/comapnion - oMaster = GetMaster(oLoopTarget); - //Is that master valid and is he an enemy - if(GetIsObjectValid(oMaster) && GetIsEnemy(oMaster)) - { - //Is the creature a summoned associate - if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) == oLoopTarget || - GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oLoopTarget || - GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oLoopTarget) - { - // Stop and break - oReturn = oLoopTarget; - break; - } - } - // Get next target - nCnt++; - sCnt = IntToString(nCnt); - fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - } - return oReturn; -} -/*:://///////////////////////////////////////////// -//:: Name ImportAllSpells -//:://///////////////////////////////////////////// - Taken from Jugulators improved spell AI (but now, hardly any of it remains!). - This is a very heavily changed version. If they can cast spells - or abilities, this will run though them and choose which - to cast. It will cast location spells at location, meaning heard - enemies may still be targeted. - - Incudes, nearer the bottom, if we are not a spellcaster, and - our BAB is high compared to thier AC, we will HTH attack - rather than carry on casting low level spells. - - Now: 1.3, it uses setups of what to do from OnSpawn to the best of its - abilities. It already has chosen an appropriate target (And decerned its - properties, immunities). - - Note: These are some of the non-verbal and non-stomatic componants: - - - Non-Verbal Spells - - Clarity, Lesser Dispel, and Ethereal Visage. - - - Non-Somatic Spells - - Darkness, Knock, Light, Mass Charm, Mordenkainen's Disjunction, Polymorph - Self, Power Word Kill, Power Word Stun, Wail of the Banshee, Word of Faith, - and War Cry. - - We ALWAYS use the nearest seen, if no one else :-P. - - Note: On Setup, like fighter choices, we normally perfere futher away targets - which we can see :-) as fighters go for nearer ones, but they must be the - best! - - This attempts to cast a spell, running down the lists. - The only variable is nLowest and iBAB level's, targets are globally set. - - nLowestSpellLevel - If it is set to more than 1, then all spells of that - level and lower are just ignored. Used for dragons. Default 0. - - nBABCheckHighestLevel - We check our BAB to see if attacking them would probably - be a better thing to do. Default 3, it adds 5DC for each level. - - nLastCheckedRange - 1 = Minimum, 4 = Longest. If it runs through once, and - with "ranged attacking", doesn't find any spells to cast at the "long" range, - then it will attempt to see if there are any spells for "meduim" etc. - - Range: Long 40, Medium: 20, Short: 10, Touch: 2.25 (Game meters). Personal = 0 - NOTE 1: If GlobalItemsOnly is set, we only check for item talents! - NOTE 2: It uses the SAME target, but for ranged attacking, we use a float range to check range :-) - - Notes on touch attacks: - [Quote] - Here's how the AC is added up for touch attacks: - - Armor bonus: no - Shield bonus: no - Deflection bonus: yes - Natural bonus: no - Dodge bonus: yes - Dexterity modifier: yes - Monk wisdom: yes -//:://///////////////////////////////////////////// -//:: Created By: Jugulator, Modified (very) Heavily: Jasperre -//::////////////////////////////////////////////*/ - -// This will attempt to cast a spell from all the spells we know. -// It calls AI_RunThroughSpells() to work. -// * nLowestSpellLevel - If it is set to more than 1, then all spells of that -// level and lower are just ignored. Used for dragons. Default 0. -// * nBABCheckHighestLevel - We check our BAB to see if attacking them would probably -// be a better thing to do. Default 3, it adds 5DC for each level. -// NOTE 1: If GlobalItemsOnly is set, we only check for item talents! -// NOTE 2: It uses the SAME target, but for ranged attacking, we use a float range to check range :-) -int AI_AttemptAllSpells(int nLowestSpellLevel = 0, int nBABCheckHighestLevel = 3) -{ - // Invalid time to cast spells? - // Checks for valid numbers, ETC. - if(AI_GetAIHaveEffect(GlobalEffectPolymorph) || - GetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER) || - // Do we have any spells to cast? -// (GlobalSilenceSoItems && !GobalOtherItemsValid && !GobalPotionsValid) || -// (!SpellAnySpellValid && !GobalOtherItemsValid && !GobalPotionsValid) || - !GetIsObjectValid(GlobalSpellTarget)) - { - // 31: "[DCR: All Spells] Error! No casting (No spells, items, target Etc)." - DebugActionSpeakByInt(31); - return FALSE; - } - // 11: "[DCR: All Spells] [Modifier|BaseDC|SRA] " + IntToString(iInput) - // Input: 100 * GlobalSpellAbilityModifier) + 10 * GlobalSpellBaseSaveDC + SRA - DebugActionSpeakByInt(32, OBJECT_INVALID, (100 * GlobalSpellAbilityModifier) + (10 * GlobalSpellBaseSaveDC) + (SRA)); - - // All the inputs (plus for SRA a few extra ones) for the spells function - // we calculate now. SRA is quite common, so useful not to do repetitive - // code. - int bRangeLongValid, bRangeMediumValid, bRangeShortValid, bRangeTouchValid, - bDoneMedium, bDoneShort, bDoneTouch, bSingleSpellsFirst, - bSingleSpellOverride, bMultiSpellOverride; - - // This forces the use of AOE spells over single target spells. - bMultiSpellOverride = GetSpawnInCondition(AI_FLAG_COMBAT_MANY_TARGETING, AI_COMBAT_MASTER); - // This forices the use single target spells before multiple target spells. - bSingleSpellOverride = GetSpawnInCondition(AI_FLAG_COMBAT_SINGLE_TARGETING, AI_COMBAT_MASTER); - - // if bSingleSpellsFirst == TRUE, we try our single spells before the - // AOE spells. If false, don't bother. Not set if not seen target. - // 1.4: More realistic checking. Test: - // * Must be 4 or less enemies seen to do single ones first - // * Have to have: - // - A lot of allies compared to enemies - // - Only one enemy seen - if(GlobalSeenSpell && GlobalTotalSeenHeardEnemies <= 4 && - (GlobalTotalSeenHeardEnemies - 2 <= (GlobalTotalAllies) || - GlobalTotalSeenHeardEnemies <= 1)) - { - bSingleSpellsFirst = TRUE; - } - // Else, it might set to TRUE because of the spawn setting for it. - else if(bSingleSpellOverride) - { - // Might be forced via. the setting, to use single target spells before - // multiple target spells. - bSingleSpellsFirst = TRUE; - } - - // Check which ranges are valid - // - Range: Long 40, Medium: 20, Short: 10, Touch: 2.25 (Game meters). Personal = 0 - // If spell ranged attacking is NOT on, we will always use all ranges. - if(!SRA) - { - bRangeLongValid = TRUE; - bRangeMediumValid = TRUE; - bRangeShortValid = TRUE; - bRangeTouchValid = TRUE; - } - // Ranges... - // If set to TRUE, we will cast spells that use that range. - // If set to FALSE, we will ignore spells that use that range. - // First run through! - else - { - // Long - // * Always (to start with) set this to TRUE - bRangeLongValid = TRUE; - // Note: if there was a bDoneLong, it'd always be TRUE - - // Check medium range - if(GlobalSpellTargetRange <= fMediumRange) - { - bRangeMediumValid = TRUE; - bDoneMedium = TRUE; - - // Check short range - if(GlobalSpellTargetRange <= fShortRange) - { - bRangeShortValid = TRUE; - bDoneShort = TRUE; - - // Check touch range - if(GlobalSpellTargetRange <= fTouchRange) - { - bRangeTouchValid = TRUE; - bDoneTouch = TRUE; - } - } - } - } - - // Start by casting them all normally - // * IE: bFirstRunThrough is TRUE, all ranges valid are as above. - int bResult = AI_RunThroughSpells(nLowestSpellLevel, nBABCheckHighestLevel, bSingleSpellsFirst, bSingleSpellOverride, bMultiSpellOverride, TRUE, bRangeLongValid, bRangeMediumValid, bRangeShortValid, bRangeTouchValid); - - // If bResult is FALSE, and SRA is ON, we might run it again with medium - // range now set to TRUE (unles it was already!) - if(bResult == FALSE && SRA == TRUE) - { - // Check if we have done all the ranges. - if(bDoneMedium && bDoneShort && bDoneTouch) - { - // Cannot do any more - return FALSE; - } - else - { - // We will now be able to flip medium range. - if(bDoneMedium == FALSE) - { - // Do a new loop. Took out the ones we have already done :-) - // 34: "[DCR: All Spells] Ranged Spells. Should use closer spells/move nearer" - DebugActionSpeakByInt(34); - bDoneMedium = TRUE; - bResult = AI_RunThroughSpells(nLowestSpellLevel, nBABCheckHighestLevel, bSingleSpellsFirst, bSingleSpellOverride, bMultiSpellOverride, FALSE, FALSE, TRUE); - } - } - } - // If bResult is FALSE, and SRA is ON, we might run it again with shout range. - if(bResult == FALSE && SRA == TRUE) - { - // Check if we have done all the ranges. - if(bDoneMedium && bDoneShort && bDoneTouch) - { - // Cannot do any more - return FALSE; - } - else - { - // We will now be able to flip short range. - if(bDoneShort == FALSE) - { - // Do a new loop. Took out the ones we have already done :-) - // 34: "[DCR: All Spells] Ranged Spells. Should use closer spells/move nearer" - DebugActionSpeakByInt(34); - bDoneShort = TRUE; - bResult = AI_RunThroughSpells(nLowestSpellLevel, nBABCheckHighestLevel, bSingleSpellsFirst, bSingleSpellOverride, bMultiSpellOverride, FALSE, FALSE, FALSE, TRUE); - } - } - } - // If bResult is FALSE, and SRA is ON, we might run it again with touch range. - if(bResult == FALSE && SRA == TRUE) - { - // Check if we have done all the ranges. - if(bDoneMedium && bDoneShort && bDoneTouch) - { - // Cannot do any more - return FALSE; - } - else - { - // We will now be able to flip short range. - if(bDoneTouch == FALSE) - { - // Do a new loop. Took out the ones we have already done :-) - // 34: "[DCR: All Spells] Ranged Spells. Should use closer spells/move nearer" - DebugActionSpeakByInt(34); - bDoneTouch = TRUE; - bResult = AI_RunThroughSpells(nLowestSpellLevel, nBABCheckHighestLevel, bSingleSpellsFirst, bSingleSpellOverride, bMultiSpellOverride, FALSE, FALSE, FALSE, FALSE, TRUE); - } - } - } - // Return bResult. - return bResult; -} - -// Called from AI_AttemptAllSpells, this will run through the spell lists, until -// it casts on, else it will return FALSE. -// * nLowestSpellLevel - If it is set to more than 1, then all spells of that -// level and lower are just ignored. Used for dragons. Default 0. -// * nBABCheckHighestLevel - We check our BAB to see if attacking them would probably -// be a better thing to do. Default 3, it adds 5DC for each level. -// * bFirstRunThrough - used for personal spells (cast on us) like the ranged checks, for SRA. -// * bRangeLongValid etc - used for ranged spell attacking. bFirstRunThrough is a personal version. -// See AI_AttemptAllSpells() for more info. -int AI_RunThroughSpells(int nLowestSpellLevel, int nBABCheckHighestLevel, int bSingleSpellsFirst, int bSingleSpellOverride, int bMultiSpellOverride, int bFirstRunThrough = TRUE, int bRangeLongValid = FALSE, int bRangeMediumValid = FALSE, int bRangeShortValid = FALSE, int bRangeTouchValid = FALSE) -{ - // Sets up AOE target object to get. - object oAOE, oRandomSpellNotUsedAOE, oPurge; - // (oRandomSpellNotUsedAOE is set when we radomise a spell, and the spell - // isn't cast, but could be!) - - // Declare integers - int nCnt, bBreak, /* Counter things */ - nPercentWhoSeeInvis, nNeedToBeBelow; - - // Saves. Stops them firing spells they would ALWAYs save against. - // GlobalSpellTargetWill, GobalSpellTargetFort, GlobalSpellTargetReflex. - - - // There is also the case of people immune to normal spells (such as - // Fireball) but not spells like Gaze of Death. - // - Set to the level of silence we cannot use, BTW. - // - Set to 10 if we have 90% or more spell failure. - // - Also includes any globes, ETC. - // - We use "if(GlobalNormalSpellsNoEffectLevel < 9)" for level 9 spells. - //GlobalNormalSpellsNoEffectLevel = 1-10. 10 being absolutely nothing. - // - EG: Set to 3, means 0, 1, 2, 3 have 0% chance of affecting them. - -/*::9999999999999999999999999999999999999999999999999999999999999999999999999999 -//:: Level 9 spells. -//::9999999999999999999999999999999999999999999999999999999999999999999999999999 - NOTE ABOUT HOW I DO SPELL LEVELS OF EACH SPELL! - Because there are spells for several classes, the same spell, such as Wall - of Fire, I take the MAGE (Sorceror/Wizard) class. This is because it will - then vary the sorcerors spells he casts. I then, if it is not a Mage spell, - generally take the lowest spell number (EG: Death Ward, level 4 cleric/bard, - 5 druid, and I'l take it as a level 4). This does not mean it will be cast - in the bracket for spell level X - especially if it is not a hostile spell. - - H = Hordes only (And I think includes SoU spells) - S = SoU only - - Protections are important, and are cast sometimes many levels above other - spells of thier level, like casting Stoneskin before Wail of the Banshee. - - Thoughts -level 9 spells are the powerhouses, or so they say. They are actually - not...good. Most are death save based, and so many higher-level PC's will - be immune with there being Death Ward handy/Shadow shield. Some good spells - however - energy drain is powerful and has maximum save DC, even if it is - necromantic. Storm of Vengance is a really powerful AOE persistant spell, - and the damaging spells are not half bad. Also, powerful summons at level 9! - - Epic: -H [Epic Mage Armor] - +5 of the 4 different AC types. Just +5 dodge is a great asset. -H [Hellball] - Long range AOE - 10d6 sonic, acid, fire and lightning damage to all in area. Reflex only halves. -H [Ruin] - 35d6 divine damage, fort save for half. -H [Mummy Dust] - Powerful summon that cannot be dnSpelled. 24 Hours. -H [Dragon Knight] - Powerful dragon summon that cannot be dnSpelled. 20 rounds. -H [Epic Warding] - Damage reduction 50/+20. Lasts 1 round per level. - - AOE: - [Wail Of the Banshee] - Save VS death (fort) or die. Doesn't affect caster. 10M Range. - [Wierd] - Save VS Will & Fort. Doesn't affect allies. 10M AOE. - [Meteor Swarm] - Non-friends in 10M are done with 20d6 damage. Reflex Save. - [Storm of Vengance] - Anyone in the AOE (10M where cast) gets reflex-electic, and alway-acid damage. - [Implosion] - +3 Save DC, VS death, medium AOE. Not affect self (but affects anyone else) - - [Modenkainens Disjunction] - Powerful Dispel. VERY powerful - acts like a breach as well! - - Single: - [Dominate Monster] - Save VS Will else dominated - anything! (3 turns +1 per caster level.) - [Energy Drain] - Save VS Fort or negative levels - 2d4. If it goes to 0 levels, kills. Also lots of negative stats! (Supernatural Effect) -S [Bigby's Crushing Hand] - (2d6 + 12 damage/round) - - Defender: - [Greater Spell Mantal] - Stops spells. d12 + 10 - [Time Stop] - 9 Seconds (Default amount anyway) that we stop everyone but ourselves. -S [Undeath's Eternal Foe] Stops negative damage, ability score draining, negative levels, immunity poisons, immunity diseases. - - Summon: - [Gate] - Balor. Short duration, powerful, (has spells) but need prot. From evil. - [Elemental Swarm] - Great! After one powerful one dies, another is summoned. Greater Elements - [Summon Creature 9] - Summons a random Elder Elemental. Normally 24HRS duration. - [Innate Summons] - Almost all innate ones are so easy to cast (no concentration) we cast them here. - - Summon Celestial (One Will'o'whisp) - - Summon Mephit (One Mephit) - - Summon Slaad (One red slaad) - - Summon Tanarri (One subbucus) -H - Summon Baatezu (One Erinyes) (Hordes) -H [Black Blade of Disaster] - A powerful greatsword fights. Please note: AI abuses the "concentration" rules for it! - - Other: - - These will be cast all the time :-) [Dismissal] is included - a special case - for any dismissal targets, of course. - - Same with [Haste]/[Mass Haste]. These are almost too good to miss! - -S [Greater Sanctuary (Etherealness)] is a VERY powerful spell - if we cast - this, we can normally cast defensive spells while invisible - cool :-) - - We cast quite a few invisible-based spells near the top of our list. - - [Time stop] is a special case - we cast it first if we have 2 or more, cast - haste, then we are able to cast it again and get the maximum, safe, usage - out of it. - -H [Crumble] - Constructs only. - - Also note that [Stoneskin] (and variants) are usually cast at an upmost prioritory, - as mages have bad armor, saves and HP :-) - - Creatures with very powerful enchantments to dispel are dispeled, if they have - level 5 defenses. - - Harm/Heal are also cast here, to knock out enemies early on (if in range, - of course) - - Do Prismatic AC bonus adding here -//::99999999999999999999999999999999999999999999999999999999999999999999999999*/ - - // No BAB check. - - // Not in time stop - if(bFirstRunThrough && !GlobalInTimeStop && GlobalIntelligence >= (6 - d4())) - { - // We do this once, mind you, when we start at nLastCheckedRange == 4. - // Get a nearby enemy summon - 10M range. - oAOE = AI_GetDismissalTarget(); - // Is it valid? - if(GetIsObjectValid(oAOE)) - { - // Banishment. Level 6 (Cleric/Innate) 7 (Mage). Destroys outsiders as well as all summons in area around caster (10M) - if(AI_ActionCastSpell(SPELL_BANISHMENT, OBJECT_SELF, 17, TRUE)) return TRUE; - - // Dismissal is short range anyway. Enemy must be within 5M to be targeted. - // Dismissal. Level 4 (Bard/Cleric/Innate) 5 (Mage). At a will save (VS DC + 6) destroy summons/familiars/companions in area. - if(AI_ActionCastSpell(SPELL_DISMISSAL, oAOE, 15, TRUE)) return TRUE; - } - } - - // Time Stop - Never casts again in a timestop - // This will cast it very first if we have 2 or more (Sorceror) - if(bFirstRunThrough && !GlobalInTimeStop && GlobalIntelligence >= 10 && - GetHasSpell(SPELL_TIME_STOP) >= 2) - { - // Time Stop. Level 9 (Mage). 9 Seconds (by default. Meant to be 1d4 + 1) of frozen time for caster. Meant to be a rare spell. - if(AI_ActionCastSpell(SPELL_TIME_STOP, OBJECT_SELF, 19, FALSE)) return TRUE; - } - - // Special case - Lots of phisical damage requires maximum protectoin. - // For this, we may even consider visage's to be worth something over stoneskin - // if we have no stoneskins :-D - // - We cast this if we have many melee attackers or total attackers. - // - To save time stop checking, we don't do this in time stop. - if(GlobalIntelligence >= 7 && !GlobalInTimeStop && bFirstRunThrough && - !AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) && - !AI_GetAIHaveSpellsEffect(GlobalHasVisageProtections) && - // Formula - IE They do 40 damage, we must be level 10 or less. :-) - // - As this is mainly for mages, we don't bother about how much HP left. - (GetAIInteger(AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT) >= GlobalOurHitDice * 4 || - // - Do we have anyone in 20M? - (GlobalRangeToNearestEnemy <= 20.0 && - // BAB check as well - GlobalAverageEnemyBAB >= GlobalOurHitDice / 2))) - { - // Stoneskins and so forth first, then visages. - - // We think that Stoneskin (which has /+5) is better then 15/+3 - if(AI_SpellWrapperPhisicalProtections(nLowestSpellLevel)) return TRUE; - - // Visage - lowest of Ethereal (6) however. Ghostly? Don't bother - if(nLowestSpellLevel <= 6) - { - if(AI_SpellWrapperVisageProtections(6)) return TRUE; - } - } - // END phisical protections override check - - // Haste - First. Good one, I suppose. Should check for close (non-hasted) - // allies, to choose between them. - if(bFirstRunThrough && !AI_GetAIHaveEffect(GlobalEffectHaste) && - !AI_CompareTimeStopStored(SPELL_HASTE, SPELL_MASS_HASTE)) - { - // I don't want to bother checking for allies for MASS_HASTE because - // mass haste is a good duration/harder to Dispel compared to haste - // anyway. - // - Should this be moved down? - if(AI_SpellWrapperHasteEnchantments(nLowestSpellLevel)) return TRUE; - } - - // Now the normal time stop. Power to the lords of time! (sorry, a bit over the top!) - // - Top prioritory. If you don't want it to cast it first, don't give it to them! - if(bFirstRunThrough && !GlobalInTimeStop) - { - // Time Stop. Level 9 (Mage). 9 Seconds (by default. Meant to be 1d4 + 1) of frozen time for caster. Meant to be a rare spell. - if(AI_ActionCastSpell(SPELL_TIME_STOP, OBJECT_SELF, 19, FALSE)) return TRUE; - } - - // Special case - if lots of damage has been done elemetally wise, we will - // cast elemental protections (if not cast already). - // - To save time stop checking, we don't do this in time stop. - // - Only done if 4 or more intelligence. - if(!AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections) && - !GlobalInTimeStop && bFirstRunThrough && GlobalIntelligence >= 4 && - // Formula - IE They do 40 damage, we must be level 10 or less. :-) - // - As this is mainly for mages, we don't bother about how much HP left. - (GetAIInteger(MAX_ELEMENTAL_DAMAGE) >= GlobalOurHitDice * 4 || - // OR last hit was major compared to total HP - GetAIInteger(LAST_ELEMENTAL_DAMAGE) >= GlobalOurMaxHP/4)) - { - if(AI_SpellWrapperElementalProtections(nLowestSpellLevel)) - { - // Reset and return, if we cast something! - DeleteAIInteger(MAX_ELEMENTAL_DAMAGE); - return TRUE; - } - } - // END special elemental override check - - // Epic mage armor after specials. Not the best place... - // +20 AC is good, normally. - if(bFirstRunThrough && !AI_GetAIHaveSpellsEffect(GlobalHasOtherACSpell)) - { - // Epic Mage Armor. (Mage only) +5 of the 4 different AC types. Just +5 dodge is a great asset. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_MAGE_ARMOUR, SPELL_EPIC_MAGE_ARMOR)) return TRUE; - } - - // Visibility Protections - going invisible! - // - We only do this not in time stop - // - We must be invisible - // - We must be of a decnt intelligence (5+) - // - We must make sure we don't already have all the protections listed - // - We MUST have not run through this once already. - if(!GlobalInTimeStop && GlobalIntelligence >= 5 && bFirstRunThrough) - { - // First, check if we already have any effects. - // - If we have GlobalEffectEthereal, then we cast all (non-see through) - if(AI_GetAIHaveEffect(GlobalEffectEthereal) || - // - If we have darkness, we'll protect ourselves. (Ultravision or not!) - // * We can ultra vision in the override special actions part of the AI. - AI_GetAIHaveEffect(GlobalEffectDarkness)) - { - // Do some protection spells. :-) - // - And on allies! - if(AI_ActionCastWhenInvisible()) return TRUE; - } - // - If we have GlobalEffectInvisible, then we check who can see us. - // * If we have the timer Do not hide, and we didn't hide last - // turn, then we don't do it. - else if(AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - if(!GetObjectSeen(OBJECT_SELF, GlobalMeleeTarget) || - GetLocalTimer(AI_TIMER_JUST_CAST_INVISIBILITY)) - { - // Do some protection spells. :-) - // - And on allies! - if(AI_ActionCastWhenInvisible()) return TRUE; - } - } - // Else, no invisibility, so we may well cast it >:-D - // - Only cast it if we are not a sorceror or bard, or we have not got - // cirtain protections (important ones!) - // - Cast if any class other then bard/sorceror because we get advantages - // to use other spells and attacks. - else if(!GlobalWeAreSorcerorBard || - !AI_GetAIHaveSpellsEffect(GlobalHasElementalProtections) || - !AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections) || - !AI_GetAIHaveSpellsEffect(GlobalHasMantalProtections) || - GlobalOurPercentHP >= 100) - { - // Is it a good time? (EG we want to flee, or want more protections :-) ). - // - Do we HAVE THE SPELLS?! - // - Are we overwhelmed? - // - Is the enemy a lot stronger? - // * Fleeing that uses this does it in the flee section (not in yet) - // * More protections for concentation is done in that section (not in yet) - - // 1. Greater Sanctuary (Etherealness). - // This is easily the best one there is! always works 100%%%! - // Etherealness. Total invisibility! Level 6 (Cleric) 8 (Mage) 7 (Innate). - if(AI_ActionCastSpell(SPELL_ETHEREALNESS, OBJECT_SELF, 17)) return TRUE; - // Monster ability - Actually called Etherealness. - if(AI_ActionCastSpell(AI_SPELLABILITY_ETHEREALNESS)) return TRUE; - - // 2. Darkness - // We cast this hopefully most of the time. We will cast it a lot if we have - // many melee attackers, else we'll cast it if we have ultravision/trueseeing - if(GlobalMeleeAttackers >= GlobalOurHitDice / 3 || - AI_GetAIHaveEffect(GlobalEffectUltravision) || - AI_GetAIHaveEffect(GlobalEffectTrueSeeing) || - GetHasSpell(SPELL_DARKVISION) || GetHasSpell(SPELL_TRUE_SEEING)) - { - // Darkness's - AI_SpellWrapperDarknessSpells(OBJECT_SELF); - } - // 3. Normal invisiblity. - // We need to make sure it won't be Dispeled by invis purge. - oPurge = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, - OBJECT_SELF, 1, - CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, - CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_INVISIBILITY_PURGE); - if(!GetIsObjectValid(oPurge) || GetDistanceToObject(oPurge) > 10.0) - { - // Also, we can't go invisible if any enemies who are attacking us, - // can see us. We also won't if over 50 (or whatever)% of the enemy have got - // seeing spells. - // What % though? MORE if we have limited, selected spell (non-sorceror/bard) - // LESS if we do have other spells to take its place. - nPercentWhoSeeInvis = AI_GetSpellWhoCanSeeInvis(4); - - // Here, we make sure it is less then 80% for mages, and less then - // 30% for sorcerors or bards. - nNeedToBeBelow = 80; - // Use global - if(GlobalWeAreSorcerorBard) nNeedToBeBelow = 30; - - if(nPercentWhoSeeInvis <= nNeedToBeBelow + d20()) - { - // If within d20 of the needed amount, we do cast improved - // invisibility. - // Improved Invis - assassin - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_INVISIBILITY_2, SPELLABILITY_AS_IMPROVED_INVISIBLITY)) - { - SetLocalTimer(AI_TIMER_JUST_CAST_INVISIBILITY, 12.0); - return TRUE; - } - // Improved Invis. Level 4 (Bard, Mage). 50% consealment + invisibility. - if(AI_ActionCastSpell(SPELL_IMPROVED_INVISIBILITY, OBJECT_SELF, 14, FALSE)) - { - SetLocalTimer(AI_TIMER_JUST_CAST_INVISIBILITY, 12.0); - return TRUE; - } - // Other invisibilities. - if(nPercentWhoSeeInvis <= nNeedToBeBelow) - { - // Invisibility - if(AI_SpellWrapperNormalInvisibilitySpells()) - { - SetLocalTimer(AI_TIMER_JUST_CAST_INVISIBILITY, 12.0); - return TRUE; - } - } - } - } - } - } - - // Massive summoning spells - // Normally, no...always, these are only owned by intelligent creatures, no - // need to random cast or anything. - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 12) - { - // Dragon Knight - Powerful dragon summon that cannot be dnSpelled. 20 rounds. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_DRAGON_KNIGHT, SPELL_EPIC_DRAGON_KNIGHT)) - { - // Set level to 12 - SetAIInteger(AI_LAST_SUMMONED_LEVEL, 12); - return TRUE; - } - } - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 11) - { - // Mummy Dust - Powerful summon that cannot be dnSpelled. 24 Hours. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_MUMMY_DUST, SPELL_EPIC_MUMMY_DUST)) - { - // Set level to 11 - SetAIInteger(AI_LAST_SUMMONED_LEVEL, 11); - return TRUE; - } - } - // This is POWERFUL! - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 10) - { - // Black Blade of Disaster. Level 9 (Mage) A powerful greatsword fights. Please note: AI abuses the "concentration" rules for it! - if(AI_ActionCastSummonSpell(SPELL_BLACK_BLADE_OF_DISASTER, 19, 10)) return TRUE; - } - - // If we are in time stop, or no enemy in 4 m, we will buff our appropriate stat. - // Level 2 spells. GlobalIntelligence >= 6 - // NOte: CHANGE TO RANDOM ROLL, MORE CHANCE AT INT 10 - // Put just above first hostile spells. - // - Always cast if we have stoneskin effects. - if((GlobalInTimeStop || GlobalRangeToNearestEnemy > 4.0 || - AI_GetAIHaveSpellsEffect(GlobalHasStoneSkinProtections)) && - !GlobalIntelligence >= 6 && bFirstRunThrough && - !AI_CompareTimeStopStored(SPELL_FOXS_CUNNING, SPELL_OWLS_WISDOM, - SPELL_EAGLE_SPLEDOR)) - { - if(GlobalOurChosenClass == CLASS_TYPE_WIZARD) - { - if(!AI_GetAIHaveSpellsEffect(GlobalHasFoxesCunningSpell) && - !AI_CompareTimeStopStored(SPELL_FOXS_CUNNING, SPELL_GREATER_FOXS_CUNNING)) - { - // Greater first. This provides +2d4 + 1. - // foxes cunning :-) - No items, innate. - if(AI_ActionCastSpell(SPELL_GREATER_FOXS_CUNNING)) return TRUE; - // Lesser one - but we have items for it. - if(AI_ActionCastSpell(SPELL_FOXS_CUNNING, OBJECT_SELF, 12)) return TRUE; - } - } - else if(GlobalOurChosenClass == CLASS_TYPE_DRUID || GlobalOurChosenClass == CLASS_TYPE_CLERIC) - { - if(!AI_GetAIHaveSpellsEffect(GlobalHasOwlsWisdomSpell) && - !AI_CompareTimeStopStored(AI_SPELL_OWLS_INSIGHT, SPELL_GREATER_OWLS_WISDOM, SPELL_OWLS_WISDOM)) - { - // Owls insight is cool - 2x caster level in wisdom = +plenty of DC. - // Owls Insight. Level 5 (Druid). - if(AI_ActionCastSpell(AI_SPELL_OWLS_INSIGHT, OBJECT_SELF, 15)) return TRUE; - // Greater first. This provides +2d4 + 1. - // owls wisdom :-) - if(AI_ActionCastSpell(SPELL_GREATER_OWLS_WISDOM)) return TRUE; - // Lesser one - but we have items for it. - if(AI_ActionCastSpell(SPELL_OWLS_WISDOM, OBJECT_SELF, 12)) return TRUE; - } - } - else // Monsters probably benifit from this as well. - { - if(!AI_GetAIHaveSpellsEffect(GlobalHasEaglesSpledorSpell) && - !AI_CompareTimeStopStored(SPELL_GREATER_EAGLE_SPLENDOR, SPELL_EAGLE_SPLEDOR)) - { - // Greater first. This provides +2d4 + 1. - // eagles splendor :-) - if(AI_ActionCastSpell(SPELL_GREATER_EAGLE_SPLENDOR)) return TRUE; - // Lesser one - but we have items for it. - if(AI_ActionCastSpell(SPELL_EAGLE_SPLEDOR, OBJECT_SELF, 12)) return TRUE; - } - } - } - - // Special behavnOur: Constructs... - // - These are bastards, and have either total immunity to spells or massive - // SR. - // - GlobalNormalSpellNoEffectLevel will already be set. - if(bFirstRunThrough && GlobalIntelligence >= 5 && - GlobalSpellTargetRace == CLASS_TYPE_CONSTRUCT) - { - // These spells go through any ristances (I mean, "Spell Immunity: Level 9 or lower") - - // Ruin - (Epic) - 35d6 divine damage, fort save for half. - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_RUIN, SPELL_EPIC_RUIN, GlobalSpellTarget)) return TRUE; - - // Crumble. Level 6 (Druid) - Up to 15d6 damage to a construct. - if(AI_ActionCastSpell(SPELL_CRUMBLE, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - - // Cast prismatic AC bonus spell - defective force - if(!GetHasSpellEffect(AI_SPELLABILITY_PRISMATIC_DEFLECTING_FORCE)) - { - // Deflecting Force - adds charisma bonus to defeltection AC. - if(AI_ActionCastSpell(AI_SPELLABILITY_PRISMATIC_DEFLECTING_FORCE)) return TRUE; - } - - // Try a finger/destruction spell, if their fortitude save is really, really low. - // Will not use these 2 twice in time stop, as they *should* die instantly - if(GlobalNormalSpellsNoEffectLevel < 7 && bFirstRunThrough && - GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER) && - GlobalSeenSpell && bRangeShortValid && - !AI_CompareTimeStopStored(SPELL_DESTRUCTION, SPELL_FINGER_OF_DEATH)) - { - // Check low saves, IE always fails, no immunities and no mantals. - if((GlobalSpellTargetFort + 20) <= (GlobalSpellBaseSaveDC + 7) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - !AI_GetSpellTargetImmunity(GlobalImmunityMantalProtection)) - { - // Note: No items, because it will be a much lower save. - - // Destruction, level 7 (Cleric). Fort (Death) for Death if fail, or 10d6 damage if pass. - if(AI_ActionCastSpell(SPELL_DESTRUCTION, GlobalSpellTarget, 17)) return TRUE; - // Finger of Death. Leve 7 (Mage). Fort (Death) for death if fail, or d6(3) + nCasterLvl damage if pass. - if(AI_ActionCastSpell(SPELL_FINGER_OF_DEATH, GlobalSpellTarget, 17)) return TRUE; - } - } - - // Now will cast mantal if not got one and nearest enemy is a spellcaster... - if(GlobalMeleeAttackers <= 1 /*We won't cast it with melee attackers - cast phisicals first*/ && - !GlobalInTimeStop && GlobalIntelligence >= 7 && bFirstRunThrough && - !AI_GetAIHaveSpellsEffect(GlobalHasMantalProtections) && - /* Check for mage classes...spell target only */ - (GetLevelByClass(CLASS_TYPE_WIZARD, GlobalSpellTarget) >= GlobalSpellTargetHitDice/3) && - (GetLevelByClass(CLASS_TYPE_SORCERER, GlobalSpellTarget) >= GlobalSpellTargetHitDice/3)) - { - // Cast mantals, or spell resistance...or Protection from spells. - if(AI_SpellWrapperMantalProtections()) return TRUE; - - // Protection from spells. Level 7 (Mage), for +8 on all saves (Area effect too!) - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_SPELLS, OBJECT_SELF, 17, FALSE)) return TRUE; - - // Spell resistance. Level 5 (Cleric/Druid) 12 + Caster level (no limit) in spell resistance. - if(AI_ActionCastSpell(SPELL_SPELL_RESISTANCE, OBJECT_SELF, 15, FALSE)) return TRUE; - } - - if(bFirstRunThrough) - { - // Haste for allies - // - 60% chance of casting. More below somewhere (near stoneskin - if(AI_ActionCastAllyBuffSpell(6.0, 60, SPELL_MASS_HASTE, SPELL_HASTE)) return TRUE; - // Ultravision for allies - // - 90% chance of casting. - // - Only cast if a valid enemy in darkness is near - if(GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_DARKVISION, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD))) - { - // Darkvision (Ultravision) but not trueseeing, is cast. - if(AI_ActionCastAllyBuffSpell(8.0, 90, SPELL_DARKVISION, SPELL_TRUE_SEEING)) return TRUE; - } - } - // Epic killing spells. Hellball is very important to fire off! - // - We fire this off at the futhest target in 40M - - // Futhest one away. - if(bFirstRunThrough && GlobalSeenSpell) - { - // Hellball. (Epic) Long range AOE - 10d6 sonic, acid, fire and lightning damage to all in area. Reflex only halves. - // We just use spell target. Tough luck, we probably will be in the AOE - // whatever target we want! - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_HELLBALL, SPELL_EPIC_HELLBALL, GlobalSpellTarget)) return TRUE; - - // Ruin - a lot of damage, no SR, and only a half save thing for damage - if(AI_ActionUseSpellLikeFeat(FEAT_EPIC_SPELL_RUIN, SPELL_EPIC_RUIN, GlobalSpellTarget)) return TRUE; - } - - // These 3 will not be wasted on mantals. - if(bFirstRunThrough && GlobalNormalSpellsNoEffectLevel < 9 &&// PW kill is level 9 - !AI_GetSpellTargetImmunity(GlobalImmunityMantalProtection) && - !AI_CompareTimeStopStored(SPELL_CLOUDKILL, SPELL_POWER_WORD_KILL, SPELL_CIRCLE_OF_DEATH)) - { - // INSTANT DEATH SPELLS...if conditions are met. - // - These will instantly kill a target. It does cheat to do it. Only - // does this if set (Not AI intelligence related) - // Most useful for high-levels not getting killed by much lower levels - // (EG: Lich getting defeated by a enemy with only knockdown or something) - if(GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER)) - { - // Cloudkill here - if average HD is < 7 - // Random is < 7, always if under 4 - // Damage, slow, long range. Also, AOE :-) - if(bRangeLongValid && (GlobalAverageEnemyHD < 4) || - ((GlobalAverageEnemyHD < 7) && (d10() < 4)) && - GlobalNormalSpellsNoEffectLevel < 5) - { - // Cloud Kill. Level 5 (Mage). Kills if under level 7, else acid damage. - if(AI_ActionCastSpell(SPELL_CLOUDKILL, GlobalSpellTarget, 15, TRUE)) return TRUE; - } - // Power Word: Kill - // If improved, will check HP, else just casts it. - if(bRangeShortValid && GlobalSpellTargetCurrentHitPoints < 100) - { - // Power Word Kill. Level 9 (Mage). If target has less then 100HP, dies. - if(AI_ActionCastSpell(SPELL_POWER_WORD_KILL, GlobalSpellTarget, 19, TRUE)) return TRUE; - } - } - // Circle of Death - // CONDITION: Average enemy party hd less than 10 - // This spell only effects level 1-9 people. Good cleaner for lower monsters! - // Meduim ranged spell. - if(bRangeMediumValid && GlobalAverageEnemyHD <= 9 && - GlobalNormalSpellsNoEffectLevel < 6) - { - // Circle of death. Level 6 (Mage). Medium ranged, Large AOE, kills 10HD or less people (to d4(casterlevel)). - if(AI_ActionCastSpell(SPELL_CIRCLE_OF_DEATH, GlobalSpellTarget, 16, TRUE)) return TRUE; - } - } - - if(bFirstRunThrough) - { - // Physical Damage Protections (Self) - // Stoneskins, (Greater, normal) + Premonition provide instant damage reduction. - if(AI_SpellWrapperPhisicalProtections(nLowestSpellLevel)) return TRUE; - } - - - // Do not check spell resistance (GlobalNormalSpellsNoEffectLevel) here. - // We only use pulses 80% of the time. - if(bRangeTouchValid && !GlobalInTimeStop && - GlobalSpellTargetRange < fTouchRange && d10() <= 8) - { -/* These are the pulses. Not much I can be bothered to check for. All good stuff! - 281 | Pulse_Drown - None Constructs, Undeads, Elementals DIE if fail a fort check, DC: 20. - 282 | Pulse_Spores - Soldier Shakes (Disease) is applied to those in the area. - 283 | Pulse_Whirlwind - Large. Reflex DC 14 check, or Knockdown (2 rounds) and d3(HD) Damage. - 284 | Pulse_Fire - Huge. d6(HD) in fire damage. Reflex Save, DC: 10 + HD - 285 | Pulse_Lightning - Huge. d6(HD) in electrical damage. Reflex Save, DC: 10 + HD - 286 | Pulse_Cold - Huge. d6(HD) in cold damage. Reflex Save, DC: 10 + HD - 287 | Pulse_Negative - Large. Heals (Undead) allies. Harms all non-undead. Damage/Heal: d4(HD). Reflex Save, DC: 10 + HD. - 288 | Pulse_Holy - Large. Heals (Non-undead) allies. Harms all undead. Damage/Heal: d4(HD). Reflex Save, DC: 10 + HD. - 289 | Pulse_Death - Large. Death if fail Fort Save, DC: 10 + HD - 290 | Pulse_Level_Drain - 1 Negative Level, if fail Fort Save, DC: 10 + HD. - 291 | Pulse_Ability_Drain_Intelligence - Large. -(HD/5) INT, if fail fort save VS: 10 + HD. - 292 | Pulse_Ability_Drain_Charisma - Large. -(HD/5) CHA, if fail fort save VS: 10 + HD. - 293 | Pulse_Ability_Drain_Constitution - Large. -(HD/5) CON, if fail fort save VS: 10 + HD. - 294 | Pulse_Ability_Drain_Dexterity - Large. -(HD/5) DEX, if fail fort save VS: 10 + HD. - 295 | Pulse_Ability_Drain_Strength - Large. -(HD/5) STR, if fail fort save VS: 10 + HD. - 296 | Pulse_Ability_Drain_Wisdom - Large. -(HD/5) WIS, if fail fort save VS: 10 + HD. - 297 | Pulse_Poison - Varying Poison instantly applied. Check nw_"1"_pulspois.nss, and poison.2da files. - 298 | Pulse_Disease - Varying Save. See diseases.2da, and it is based on the - race of the caster, below are the diseases applied: - Vermin = Vermin Madness. Undead = Filth Fever. Outsider = Demon Fever. - Magical Beast = Soldier Shakes. Aberration = Blinding Sickness. - ANYTHING ELSE = Mindfire. */ - for(nCnt = SPELLABILITY_PULSE_DROWN/*281*/; nCnt <= SPELLABILITY_PULSE_DISEASE/*289*/; nCnt++) - { - // All innate, so no matter about talents really. - if(AI_ActionCastSpell(nCnt)) return TRUE; - } - } - - // Then harm/heal. (Needs 20 HP, and be challenging to us). - if((GlobalAverageEnemyHD >= (GlobalOurHitDice - 5)) && - GlobalSpellTargetCurrentHitPoints > 20 && bRangeTouchValid && - !AI_CompareTimeStopStored(SPELL_HARM, SPELL_MASS_HEAL, SPELL_HEAL) && - GlobalNormalSpellsNoEffectLevel < 8)// Mass heal = 8. - { - if(GlobalSeenSpell && GlobalSpellTargetRace != RACIAL_TYPE_UNDEAD && - GlobalSpellTargetRace != RACIAL_TYPE_CONSTRUCT && - GlobalSpellTargetRace != RACIAL_TYPE_INVALID) - { - // If we are undead, we make sure we leave at least 1 for our own healing. - if(GlobalNormalSpellsNoEffectLevel < 6 && - (MyPRCGetRacialType(OBJECT_SELF) != RACIAL_TYPE_UNDEAD || - GetHasSpell(SPELL_HARM) >= 2)) - { - // Harm - // CONDITION: 6+ hit dice and NOT undead! :) Also checks HP - // Harm Level 6 (Cleric) 7 (Druid) Makes the target go down to 1d4HP (or heals undead as heal) - if(AI_ActionCastSpell(SPELL_HARM, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - } - // (Mass) Heal (used as Harm for undead) - // CONDITION: Undead at 4+ hd. Never casts twice in time stop, and not over 20 HP. - else if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD && - GlobalIntelligence >= 7) - { - // Really, talent 4, heal area effect, no items are set in this though. - // Mass Heal. Level 8 (Cleric) 9 (Druid) mass "heal" damage/healing. - if(AI_ActionCastSpell(SPELL_MASS_HEAL, GlobalSpellTarget, 18, TRUE)) return TRUE; - - // Never use last 2 heals for harming. Level 6 (Cleric) 7 (Druid) - // - 1.3, changed to 3+ only, because, basically, healing self will - // probably be better. Undead and constructs also keep it, it must - // be for healing allies. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 6 && - GetHasSpell(SPELL_HEAL) >= 3) - { - // Heal. Level 6 (Cleric) 7 (Druid). For undead: As harm, else full healing. - if(AI_ActionCastSpell(SPELL_HEAL, GlobalSpellTarget, 16)) return TRUE; - } - } - } - - // Power Word: Stun. Special "knock out them" spell. - // Is not immune to mind spell (I think this is a valid check) and not already stunned. - // Really, if under < 151 HP to be affected - // Wierdly, this is considered a "Area effect" spell. Nope - jsut a VERY nice normal one. (I like it!) - // - We can cast this later. Here, we only cast if low amount of enemies :-D - if(GlobalSpellTargetCurrentHitPoints <= 150 && - GlobalNormalSpellsNoEffectLevel < 7 && - GlobalTotalSeenHeardEnemies < 3 && GlobalAverageEnemyHD > 10 && - GlobalSeenSpell && bRangeTouchValid && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_CompareTimeStopStored(SPELL_POWER_WORD_STUN)) - { - // Power Word Stun. Level 7 (Wizard). Stun duration based on HP. - if(AI_ActionCastSpell(SPELL_POWER_WORD_STUN, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - - // Elemental shield here, if over 0 melee attackers (and 30% chace) or - // over 1-4 attackers (level based). Doesn't double cast, and not more then 1 at once. - if(bFirstRunThrough && - // - Checks if we have the effects or not in a second - ((GlobalMeleeAttackers > (GlobalOurHitDice / 4) || - (GlobalMeleeAttackers > 0 && d10() > 6))) && - !AI_CompareTimeStopStored(SPELL_ELEMENTAL_SHIELD, SPELL_WOUNDING_WHISPERS, - SPELL_DEATH_ARMOR, SPELL_MESTILS_ACID_SHEATH)) - { - if(AI_SpellWrapperShieldProtections(nLowestSpellLevel)) return TRUE; - } - - // Dispel Good spells on the enemy. - // - Dispel Level 5 here. - // Basically, level 5 spells are mantals and spell-stoppers, or an alful - // lot of lower level spells. - if(AI_ActionAttemptDispel(5, bRangeMediumValid)) return TRUE; - - // Consealment Protections - // We do displacement then blindness/deafness. We only attempt blindness/deafness - // if we are not a sorceror/bard mind you. - if(bFirstRunThrough && !GlobalInTimeStop && // No Consealment in time stop. - GlobalSeenSpell && - !AI_GetAIHaveEffect(GlobalEffectInvisible) && - !AI_GetAIHaveSpellsEffect(GlobalHasConsealmentSpells)) - { - // Imp. Invis and displacement... - if(AI_SpellWrapperConsealmentEnhancements(OBJECT_SELF, nLowestSpellLevel)) return TRUE; - - // Cast darkness on any enemy in range, if we have ultravision (or its - // effects) - // Need range check, with SRA, of course - if(bRangeLongValid && (AI_GetAIHaveEffect(GlobalEffectUltravision) || - AI_GetAIHaveEffect(GlobalEffectTrueSeeing) || - GetHasSpell(SPELL_DARKVISION) || GetHasSpell(SPELL_TRUE_SEEING))) - { - // Cast at nearest without darkness! - oAOE = GetNearestCreature(CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_DARKVISION, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - if(GetIsObjectValid(oAOE) && !GetHasSpellEffect(SPELL_TRUE_SEEING, oAOE) - && !GetHasSpellEffect(SPELL_DARKVISION, oAOE)) - { - // Darkness - if(AI_SpellWrapperDarknessSpells(oAOE)) return TRUE; - } - } - - // Blindness/deafness. No casting in time stop is simpler. - if(bRangeMediumValid && GlobalNormalSpellsNoEffectLevel < 8 && - !AI_GetSpellTargetImmunity(GlobalImmunityBlindDeaf) && - !GlobalWeAreSorcerorBard && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 8)) - { - // Mass Blindness and Deafness. Level 8 (Mage) AOE fort save, enemies only, who save or are blinded and deafened. - if(AI_ActionCastSpell(SPELL_MASS_BLINDNESS_AND_DEAFNESS, GlobalSpellTarget, 18, TRUE)) return TRUE; - } - } - - // Ally spells. A great variety that we cast above. - if(bFirstRunThrough) - { - // Haste again - 90% chance - if(AI_ActionCastAllyBuffSpell(6.0, 90, SPELL_MASS_HASTE, SPELL_HASTE)) return TRUE; - // Cast phisical stoneskins on allies - 80% chance, as it is quite good. - if(AI_ActionCastAllyBuffSpell(6.0, 80, SPELL_GREATER_STONESKIN, SPELL_STONESKIN)) return TRUE; - // Consealment spells - if(AI_ActionCastAllyBuffSpell(6.0, 60, SPELL_IMPROVED_INVISIBILITY, SPELL_DISPLACEMENT)) return TRUE; - } - - //Gate - //CONDITION: Protection from Evil active on self - // Balors rock, literally! If not, I kill dem all!! >:-D - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 10 && - AI_GetAIHaveSpellsEffect(GlobalHasProtectionEvilSpell)) - { - // Gate. Level 9 (Mage/Innate). Summons a balor, who would normally attack caster if not protected from evil, else powerful summon - if(AI_ActionCastSummonSpell(SPELL_GATE, 19, 10)) return TRUE; - } - - //Protection from Evil / Magic Circle Against Evil - // ... in preparation for Gate! - if(bFirstRunThrough && GetHasSpell(SPELL_GATE) && - !AI_GetAIHaveSpellsEffect(GlobalHasProtectionEvilSpell)) - { - // Magic Circle against Alignment. Level 3 (Mage/Cleric/Bard/Paladin/Innate). +2 AC, mind spell immunity VS them. - if(AI_ActionCastSpell(SPELL_MAGIC_CIRCLE_AGAINST_EVIL, OBJECT_SELF, 13, FALSE, TRUE)) return TRUE; - // Protection From Evil. Level 1(Mage/Cleric/Bard/Paladin/Innate). +4 AC, mind spell immunity VS them. - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_EVIL, OBJECT_SELF, 11, FALSE, TRUE)) return TRUE; - } - // None for allies. Won't bother (unless it is a problem!). - // - If adding, we will get the nearest without the spells effects. - - // GlobalCanSummonSimilarLevel can be 1-12. (10 is elemental swarm, balor) (11, 12 epic) - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 9) - { - // Elemental swarm. Level 9 (Druid) Never replaced until no summon left - summons consecutive 4 huge elementals - if(AI_ActionCastSummonSpell(SPELL_ELEMENTAL_SWARM, 19, 10)) return TRUE; - // Summon an eldar elemental. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_IX, 19, 9)) return TRUE; - // No-concentration summoned creatures. - if(AI_ActionCastSummonSpell(AI_SPELLABILITY_SUMMON_BAATEZU, FALSE, 9)) return TRUE; - if(AI_ActionCastSummonSpell(SPELLABILITY_SUMMON_TANARRI, FALSE, 9)) return TRUE; - if(AI_ActionCastSummonSpell(SPELLABILITY_SUMMON_SLAAD, FALSE, 9)) return TRUE; - if(AI_ActionCastSummonSpell(SPELLABILITY_SUMMON_CELESTIAL, FALSE, 9)) return TRUE; - if(AI_ActionCastSummonSpell(SPELLABILITY_SUMMON_MEPHIT, FALSE, 9)) return TRUE; - if(AI_ActionCastSummonSpell(SPELLABILITY_NEGATIVE_PLANE_AVATAR, FALSE, 9)) return TRUE; - } - - // Dominate spells - // - Dominate monster is level 9. Others are worth casting if valid. - // Needs to not be immune, and be of right race for DOM PERSON - // No time stop, and a valid will save to even attempt. - if(!GlobalInTimeStop && GlobalSeenSpell && bRangeMediumValid && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - (GlobalOurHitDice - GlobalAverageEnemyHD) <= 8) - { - // Will save VS mind spells. - if(GlobalNormalSpellsNoEffectLevel < 9 && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 9)) - { - // Dominate Monster. Level 9 (Mage) Dominates (VS. Mind will save) ANYTHING! - if(AI_ActionCastSpell(SPELL_DOMINATE_MONSTER, GlobalSpellTarget, 19, FALSE)) return TRUE; - - if(GlobalNormalSpellsNoEffectLevel < 5 && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 5)) - { - // Dominate person - if(!GetIsPlayableRacialType(GlobalSpellTarget)) - { - // Dominate Person. Level 5 (Mage). Only affects PC races. Dominate on failed will. - if(AI_ActionCastSpell(SPELL_DOMINATE_PERSON, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Mass charm. sorcerors/bards have better things (20% casting chance) - if(!GlobalWeAreSorcerorBard || d10() <= 2) - { - // For mass charm, we don't bother if they don't have a decent chance to fail (ues as level 5 spell for save DC) - // Mass Charm. Level 8 (Mage) 1 Round/2caster levels of charm. Affects PC races only + humanoids. - if(AI_ActionCastSpell(SPELL_MASS_CHARM, GlobalSpellTarget, 18, TRUE)) return TRUE; - } - } - } - } - - // Protection from Spells - // - CONDITION: Enemies less than 5 levels below me (powerful enemies) - // - CONDITION 2: At least 1 ally - // - We cast this lower down if we don't cast it here. - if(bFirstRunThrough && - (((GlobalOurHitDice - GlobalAverageEnemyHD) <= 5 && - GlobalValidSeenAlly && GlobalRangeToAlly < 5.0) || - ((GlobalOurHitDice - GlobalAverageEnemyHD) <= 10))) - { - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_SPELLS, OBJECT_SELF, 17, FALSE)) return TRUE; - } - - //Mantle Protections - //CONDITION: Enemies less than 5 levels below me (powerful enemies) - // Will chance casting these anyway, if no melee attackers, and the enemy has a valid talent. - // Yes, talents include items...ahh well. - if(bFirstRunThrough && ((GlobalOurHitDice - GlobalAverageEnemyHD) <= 5)) - { - if(AI_SpellWrapperMantalProtections(nLowestSpellLevel)) return TRUE; - } - - // All these are short-ranged death! - // - What do we want to cast? Eh? Well, we might as well randomly choose - // one of the level 9 main hostile spells. This includes single target spells, - // BUT we may use sigle target spells first if not many enemies. - - // - Energy Drain (powerful, lowers statistics) - // - Bigby's Crushing Hand (2d6 + 12 damage/round) - - // - Storm of vengance is a massive electrical/acid storm. Cast, we may move out later. - // - Implosion has a +3 fort Save DC (great!) (only medium radius) - // - Wail of the banshee has a collosal area and 1 save. - // - Wierd doesn't affect allies, 2 saves, collosal area. - // - Meteor Storm is like a huge fireball based on the caster, 20d6 damage. - - // Single target spells first check - if(bSingleSpellsFirst && GlobalNormalSpellsNoEffectLevel < 9) - { - // Crushing hand is indefinatly better, but depends...I think energy drain - // has its merits of being permament! :-D - -// Explanation on bigby's spells - hitting, grappling. -// HIT: Beat GetAC(oTarget) with Primary Stat + Caster Level + d20 + 9-11 (7, 8, 9 level spells) -// GRAPPLE: Beat BAB + Size Mod of opposing. d20 + nCasterModifier + Caster Level + 14-16. -// Basically, we won't check this, as the caster level + the 9-11 + primary stat can beat AC. -// Ok, I can't be bothered to check it :-P - - // 70% chance of Crushing Hand. - // We try and not cast it twice on the same target (for a starter, wasting spells) - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND, GlobalSpellTarget)) - { - // Bigby's Crushing Hand. Level 9 (Mage). 2d6 + 12 damage/round. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_CRUSHING_HAND, 60, GlobalSpellTarget, 19, FALSE)) return TRUE; - } - - if(bRangeShortValid && GlobalSpellTargetRace != RACIAL_TYPE_UNDEAD && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 9)) - { - // 40% chance of energy drain, as we think single target spells are better. - // Energy Drain. Level 9 (Mage). 2d4 negative levels! -BAB, Saves, Stats! :-) - if(AI_ActionCastSpellRandom(SPELL_ENERGY_DRAIN, 40, GlobalSpellTarget, 19, FALSE)) return TRUE; - } - - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - // AOE targets. Most...but not all...are short-range spells. - if(bRangeShortValid) // No GlobalNormalSpellsNoEffectLevel for this. AOE spells may affect someone who is not immune! - { - // Storm - a very good AOE spell. May as well use here! - // AOE is 10M across. - // - May add in elemental protections check. - // 40% chance (especially as it is only a clerical spell) - if(!GlobalInTimeStop && GlobalSpellTargetRange < 6.0) - { - if(AI_ActionCastSpellRandom(SPELL_STORM_OF_VENGEANCE, 40, OBJECT_SELF, 19, TRUE)) return TRUE; - } - // Implosion - great spell! Instant death on a +3 save (!). Short range. - if(GetHasSpell(SPELL_IMPLOSION)) - { - // Its save is at 9 + 3 = 12 DC. Death save, and can kill allies not in PvP - // - Note that because we check natural "globes" in this, the level is set to 9. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_MEDIUM, 9, SAVING_THROW_FORT, SHAPE_SPHERE, GlobalFriendlyFireFriendly, TRUE); - // If valid, 40% chance of casting this one before others. - if(GetIsObjectValid(oAOE)) - { - // Implosion. Level 9 (Cleric). Instant death at +3 save. Note: Medium radius (others are collosal) - if(AI_ActionCastSpellRandom(SPELL_IMPLOSION, 30, oAOE, 19, TRUE)) return TRUE; - } - } - // Wail of the Banshee - // Fort save, else death, and it never affects us, but can kill allies. - if(GetHasSpell(SPELL_WAIL_OF_THE_BANSHEE)) - { - // Collosal range, fortitude, necromancy and death saves. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_COLOSSAL, 9, SAVING_THROW_FORT, SHAPE_SPHERE, GlobalFriendlyFireFriendly, TRUE, TRUE); - // If valid, 40% of firing. - if(GetIsObjectValid(oAOE)) - { - // Wail of the Banshee. Level 9 (Mage/Innate). Caster cries out, kills everything that cannot save in area affected. - if(AI_ActionCastSpellRandom(SPELL_WAIL_OF_THE_BANSHEE, 30, oAOE, 19, TRUE)) return TRUE; - } - } - // Weird - item immunity fear? Need to test - // Never affects allies. Will save type - if the will is always - // saved, it does nothing at all. - if(GetHasSpell(SPELL_WEIRD)) - { - // Get AOE object - this is a small (8M) range, collosal size, doesn't affect allies. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_COLOSSAL, 9, SAVING_THROW_WILL); - // Is it valid? 40% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Wierd. Level 9 (Wizard/Innate). 2 saves (will/fort) against death. Doesn't kill allies! (Illusion) - if(AI_ActionCastSpellRandom(SPELL_WEIRD, 30, oAOE, 19, TRUE)) return TRUE; - } - } - //Meteor Swarm - // CONDITION: Closest enemy 5 ft. (1.5 meters) from me - // Changed to 10M ... the collosal sized actially used (on self) - // But only if the enemy is. Removed enemy fire, for now. - // 40% chance. - if(GlobalSpellTargetRange < 5.0) - { - if(AI_ActionCastSpellRandom(SPELL_METEOR_SWARM, 30, OBJECT_SELF, 19, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Finally, the single target spells again. IE cast them after the AOE ones - // if we don't choose an AOE one. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 9) - { - // 50% chance of Crushing Hand. - // We try and not cast it twice on the same target (for a starter, wasting spells) - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND, GlobalSpellTarget)) - { - // Bigby's Crushing Hand. Level 9 (Mage). 2d6 + 12 damage/round. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_CRUSHING_HAND, 40, GlobalSpellTarget, 19, FALSE)) return TRUE; - } - - // Short range, not undead ETC. - if(bRangeShortValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - GlobalSpellTargetRace != RACIAL_TYPE_UNDEAD && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 9)) - { - // 30% chance of energy drain - // Energy Drain. Level 9 (Mage). 2d4 negative levels! -BAB, Saves, Stats! :-) - if(AI_ActionCastSpellRandom(SPELL_ENERGY_DRAIN, 30, GlobalSpellTarget, 19, FALSE)) return TRUE; - } - } - - // Backup, obviously, that we might not randomly choose Implision, if it - // fails the 40% check. Might sitll have the item/spell though! - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - if(bFirstRunThrough) - { - // Finally, we might as well cast that new (SoU) cleric spell which stops - // many negative effects :-) - // Undeath's Eternal Foe. Stops negative damage, ability score draining, - // negative levels, immunity poisons, immunity diseases. - // Level 9 (Cleric) - if(AI_ActionCastSpell(SPELL_UNDEATHS_ETERNAL_FOE, OBJECT_SELF, 19, FALSE)) return TRUE; - } -/*::8888888888888888888888888888888888888888888888888888888888888888888888888888 - Level 8 Spells. -//::8888888888888888888888888888888888888888888888888888888888888888888888888888 - Thoughts - LOTS of AOE spells here for all classes. *shrugs* all good too! - massive damage and decent saves. Will random cast most of them. Ones for - Sorcerors that they'll want to random cast are [Sunburst] (100% chance VS undead!) - [Incendiary Cloud], [Horrid Wilting] (both are decent damage) [Clenched fist]. - - AOE: - [Natures Balance] - -1d4(CasterLevel/5) SR for enemies. 3d8 + Caster Level in healing for allies. Large area. Short range. Druid only. - [Sunbeam] - Blindness VS Reflex. d6(CasterLevel) divine VS undead, else 3d6 others. ReactionType. -S [Sun Burst] - Similar to sunbeam. 6d6 to others. Vampires die + all undead d6(Caster level) damage. -S [Earthquake] - 1d6(caster level) in damage to AOE, except caster. - [Fire Storm] - 1d6(Caster level) in fire/divine damage. No allies. collosal over caster. -S [Bombardment] - 1d8(caster level) in fire damage. Like Horrid Wilting. Reflex save/long range/collosal - X [Mass Charm] - Charm a lot of enemies in an area. Cast above - X [Mass Blindness/Deafness] - Blind and death on fortitude save. Cast above - [Incendiary Cloud] - 4d6 Fire damage/round in the large AOE. - [Horrid Wilting] - d8(CasterLevel) in negative energy. Fort for half. Necromancy. - - Single: -S [Bigby's Clenched Fist] - Attack Each Round. 1d8 + 12 damage/round. Fort VS stunning as well. - - Defender: - [Aura Versus Alignment] - d6 + d8 damage shield, 25SR, 4Saves, 4AC, mind immune VS alignemnt - X [Premonition] - 30/+5 DR. Cast up above this, though. - X [Mind blank] - Mind immunity/cleansing. Not cast normally, except in invisbility. -S X [Greater Sanctuary (Etherealness)] - Total invisiblity (Bugged I say). Cast above. - - Summon: - [Create Greater Undead] - Create Vampire, Doom knight, Lich, Mummy Cleric. - [Summon Creature VIII (8)] - Greater Elemental. - [Greater Planar Binding] - Death Slaad (Evil) Vrock (Neutral) Trumpet Archon (Good) - - Other: - - Undead are targeted here by undead-specific spells more often the PC's. - - Regenerate is cast if we have damage. - - Gazes (monster gazes) are powerful AOE cone spells. Cast at the taget. -//::88888888888888888888888888888888888888888888888888888888888888888888888888*/ - - // Jump out if we don't want to cast level 8 spells/abilities. - if(nLowestSpellLevel > 8) return FALSE; - - int nEnemyAlignment = GetAlignmentGoodEvil(GlobalSpellTarget); - if(bFirstRunThrough) - { - // Aura Vs. Alignment. d6 + d8 damage shield, 25SR, 4Saves, 4AC, mind immune VS alignemnt - if(GetAlignmentGoodEvil(GlobalSpellTarget) == ALIGNMENT_EVIL) - { - // Holy: Versus Evil. Level 8 (Cleric). Cast as subspell. - if(AI_ActionCastSpell(SPELL_HOLY_AURA, OBJECT_SELF, 18, FALSE, TRUE)) return TRUE; - } - else if(nEnemyAlignment == ALIGNMENT_GOOD) - { - // Unholy Holy: Versus Good. Level 8 (Cleric), Cast as subspell. - if(AI_ActionCastSpell(SPELL_UNHOLY_AURA, OBJECT_SELF, 18, FALSE, TRUE)) return TRUE; - } - } - - // Cast regeneration + Natures Balance here if we are lacking HP. - if(bFirstRunThrough && GlobalOurPercentHP <= 70) - { - if(!GetHasSpellEffect(SPELL_REGENERATE)) - { - // Regeneration. Level 6 (Druid) 7 (Cleric). 6HP/Round. Good for persistant healing. - if(AI_ActionCastSpell(SPELL_REGENERATE, OBJECT_SELF, 17, FALSE)) return TRUE; - } - // Cast at us, might as well. - // Natures Balance. Level 8 (Druid). Lowers SR of enemies by 1d4(CasterLevel/5) + Healing (3d6 + CasterLevel) for allies. - if(AI_ActionCastSpell(SPELL_NATURES_BALANCE, OBJECT_SELF, 18, TRUE)) return TRUE; - } - - // Undead spells. We can cast sunbeam/sunburst (VERY similar!) and Searing Light. - // We do cast this against non-undead, but later on. - // We only do this if at 5+ intelligence. Those below are stupid :-) - if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD && - GlobalIntelligence >= 5 && GlobalNormalSpellsNoEffectLevel < 8) - { - // First, Undead to Death - Slays 1d4HD worth of undead/level. - // (Max 20d4). Lowest first. - // - Will save! - // - 20M radius (but this we can ignore) - // - Takes into account all SR and so forth. - if(GlobalNormalSpellsNoEffectLevel < 6 && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 6) && - bRangeMediumValid) - { - // Undead to Death. Level 6 (Cleric) Slays 1d4HD worth of undead/level. (Max 20d4). Lowest first. - if(AI_ActionCastSpell(SPELL_UNDEATH_TO_DEATH, GlobalSpellTarget, 16, TRUE)) return TRUE; - } - // SUNBURST: 6d6 to non-undead. Kills vampires. Blindness. Limit of 25 dice for undead damage. Medium range/colosal size - // SUNBEAM: 3d6 to non-undead. Blindness. Limit of 20 dice for undead damage. Medium range/colosal size - // Really silly. Only druids/mages get SunBurst...and druids get Sunbeam anyway! - // *sigh* Only difference is sunburst has a higher limit for damage, kills - // vampires, and does 6d6 damage to non-undead, so marginally better. - - // Won't even randomly choose between them. Not worth it. - if(bRangeShortValid) - { - // Sunburst. Level 8 (Druid/Mage) 6d6 to non-undead. Kills vampires. Blindness. Limit of 25 dice for undead damage. Medium range/colosal size - if(AI_ActionCastSpell(SPELL_SUNBURST, GlobalSpellTarget, 18, TRUE)) return TRUE; - // Sunbeam. Level 8 (Cleric/Druid) 3d6 to non-undead. Blindness. Limit of 20 dice for undead damage. Medium range/colosal size - if(AI_ActionCastSpell(SPELL_SUNBEAM, GlobalSpellTarget, 18, TRUE)) return TRUE; - - // If we can't destroy them, dominate them! - if(GlobalSpellTargetHitDice < GlobalOurChosenClassLevel * 3 && - GlobalNormalSpellsNoEffectLevel < 8 && GlobalSeenSpell && - !GetIsObjectValid(GetAssociate(ASSOCIATE_TYPE_DOMINATED))) - { - // Control undead. Level 6 (Cleric) 7 (Mage). Dominates 1 undead up to 3x Caster level. - if(AI_ActionCastSpell(SPELL_CONTROL_UNDEAD, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - } - // Medium spell - if(GlobalNormalSpellsNoEffectLevel < 3 && GlobalSeenSpell) - { - // Searing light. Level 3 (Cleric). Full level: 1-10d6 VS undead. Half Level: 1-5d6 VS constructs. 1-5d8 VS Others. - if(AI_ActionCastSpell(SPELL_SEARING_LIGHT, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - - // Gazes have short ranges - 80% chance. - // Why this high? (compared to say, fire storm?) because they are innate - // and so no concentration checks, and pretty good DC's. - if(bRangeShortValid && d10() <= 8) // No GlobalNormalSpellsNoEffectLevel check - { - // We cast all of these, but randomly. It works through with most powerful - // getting the highest %'s of course :-) - if(!AI_GetSpellTargetImmunity(GlobalImmunityDeath)) - { - // Death gazes first - Golem one is the most deadly! - // 50% chance of either. - if(AI_ActionCastSpellRandom(SPELLABILITY_GOLEM_BREATH_GAS, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DEATH, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - // Petrify - SoU. 50% chance (almost like death!) - if(!AI_GetSpellTargetImmunity(GlobalImmunityPetrify)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_PETRIFY, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - // Destroy X are powerful. 50% chance each. They are basically as DEATH but for alignments. - if(nEnemyAlignment == ALIGNMENT_GOOD) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DESTROY_GOOD, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - else if(nEnemyAlignment == ALIGNMENT_EVIL) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DESTROY_EVIL, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - if(GetAlignmentLawChaos(GlobalSpellTarget) == ALIGNMENT_CHAOTIC) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DESTROY_CHAOS, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - else if(GetAlignmentLawChaos(GlobalSpellTarget) == ALIGNMENT_LAWFUL) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DESTROY_LAW, 40, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - // Can't be immune to mind - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind)) - { - // Fear (and fixed: Added Krenshar Scare) 30% - if(!AI_GetSpellTargetImmunity(GlobalImmunityFear)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_KRENSHAR_SCARE, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_FEAR, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - // Domination/Charm 30% - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DOMINATE, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_CHARM, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - // Other random mind things - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_PARALYSIS, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_STUNNED, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_CONFUSION, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_GAZE_DOOM, 30, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - } - - // Level 8 summons. 20HD or under, or 2 melee enemy and under. - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 8 && - (GlobalOurHitDice <= 20 || GlobalMeleeAttackers <= 2)) - { - // Pale Master's Summon Greater undead - if(AI_ActionCastSummonSpell(SPELLABILITY_PM_SUMMON_GREATER_UNDEAD, -1, 8, FEAT_SUMMON_GREATER_UNDEAD)) return TRUE; - - // Create Greater Undead. Level 8 (Cleric) Create Vampire, Doom knight, Lich, Mummy Cleric. - if(AI_ActionCastSummonSpell(SPELL_CREATE_GREATER_UNDEAD, 18, 8)) return TRUE; - // Summon an Greater elemental. Summon 8 - Druid/Cleric/Bard/Mage. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_VIII, 18, 8)) return TRUE; - // Greater Planar Binding. Level 8 (Mage) Death Slaad (Evil) Vrock (Neutral) Trumpet Archon (Good) - if(AI_ActionCastSummonSpell(SPELL_GREATER_PLANAR_BINDING, 18, 8)) return TRUE; - } - - // Level 8 general attack spells. - // Randomly pick one: -// [Sunbeam] - Blindness VS Reflex. d6(CasterLevel) divine VS undead, else 3d6 others. ReactionType. -// [Sun Burst] - Similar to sunbeam. 6d6 to others. Vampires die + all undead d6(Caster level) damage. -// [Earthquake] - 1d6(caster level) in damage to AOE, except caster. -// [Fire Storm] - 1d6(Caster level) in fire/divine damage. No allies. collosal over caster. -// [Bombardment] - 1d8(caster level) in fire damage. Like Horrid Wilting. Reflex save/long range/collosal -// [Incendiary Cloud] - 4d6 Fire damage/round in the large AOE. -// [Horrid Wilting] - d8(CasterLevel) in negative energy. Fort for half. Necromancy. - -// Single: -// [Bigby's Clenched Fist] - Attack Each Round. 1d8 + 12 damage/round. Fort VS stunning as well. - - // Is it best to cast Single Spells First? - // 70% if favourable. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 8) - { - if(!GetHasSpellEffect(SPELL_BIGBYS_CLENCHED_FIST, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_CLENCHED_FIST) && - bRangeLongValid) - { - // Bigby's Clenched Fist. Level 8 (Mage) Attack Each Round. 1d8 + 12 damage/round. Fort VS stunning as well. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_CLENCHED_FIST, 60, GlobalSpellTarget, 18, FALSE)) return TRUE; - } - // No other single spells for level 8. - - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - - // Area of effect spells. Go through - some do have higher %'s then othres. - - // Fire storm - cast on self with a 10M range around caster (circle). 60% chance. - if(bRangeShortValid && GlobalSpellTargetRange <= 8.0 && - GlobalNormalSpellsNoEffectLevel < 8 && - !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 8)) - { - // Fire storm. Level 8 (Cleric). 1d6(Caster level) in fire/divine damage. No allies. collosal over caster. - if(AI_ActionCastSpellRandom(SPELL_FIRE_STORM, 50, OBJECT_SELF, 18, TRUE)) return TRUE; - } - // Horrid Wilting - // Never affects allies. Fortitude - necromancy spell too. Lots of damage. - if(GetHasSpell(SPELL_HORRID_WILTING)) - { - // Won't cast if got lots of undead. 20M range, huge radius. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 8, SAVING_THROW_FORT, SHAPE_SPHERE, FALSE, FALSE, TRUE); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Horrid Wilting. Level 8 (Mage). d8(CasterLevel) in negative energy. Fort for half. Necromancy. - if(AI_ActionCastSpellRandom(SPELL_HORRID_WILTING, 50, oAOE, 18, TRUE)) return TRUE; - } - } - // Bombardment. Similar to the above. Long range, relfex save, not affect allies. - if(GetHasSpell(SPELL_BOMBARDMENT)) - { - // 40M range, collosal area. Relfex save. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_COLOSSAL, 8, SAVING_THROW_REFLEX); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Bombardment. Level 8 (Druid) 1d8(caster level) in fire damage. Like Horrid Wilting. Reflex save/long range/collosal - if(AI_ActionCastSpellRandom(SPELL_BOMBARDMENT, 50, oAOE, 18, TRUE)) return TRUE; - } - } - // Earthquake. No SR, long range, affects anyone except caster. - if(GetHasSpell(SPELL_EARTHQUAKE)) - { - // 40M range, collosal area. Relfex save. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_COLOSSAL, 8, SAVING_THROW_REFLEX); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Earthquake] - 1d6(caster level) (to 10d6) in damage to AOE, except caster. - if(AI_ActionCastSpellRandom(SPELL_EARTHQUAKE, 40, oAOE, 18, TRUE)) return TRUE; - } - } - // Incendiary Cloud. Long range, the AOE is 5.0M across. 4d6Damage/round is quite good. - if(!AI_CompareTimeStopStored(SPELL_INCENDIARY_CLOUD) && - GetHasSpell(SPELL_INCENDIARY_CLOUD)) - { - // 40M range, lagre (5.0 across) area. Relfex saves. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_LARGE, 8, SAVING_THROW_REFLEX); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Earthquake] - 1d6(caster level) (to 10d6) in damage to AOE, except caster. - if(AI_ActionCastSpellRandom(SPELL_INCENDIARY_CLOUD, 40, oAOE, 18, TRUE)) return TRUE; - } - } - // Sunbeam and burst. Very similar spells and if they are not undead, then - // there should be very little chance of casting it. - // - Won't bother getting nearest undead. - if(GlobalInTimeStop && bRangeLongValid && - (GetHasSpell(SPELL_SUNBEAM) || GetHasSpell(SPELL_SUNBURST))) - { - // 40M range, lagre (5.0 across) area. Relfex saves. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_LARGE, 8, SAVING_THROW_REFLEX); - // Is it valid? 20% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Sunburst. Level 8 (Druid/Mage) 6d6 to non-undead. Kills vampires. Blindness. Limit of 25 dice for undead damage. Medium range/colosal size - if(AI_ActionCastSpellRandom(SPELL_SUNBURST, 10, oAOE, 18, TRUE)) return TRUE; - // Sunbeam. Level 8 (Cleric/Druid) 3d6 to non-undead. Blindness. Limit of 20 dice for undead damage. Medium range/colosal size - if(AI_ActionCastSpellRandom(SPELL_SUNBEAM, 10, oAOE, 18, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Single spells at end - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 8) - { - // 40% chance - if(!GetHasSpellEffect(SPELL_BIGBYS_CLENCHED_FIST, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_CLENCHED_FIST) && - bRangeLongValid) - { - // Bigby's Clenched Fist. Level 8 (Mage) Attack Each Round. 1d8 + 12 damage/round. Fort VS stunning as well. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_CLENCHED_FIST, 30, GlobalSpellTarget, 18, FALSE)) return TRUE; - } - // No other single spells for level 8. - - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - // Check if we had any of the above we didn't cast based on the % - if(AI_ActionCastBackupRandomSpell()) return TRUE; - -/*::7777777777777777777777777777777777777777777777777777777777777777777777777777 - Level 7 Spells. -//::7777777777777777777777777777777777777777777777777777777777777777777777777777 - Thoughts - well, quite a varied amount of spells. Among classes, there are - some variety. SoU adds Banishment, and Bigby's. Quite a few death spells - but note: Word of faith is very effective against 11s and under - stun, for - under 4's, death! - - Hordes adds Great Thunderclap - requires 3 saves! :-) - - AOE: -S X [Banishment] - Destroys summons (familiars, creatures, spells) to a 2xCasters HD limit. - [Word of Faith] - Enemies only. 4 Or Down die. 4+ Confuse Stun, Blind. 8+ Stun + Blind. 12+ Only Blind. (1Round/2Casterlevels) outsiders killed. - [Creeping Doom] - Until 1000 damage, d6 + d6/round stayed in damage in an AOE. - [Delayed Fireball Blast] - Up to 20d6 fire reflex damage. Can be set up as a trap (heh, nah!) - [Prismatic Spray] - Random damage/effects. Chance of doing double amount of effects. -H [Great Thunderclap] - Will VS 1 round stun. Fort VS 1 Turn Deaf. Reflex VS 1 Round Knockdown. - - Single: - [Distruction] - Short ranged instant death for fort, else take 10d6 Negative energy. Death + Necromantic. -S [Bigby's Grasping Hand] - Hold target if sucessful grapple - X [Control Undead] - Yep, controls undead! Dominates them. Cast above near sunbeam. - [Finger of Death] - Short ranged instant Death on fort else 3d6 negative energy. - [Power Word, Stun] - Instant stun based on HP of target. Cast above if few targets. Here if more. - - Defender: - [Aura of Vitality] - +4 STR, CON, DEX for all allies. - [Protection From Spells] +8 to all saves. Cast above, backup here. - [Shadow Shield] - Necromancy/negative energy immunity. Some other resistances and some DR. - X [Spell Mantle] - 1d8 + 8 spells stopped. Cast above (This is good VS anything that casts spells) - [Regenerate] - 6HP/Round healed. Cast above if damaged. Cast here anyway :-) - - Summon: - [Summon Monster VII (7)] - Huge elemental - [Mordenkainen's Sword] - Good, nay, very good hitting summon. - - Other: - X [Greater Restoration] - Heals lots of effects. - X [Resurrection] - Resurrection :-) cast on dead people not here. - - Do Palemaster Death touch here. Always use it if they are not immune. -//::77777777777777777777777777777777777777777777777777777777777777777777777777*/ - - // Jump out if we don't want to cast level 7 spells. - if(nLowestSpellLevel > 7) return FALSE; - - // Cast Shadow Shield only first. Good protections really :-) - // Visages are generally lower DR, with some spell-resisting or effect-immunty extras. - - if(bFirstRunThrough) - { - // Shadow Shield - has 10/+3 damage reduction + lots of stuff. Level 7 (Mage) - if(AI_SpellWrapperVisageProtections(7)) return TRUE; - - // Protection From Spells. - if(!AI_GetAIHaveSpellsEffect(GlobalHasProtectionSpellsSpell)) - { - // Protection from spells. Level 7 (Mage), for +8 on all saves (Area effect too!) - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_SPELLS, OBJECT_SELF, 17, FALSE)) return TRUE; - } - } - - // Palemaster death touch - // DC 17 + (Pale Master - 10) /2. - if(bRangeTouchValid && GlobalSeenSpell) - { - // Cannot affect creatures over large size - // - Module switch, but always checked here. - if(GetCreatureSize(GlobalSpellTarget) <= CREATURE_SIZE_LARGE && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - // Fort save DC 17 + 1 per level over 10 (epic levels). Keep this test. - GlobalSpellTargetFort <= 16) - { - // Use the feat - if(AI_ActionUseSpellLikeFeat(FEAT_DEATHLESS_MASTER_TOUCH, SPELLABILITY_PM_DEATHLESS_MASTER_TOUCH, GlobalSpellTarget)) return TRUE; - } - // Undead graft paralyzes! - if(GlobalSpellTargetRace != RACIAL_TYPE_ELF && - // Fort save - 14 + Palemaster levels / 2 - !GlobalSpellTargetFort < (14 + GetLevelByClass(CLASS_TYPE_PALEMASTER)/2)) - { - // Use the feat - if(AI_ActionUseSpellLikeFeat(FEAT_UNDEAD_GRAFT_1, SPELLABILITY_PM_UNDEAD_GRAFT_1, GlobalSpellTarget)) return TRUE; - // 2 versions - if(AI_ActionUseSpellLikeFeat(FEAT_UNDEAD_GRAFT_2, SPELLABILITY_PM_UNDEAD_GRAFT_2, GlobalSpellTarget)) return TRUE; - } - } - - // Hostile spells here. - // We randomly choose one to cast (with higher %'s for some!) -// AOE: -// [Word of Faith] - Enemies only. 4 Or Down die. 4+ Confuse Stun, Blind. 8+ Stun + Blind. 12+ Only Blind. (1Round/2Casterlevels) outsiders killed. -// [Creeping Doom] - Until 1000 damage, d6 + d6/round stayed in damage in an AOE. -// [Delayed Fireball Blast] - Up to 20d6 fire reflex damage. Can be set up as a trap (heh, nah!) -// [Prismatic Spray] - Random damage/effects. Chance of doing double amount of effects. -// [Great Thunderclap] - Will VS 1 round stun. Fort VS 1 Turn Deaf. Reflex VS 1 Round Knockdown. -// [Stonehold] - AOE - Will Encase people in stone (Paralysis) VS Will Mind throw. (Save each round) -// Single: -// [Distruction] - Short ranged instant death for fort, else take 10d6 Negative energy. Death + Necromantic. -// [Bigby's Grasping Hand] - Hold target if sucessful grapple -// [Finger of Death] - Short ranged instant Death on fort else 3d6 negative energy. -// [Power Word, Stun] - Instant stun based on HP of target. Cast above if few targets. Here if more. - - // Is it best to target with single-target spells first? Most are pretty good :-D - // 60-70% if favourable. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 7) - { - // Killing spells. These, if sucessful, rend all status-effect spells redundant. - // - Only fired if they are not immune :-D - if(bRangeShortValid && !AI_CompareTimeStopStored(SPELL_DESTRUCTION, SPELL_FINGER_OF_DEATH) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 7) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath)) - { - // Destruction, level 7 (Cleric). Fort (Death) for Death if fail, or 10d6 damage if pass. - if(AI_ActionCastSpellRandom(SPELL_DESTRUCTION, 60, GlobalSpellTarget, 17, FALSE)) return TRUE; - // Finger of Death. Level 7 (Mage). Fort (Death) for death if fail, or d6(3) + nCasterLvl damage if pass. - if(AI_ActionCastSpellRandom(SPELL_FINGER_OF_DEATH, 50, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - // Is not immune to mind spell (I think this is a valid check) and not already stunned. - // Really, if under < 151 HP to be affected - short ranged, and seen. - if (GlobalSpellTargetCurrentHitPoints <= 150 && bRangeShortValid && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_CompareTimeStopStored(SPELL_POWER_WORD_STUN)) - { - // Power Word Stun. Level 7 (Wizard). Stun duration based on HP. - if(AI_ActionCastSpellRandom(SPELL_POWER_WORD_STUN, 60, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - // Bigbiy's Grasping hand last. We don't bother checking for grapple checks - - // they mainly work anyway, if anything. Powerful in its own right, as - // it holds on a sucessful check. - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_GRASPING_HAND, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_GRASPING_HAND) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun)) - { - // Bigby's Grasping Hand. Level 7 (Mage) Hold target if sucessful grapple - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_GRASPING_HAND, 40, GlobalSpellTarget, 18, FALSE)) return TRUE; - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - // AOE spells now. -// [Word of Faith] - Enemies only. 4 Or Down die. 4+ Confuse Stun, Blind. 8+ Stun + Blind. 12+ Only Blind. (1Round/2Casterlevels) outsiders killed. -// [Creeping Doom] - Until 1000 damage, d6 + d6/round stayed in damage in an AOE. -// [Delayed Fireball Blast] - Up to 20d6 fire reflex damage. Can be set up as a trap (heh, nah!) -// [Prismatic Spray] - Random damage/effects. Chance of doing double amount of effects. -// [Great Thunderclap] - Will VS 1 round stun. Fort VS 1 Turn Deaf. Reflex VS 1 Round Knockdown. - - // Word of faith - // Doesn't hurt allies, will-based save, at the very least blindness :-D Medium range, collosal size - if(bRangeMediumValid && GetHasSpell(SPELL_WORD_OF_FAITH)) - { - // 20M medium range, colossal size, will save to deflect. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_COLOSSAL, 7, SAVING_THROW_WILL); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Word of Faith. Level 7 (Cleric) Enemies only affected. 4 Or Down die. 4+ [Confuse|Stun|Blind]. 8+ [Stun|Blind]. 12+ [Blind]. (1Round/2Casterlevels) outsiders killed. - if(AI_ActionCastSpellRandom(SPELL_WORD_OF_FAITH, 60, oAOE, 17, TRUE)) return TRUE; - } - } - // Creeping Doom - // Damage to all in AOE, to 1000 damage. d6(rounds in it) basically. Good AOE spell. - // Only 50% chance of casting, to not cast too many. - if(bRangeMediumValid && !GlobalInTimeStop && GetHasSpell(SPELL_CREEPING_DOOM)) - { - // 20M medium range, we'll say a huge size. No save can stop all damage ;-) - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 7, FALSE, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Creeping Doom. Level 7 (Druid) Until 1000 damage, d6 + d6/round stayed in damage in an AOE. - if(AI_ActionCastSpellRandom(SPELL_CREEPING_DOOM, 40, oAOE, 17, TRUE)) return TRUE; - } - } - // Delayed Fireball Blast. Big fireball. Lots of fire damage - reflex saves. - if(bRangeMediumValid && GetHasSpell(SPELL_DELAYED_BLAST_FIREBALL) && - !AI_CompareTimeStopStored(SPELL_DELAYED_BLAST_FIREBALL, SPELL_FIREBALL)) - { - // 20M medium range, blast is RADIUS_SIZE_HUGE, lower then Fireball, but more deadly (both save + damage) - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 7, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Delayed Fireball Blast. Level 7 (Mage) Up to 20d6 fire reflex damage. Can be set up as a trap (heh, nah!) - if(AI_ActionCastSpellRandom(SPELL_DELAYED_BLAST_FIREBALL, 50, oAOE, 17, TRUE)) return TRUE; - } - } - // Great Thunderclap is OK, but doesn't really do too much. If anything, the - // 3 saves are cool :-P - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_GREAT_THUNDERCLAP) && - GetHasSpell(SPELL_GREAT_THUNDERCLAP)) - { - // 20M medium range, hits a gargantuan area. - // - We ignore saves for this. - // - Doesn't actually hit ourselves. Won't bother checking this though. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_GARGANTUAN, 7, SAVING_THROW_ALL, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Great Thunderclap. Level 7 (Mage) Will VS 1 round stun. Fort VS 1 Turn Deaf. Reflex VS 1 Round Knockdown. - if(AI_ActionCastSpellRandom(SPELL_GREAT_THUNDERCLAP, 40, oAOE, 17, TRUE)) return TRUE; - } - } - // Lastly, AOE wise, it is prismatic spray. Comparable, if a little (or very!) - // erratic. We might as well cast this whatever (So if they all are immune - // to the delay fireballs we have, this does good damage compared to 0!) - if(bRangeShortValid && !AI_CompareTimeStopStored(SPELL_PRISMATIC_SPRAY) && - GetHasSpell(SPELL_PRISMATIC_SPRAY)) - { - // 8M short range, blast is a cone, and no save. Spell script has fSpread at 11.0 - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 11.0, 7, FALSE, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 40% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Prismatic Spray. Level 7 (Mage) Random damage/effects. Chance of doing double amount of effects. - if(AI_ActionCastSpellRandom(SPELL_PRISMATIC_SPRAY, 30, oAOE, 17, TRUE)) return TRUE; - } - } - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 7 summon spells. Also cast the unique class-based summons (like - // a blackguards undead, a shadowdancers shadow ETC). - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 7) - { - // Always use our feat-based ones (not level dependant) as they increase - // with level. - // - Shadow based on level (Shadowdancer Shadow) - if(AI_ActionCastSummonSpell(SPELL_SUMMON_SHADOW, -1, 7, FEAT_SUMMON_SHADOW)) return TRUE; - // - Undead warrior (EG: doomknight) based on level - if(AI_ActionCastSummonSpell(SPELLABILITY_BG_CREATEDEAD, -1, 7, AI_FEAT_BG_CREATE_UNDEAD)) return TRUE; - // - Shadow based on level - if(AI_ActionCastSummonSpell(SPELLABILITY_BG_FIENDISH_SERVANT, -1, 7, AI_FEAT_BG_FIENDISH_SERVANT)) return TRUE; - // Pale master - Summon Undead feat. - if(AI_ActionCastSummonSpell(SPELLABILITY_PM_SUMMON_UNDEAD, -1, 7, FEAT_SUMMON_UNDEAD)) return TRUE; - - // Then, the normal summons. - if(GlobalOurHitDice <= 18 || GlobalMeleeAttackers <= 2) - { - // Mordenkainen's Sword Level 7 (Mage). Good, nay, very good hitting summon. - if(AI_ActionCastSummonSpell(SPELL_MORDENKAINENS_SWORD, 17, 7)) return TRUE; - - // Summon Monster VII (7). Level 7 (Cleric, Mage, Druid, etc) Huge elemental - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_VII, 17, 7)) return TRUE; - } - } - - // Now, back to single spell targets again. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 7) - { - // Killing spells. These, if sucessful, rend all status-effect spells redundant. - // - Only fired if they are not immune :-D - if(bRangeShortValid && !AI_CompareTimeStopStored(SPELL_DESTRUCTION, SPELL_FINGER_OF_DEATH) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 7) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath)) - { - // Destruction, level 7 (Cleric). Fort (Death) for Death if fail, or 10d6 damage if pass. - if(AI_ActionCastSpellRandom(SPELL_DESTRUCTION, 30, GlobalSpellTarget, 17, FALSE)) return TRUE; - // Finger of Death. Leve 7 (Mage). Fort (Death) for death if fail, or d6(3) + nCasterLvl damage if pass. - if(AI_ActionCastSpellRandom(SPELL_FINGER_OF_DEATH, 20, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - // Bigbiy's Grasping hand last. We don't bother checking for grapple checks - - // they mainly work anyway, if anything. Powerful in its own right, as - // it holds on a sucessful check. - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_GRASPING_HAND, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_GRASPING_HAND) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun)) - { - // Bigby's Grasping Hand. Level 7 (Mage) Hold target if sucessful grapple - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_GRASPING_HAND, 20, GlobalSpellTarget, 18, FALSE)) return TRUE; - } - // Is not immune to mind spell (I think this is a valid check) and not already stunned. - // Really, if under < 151 HP to be affected - short ranged - if (GlobalSpellTargetCurrentHitPoints <= 150 && bRangeShortValid && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_CompareTimeStopStored(SPELL_POWER_WORD_STUN)) - { - // Power Word Stun. Level 7 (Wizard). Stun duration based on HP. - if(AI_ActionCastSpellRandom(SPELL_POWER_WORD_STUN, 20, GlobalSpellTarget, 17, FALSE)) return TRUE; - } - } - - // Backup casting of the level 7 hostle spells, just below the last - // level 7 summon spells :-) - if(AI_ActionCastBackupRandomSpell()) return TRUE; - -/*::6666666666666666666666666666666666666666666666666666666666666666666666666666 - Level 6 Spells. -//::6666666666666666666666666666666666666666666666666666666666666666666666666666 - Thoughts - a great variety of spells here, from defenses like Greater Stoneskin, - down to versitile Shades, Flesh to stone and chain lightning. For all classes, - level 6 spells give the greatest variety. - - Hordes adds a few, as does SoU. - - AOE: - [Acid Fog] - Acid damage in an AOE, including slow in AOE. 1d6/round in fog. - [Chain Lightning] - Target enemies only. Up to 20d6 for primary, 10d6 for secondary in reflex electical damage. - X [Circle of Death] - Under 9HD people save or die. 1d4 creatures/caster leve. Cast above -S [Isaac's Greater Missile Storm] - !!! To 20 missiles, 2d6 Damage/Missile, hits only enemies in AOE around target. No save! - [Blade Barrier] - Lots of spikes = Lots of damage. Piercing, relfex saves. -H X [Undead to Death] - Slays 1d4HD worth of undead/level. (Max 20d4). Lowest first. - - Cast as single target: - -H [Evil Blight] - All in a collosal area have a curse (-3 stats) on them. Will save. - - Mobile AOE: - -S [Dirge] - Continual Strength Damage to those in the AOE (Mobile, on self) - - [Greater Dispeling] - Dispels all effects on 1 target, or 1 on an area of targets. (to 15 caster levels) - [Greater Spell Breach] - Strips 6 protection spells, then lowers SR of target. - - Single: -S [Bigby's Forceful Hand] - Bullrush to make the target Knockdowned and Dazed all in one. -S [Flesh to Stone] - Petrifies a target on a fortitude save. - [Harm] - 1d4 HP left on target, if touch attacked. -S [Drown] - Up to 90% of current HP damage done. Fort save for none. -H X [Crumble] - 1d6/level damage (to 15d6) only to constructs. - - Defender: - [Ethereal Visage] - 25% consealment. 20/+3 DR. 0/1/2 spells immune to. - [Globe of Invulnerability] - Immunity to 4, 3, 2, 1, 0 level spells. - [Greater Stoneskin] - 20/+5 DR. We cast this here, if we have not got it, to prepare for Premonition going down. - X [Mass Haste] - Haste for allies in area. - - Summon: - [Summon Monster VI (6)] - Dire Tiger - [Planar Binding] - Summons Subbucus (Evil), Hound Arcon (Good), Green Slaad (Neutral). AI won't target outsiders specifically. - [Create Undead] - Creates a lowish undead to aid the caster. - [Planar Ally] - Waoh! Same as planar binding! Exactly! :-) (except no stopping outsiders) - - Other: -XXXX[Legend Lore] - Lots of lore. Never cast. - X [Shades] - Offense and defense spells. NPC's can cast these right now. Cast same time as normal versions - X [Stone to Flesh] - Un-petrifies a target. - X [Tenser's Transformation] - Uses polymorph, so cast after spells. Massive HP boost and BAB boost. - X [True Seeing] - See invisible creatures/hidden ones (thats a bug) meant to stop illusions. Cast in special cases. - X [Heal] - Heals all damage/harms undead. - X [Healing Circle] - Heals damage as critcal wounds in an AOE. - - Note that there are some monster abilities - the howl attacks, here. - Sorta like pulses, 80% chance to check them, that sort of thing :-D - - We also cast visage protections here. Ghoslty, no, not until level 3 spells. - - We also cast, as a starter, elemental protections :-) - - We check if we can cast Golem Ranged Slam here too. - - Trying to do dragon diciple breath too! :-) - - Hag horrific eye, from the hag in 1.62, added in as well. -//::66666666666666666666666666666666666666666666666666666666666666666666666666*/ - - // Jump out if we don't want to cast level 6 spells. - if(nLowestSpellLevel > 6) return FALSE; - - if(bFirstRunThrough) - { - // Best elemental protection (maybe % chance here...and later do it 100%) - if(AI_SpellWrapperElementalProtections(nLowestSpellLevel)) return TRUE; - - // Visage - eathereal :-) - // Ethereal Visage. Level 6 (Mage) 25% consealment. 20/+3 DR. 0/1/2 spells immune to. - if(AI_SpellWrapperVisageProtections(6)) return TRUE; - - // Globe of Invunrability. We cast minor globe if we have under 10HD (Else we'll try - // it lower down anyway) - if(GlobalOurHitDice <= 10) - { - if(AI_SpellWrapperGlobeProtections(nLowestSpellLevel)) return TRUE; - } - else - { - if(AI_SpellWrapperGlobeProtections(6)) return TRUE; - } - - // Cast Greater Stoneskin if not got the specific greater stoneskin spell - // because we want to prepare for premonition going down, and we must have - // checked all level 7, 8 and 9 spells anyway - if(!GetHasSpellEffect(SPELL_GREATER_STONESKIN)) - { - // Then, greater stoneskin protects a lot of damage - - // Greater Stoneskin. Level 6 (Mage) 7 (druid) 20/+5 phiscial damage reduction - if(AI_ActionCastSpell(SPELL_GREATER_STONESKIN, OBJECT_SELF, 16, FALSE)) return TRUE; - } - } - - // Dispel level 4 protections (Hastes, regenerates, tensors...) - if(AI_ActionAttemptDispel(4, bRangeMediumValid)) return TRUE; - - if(bFirstRunThrough) - { - // Cast more buff spells - // Buffing spells (energy buffer and downwards) - // 40% chance. - if(AI_ActionCastAllyBuffSpell(6.0, 40, SPELL_ENERGY_BUFFER, SPELL_PROTECTION_FROM_ELEMENTS, SPELL_RESIST_ELEMENTS, SPELL_ENDURE_ELEMENTS)) return TRUE; - } - - // Dirge. - // - Cast always, basically. Boring :-) but its an OK spell - if(bFirstRunThrough && !GetHasSpellEffect(SPELL_DIRGE)) - { - // Dirge. Level 6 (Bard). Continual Strength Damage to those in the AOE (Mobile, on self) - if(AI_ActionCastSpell(SPELL_DIRGE, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - - // Golem ranged slam. 80% chance of using. - if(bRangeLongValid && GlobalSeenSpell && d10() <= 8) - { - // Golem Ranged Slam. Long ranged, Random(30) + 30 Blud damage. Can do knockdown too. - if(AI_ActionCastSpell(AI_SPELLABILITY_GOLEM_RANGED_SLAM, GlobalSpellTarget)) return TRUE; - } - - // Evil eye. DC 11 Fort save, or big ability damage. 60% chance of casting. - if(bRangeShortValid && GlobalSeenSpell && GlobalSpellTargetFort <= 30 && d10() <= 6) - { - // Evil eye, short range. 5 ability damage to str. and con., and 1/5 possibly of doing all 6 damage. Fort for none (DC 11) - if(AI_ActionCastSpell(SPELLABILITY_SEAHAG_EVILEYE, GlobalSpellTarget)) return TRUE; - } - - // Dragon Diciple breath. - if(bRangeTouchValid && - // Reflex save. 19 + 1 per 4 levels after 10. - GlobalSpellTargetReflex < (19 + (GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE) - 10)/4)) - { - // Dragon diciple breath - x2_s2_descbreath - if(AI_ActionUseSpellLikeFeat(FEAT_DRAGON_DIS_BREATH, AI_SPELLABILITY_DIS_BREATH, GlobalSpellTarget)) return TRUE; - } - - // Howl! HOOOOOOOOWWWWWWWWWWWLLLLLLLLL! Collosal range on self. - // Most are decent enough to cast as level 6 spells, centred on self, 80% chance to cast. - // We also randomly choose one (and always cast one if we can cast one :-) ) - if(bRangeTouchValid && GlobalSeenSpell && d10() <= 8) - { - // We cast all of these, but randomly. It works through with most powerful - // getting the highest %'s of course :-) - if(!AI_GetSpellTargetImmunity(GlobalImmunityDeath)) - { - // 50% chance of death howl. - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_DEATH, 40)) return TRUE; - } - // Sonic damage is powerful - 40% - // Fortitude save or sonic damage d6(HD/4) :-) - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_SONIC, 30)) return TRUE; - - // Can't be immune to mind for most of the rest - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind)) - { - // Mind blast - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_MINDFLAYER_MINDBLAST_10, 20)) return TRUE; - // Other one - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_MINDFLAYER_PARAGON_MINDBLAST, 20)) return TRUE; - // Other one 2 - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_PSIONIC_MASS_CONCUSSION, 20)) return TRUE; - - // Fear howl. 40% chance - if(!AI_GetSpellTargetImmunity(GlobalImmunityFear)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_FEAR, 20)) return TRUE; - } - // Paralisis and daze (mind effects, and stunning ones) - if(!AI_GetSpellTargetImmunity(GlobalImmunityStun)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_PARALYSIS, 20)) return TRUE; - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_DAZE, 20)) return TRUE; - } - } - // Doom last. -X's amounts of stats. Also note, don't cast if already - // affected :-) - if(!GetHasSpellEffect(SPELLABILITY_HOWL_DOOM)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_HOWL_DOOM, 20)) return TRUE; - } - - // Harpy song. - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_HARPYSONG, 20)) return TRUE; - - // Finally, if we got the 80% chance of using one, and none of them - // random cast, backup with this. - if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - // Now, randomish attack spells we possess. -// AOE: -// [Acid Fog] - Acid damage in an AOE, including slow in AOE. 1d6/round in fog. -// [Chain Lightning] - Target enemies only. Up to 20d6 for primary, 10d6 for secondary in reflex electical damage. -// [Isaac's Greater Missile Storm] - !!! To 20 missiles, 2d6 Damage/Missile, hits only enemies in AOE around target. No save! -// [Blade Barrier] - Lots of spikes = Lots of damage. Piercing, relfex saves. - -// Single: -// [Bigby's Forceful Hand] - Bullrush to make the target Knockdowned and Dazed all in one. -// [Flesh to Stone] - Petrifies a target on a fortitude save. -// [Harm] - 1d4 HP left on target, if touch attacked. -// [Drown] Up to 90% of current HP damage done. Fort save for none. -// [Evil Blight] - All in a collosal area have a curse (-3 stats) on them. Will save. - - // Is it best to target with single-target spells first? Flesh to stone - // alone makes single target level 6 spells decent enough :-) - // 60-70% if favourable. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 6) - { - // Drown! We don't do this if they are under 30HP already. - // 80% chance to cast if we have it, and not immune to the save. - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_DROWN) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 6) && - GlobalSpellTargetCurrentHitPoints >= 30) - { - // Drown. level 6 (Druid) Up to 90% of current HP damage done. Fort save for none. - if(AI_ActionCastSpellRandom(SPELL_DROWN, 70, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Flesh to Stone is a good spell - petrify attack. - // 70% chance to cast if we have it, and not immune to the save. - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_FLESH_TO_STONE) && - !AI_GetSpellTargetImmunity(GlobalImmunityPetrify) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 6)) - { - // Flesh to Stone. - Petrifies a target on a fortitude save. - if(AI_ActionCastSpellRandom(SPELL_FLESH_TO_STONE, 60, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Evil Blight. This is an AOE curse, but note that we cannot check - // if an AOE already has it. - if(bRangeMediumValid && !AI_CompareTimeStopStored(AI_SPELL_EVIL_BLIGHT) && - !AI_GetSpellTargetImmunity(GlobalImmunityCurse) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 6)) - { - // Evil Blight. Level 6 (Mage) -3 Curse to all in AOE (Will save) - if(AI_ActionCastSpellRandom(AI_SPELL_EVIL_BLIGHT, 60, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Bigby's Forceful hand. No need to check for bullrush attack. It - // will knockdown and daze a target :-) Quite powerful as no save. - // (Count as stun for immunity - that is anyting that stops them moving (daze included)) - // - Should affect mind-immune people. Bioware will fix this, been told. No mind check - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_FORCEFUL_HAND, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_FORCEFUL_HAND) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun)) - { - // Bigby's Forceful Hand. Level 6 (Mage) Bullrush to make the target Knockdowned and Dazed all in one. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_FORCEFUL_HAND, 30, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - // AOE spells - including the now-infamous Isaac's Greater Missile Storm! -// [Acid Fog] - Acid damage in an AOE, including slow in AOE. 1d6/round in fog. -// [Chain Lightning] - Target enemies only. Up to 20d6 for primary, 10d6 for secondary in reflex electical damage. -// [Isaac's Greater Missile Storm] - !!! To 20 missiles, 2d6 Damage/Missile, hits only enemies in AOE around target. No save! -// [Blade Barrier] - Lots of spikes = Lots of damage. Piercing, relfex saves. - - // Isaac's Greater Missile Storm - only hits enemies, targeted on an area - // around the caster, lots of missiles which do 2d6 MAGICAL energy each!!! - // Ok, this is sad, but because it goes well targeting many, or one target, - // we will target this at the spell target regardless of range (which is - // long anyway!) or better (more in AOE) targets. 80% chance of casting. - // Cast at ground. - - if(bRangeLongValid && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 6) - { - // Isaac's Greater Missile Storm. Level 6 (Mage) !!! To 20 missiles, 2d6 Damage/Missile, hits only enemies in AOE around target. No save! - if(AI_ActionCastSpellRandom(SPELL_ISAACS_GREATER_MISSILE_STORM, 70, GlobalSpellTarget, 16, TRUE)) return TRUE; - } - - // Chain lightning is a decent-damage, no, good-damage spell, like fireball, - // but a better way - it damages all enemies only :-D - // Because it damages enemies only, we aim it at the current spell target, - // because it needs a target (and it must be a seen one!) - if(bRangeLongValid && GlobalSeenSpell && - !AI_CompareTimeStopStored(SPELL_CHAIN_LIGHTNING) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 6)) - { - // Collosal area, long range, reflex throw. 60% chance of casting. - // Chain Lightning. Level 6 (Mage). Target enemies only. Up to 20d6 for primary, 10d6 for secondary in reflex electical damage. - if(AI_ActionCastSpellRandom(SPELL_CHAIN_LIGHTNING, 50, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Blade Barrier - lots of damage, up to 20d6 damage to targets :-) - // Wierd shape, however. It is 2M across one way, but 10M long, retangle. - // We just target a large (5.0) area, and as long as it hits an enemy object, - // it is great! - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_BLADE_BARRIER) && - GetHasSpell(SPELL_BLADE_BARRIER)) - { - // 20M medium range, large area we'll say. Reflex save - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 6, SAVING_THROW_REFLEX); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Blade Barrier. Level 6 (Cleric) Lots of spikes = Lots of damage (to 20d6). Piercing, relfex saves. - if(AI_ActionCastSpellRandom(SPELL_BLADE_BARRIER, 40, oAOE, 16, TRUE)) return TRUE; - } - } - - // Level 6 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 6 && - (GlobalOurHitDice <= 16 || GlobalMeleeAttackers <= 2)) - { - // Summon Monster VI (6). Level 6 (Most classes) Dire Tiger - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_VI, 16, 6)) return TRUE; - // Planar Binding. Level 6 (Mage). Summons Subbucus (Evil), Hound Arcon (Good), Green Slaad (Neutral). AI won't target outsiders specifically. - if(AI_ActionCastSummonSpell(SPELL_PLANAR_BINDING, 16, 6)) return TRUE; - // Create Undead. Level 6 (Cleric) 8 (Mage). Creates a lowish undead to aid the caster. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_VI, 16, 6)) return TRUE; - // Planar Ally. Level 6 (Cleric) - Waoh! Same as planar binding! Exactly! :-) (except no stopping outsiders) - if(AI_ActionCastSummonSpell(SPELL_PLANAR_ALLY, 16, 6)) return TRUE; - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Lastly, the single-target spells again :-) - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 6) - { - // Flesh to Stone is a good spell - petrify attack. - // 50% chance to cast if we have it, and not immune to the save. - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_FLESH_TO_STONE) && - !AI_GetSpellTargetImmunity(GlobalImmunityPetrify) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 6)) - { - // Flesh to Stone. - Petrifies a target on a fortitude save. - if(AI_ActionCastSpellRandom(SPELL_FLESH_TO_STONE, 40, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Evil Blight. This is an AOE curse, but note that we cannot check - // if an AOE already has it. - if(bRangeMediumValid && !AI_CompareTimeStopStored(AI_SPELL_EVIL_BLIGHT) && - !AI_GetSpellTargetImmunity(GlobalImmunityCurse) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 6)) - { - // Evil Blight. Level 6 (Mage) -3 Curse to all in AOE (Will save) - if(AI_ActionCastSpellRandom(AI_SPELL_EVIL_BLIGHT, 30, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Bigby's Forceful hand. No need to check for bullrush attack. It - // will knockdown and daze a target :-) Quite powerful as no save. - // (Count as stun for immunity - that is anyting that stops them moving (daze included)) - // - Should affect mind-immune people. Bioware will fix this, been told. No mind check - if(bRangeLongValid && !GetHasSpellEffect(SPELL_BIGBYS_FORCEFUL_HAND, GlobalSpellTarget) && - !AI_CompareTimeStopStored(SPELL_BIGBYS_FORCEFUL_HAND) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun)) - { - // Bigby's Forceful Hand. Level 6 (Mage) Bullrush to make the target Knockdowned and Dazed all in one. - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_FORCEFUL_HAND, 20, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - } - - // % casting recast again, before next set - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Acid fog - slow, and damage in acid fog. - // Decent..but ...well, its alright :-) - // THIS is spell 0 spell :-) we cast 100% and no backup casting. - if(bRangeLongValid && !GlobalInTimeStop && GetHasSpell(SPELL_ACID_FOG)) - { - // 40M spell range, 5M radius (large) fortitude save, but doesn't stop damage. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_LARGE, 6); - // Is it valid? 40% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Acid Fog. Level 6 (Mage) Acid damage in an AOE, including slow in AOE. 1d6/round in fog. - if(AI_ActionCastSpell(SPELL_ACID_FOG, oAOE, 16, TRUE)) return TRUE; - } - } - -/*::5555555555555555555555555555555555555555555555555555555555555555555555555555 - Level 5 Spells. -//::5555555555555555555555555555555555555555555555555555555555555555555555555555 - Thoughts - A good variety of AOE spells, but lacking good single target spells - generally. Of course, some spells are cast at different levels :-P . Slay - living is probably the lowest Save-Or-Die spell, while the rest give decent - damage (AOE spells that is). Some specilist spells include Mind Fog and - Feeble Mind :-) - - AOE: - [Cloudkill] - Acid damage, and kills level 7s or below. AOE. - [Cone of Cold] - Cone of damage, up to 15d6 to those in the cone. Reflex for none. - X [Dismissal] - Destroys summons in AOE against a will save + 6DC. Cast above -S [Firebrand] - Missile storm - hits enemies up to caster level (max 15) for 1d6 fire reflex damage. - [Mind Fog] - Minus 10 to all will saves within the AOE. - [Circle of Doom] - 1d8 + 1/caster level in negative damage - [Flame Strike] - Up to 15d6 in Fire + Divine damage. Reflex based. Medium area. -H [Ball Lightning] - 1d6/missile, to 15 missiles. Reflex based. Cast at singal target (like missile storms) -HXXX[Vine mine] - Entangle, 50% movement, or Camoflage. Note: Not cast ever! Stupid spell! - - [Battletide] - +2 Save/Attack/Damage to cast. -2 to enemies who enter. Mobile AOE on self. - - Single: -S [Bigby's Interposing Hand] -10 to hit for 1 target. - X [Dominate Person] - Dominates 1 humanoid person. Cast above - [Feeblemind] - 1d4/4 caster levels in intelligence decrease, if fail will save. - [Hold Monster] - Paralyze's an enemy monster (any race) - [Slay Living] - Touch attack + Fortitude Save, creature dies, else d6(3) negative damage. -H [Inferno] - 2d6 Fire damage/round like acid arrow. No save, only SR. - - Defender: - [Energy Buffer] - 40/- elemental resistance to Cold, Acid, Fire, Sonic and electicity, to 60 damage total. - X [Lesser Spell Mantle] - 1d4 + 6 spells immune to. Cast above - [Spell Resistance] - 12 + Caster Level in spell resistance. -H X [Mestil's Acid Sheath] - 1d6 + 2/level in acid damage to attackers. - - Summon: - [Summon Creature V (5)] - Dire Bear - [Lesser Planar Binding] - Imp (Evil), Slaad Red (Neutral), Lantern Archon (Good) - - Other: - [Greater Shadow Conjuration] - Variety of spells, illision based. - [Lesser Mind Blank] - Protection VS mind spells and rids bad mind things. - [Raise Dead] - Raises a dead person :-) - [Awaken] - Helps animal companion greatly. -S [Owl's Insight] - + Half caster level in wisdom. -H [Monsterous Regeneration] - +3 Regeneration for CasterLevel/2 + 1. - - We check level 3 dispels here. - - Resistance to fire ETc (energy buffer, elemental resistances) are cast - in the level 6 set. - - Cones breath things too here. - - Giant Hurl Rocks are also here (and some other hurling things) -//::55555555555555555555555555555555555555555555555555555555555555555555555555*/ - - // Jump out if we don't want to cast level 5 spells. - if(nLowestSpellLevel > 5) return FALSE; - - // Monsterous Regeneration if we have 70% or less HP - if(bFirstRunThrough && GlobalOurPercentHP <= 70 && - !GetHasSpellEffect(SPELL_MONSTROUS_REGENERATION)) - { - // Monsterous Regeneration. Level 5 (Cleric/Druid) +3 Regeneration for CasterLevel/2 + 1. - if(AI_ActionCastSpell(SPELL_MONSTROUS_REGENERATION, OBJECT_SELF, 15, FALSE)) return TRUE; - } - - // Spell reistance - feel the vibes :-) Cast above also if mages around, or need spell protections. - if(bFirstRunThrough && !AI_GetAIHaveSpellsEffect(GlobalHasSpellResistanceSpell)) - { - // Spell Resistance. Level 5 (Druid/Cleric) 12 + Caster Level in spell resistance. - if(AI_ActionCastSpell(SPELL_SPELL_RESISTANCE, OBJECT_SELF, 15, FALSE)) return TRUE; - } - - // Dispel level 3 protections (Hastes, regenerates, tensors...) - if(AI_ActionAttemptDispel(3, bRangeMediumValid)) return TRUE; - - // Battletide is not bad. Level 5 (Cleric) - // - Oddly classed under SpellHostAreaDis - if(bFirstRunThrough && !GetHasSpellEffect(SPELL_BATTLETIDE)) - { - // Battletide. Level 5 (Cleric). -2 Attack/Saves/damage to enemies who come in. +2 to same for caster. - if(AI_ActionCastSpell(SPELL_BATTLETIDE, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - - // Giant Hurl Rock - if(bRangeLongValid && GlobalSeenSpell) - { - // Giant Hurl Rock is for d6(HD/5) + Str. Damage. Huge AOE and bludgeoning damage. - if(AI_ActionCastSpell(AI_SPELLABILITY_GIANT_HURL_ROCK, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - - // Battle Boulder Toss - from Campaign, but is an ability too. d6(3)+5 Bud dam. - if(AI_ActionCastSpell(AI_SPELLABILITY_BATTLE_BOULDER_TOSS, GlobalSpellTarget, FALSE, TRUE)) return TRUE; - } - - // Monster cones - these ignore the GlobalNormalSpellsNoEffectLevel toggle. - if(bRangeShortValid) - { - // Small-distance, cone-based spell. - // - Take it as no level, and no save. These scale up with the HD of the - // monster, so on average should be used all the time. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 11.0, FALSE, SAVING_THROW_ALL, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 50% for each. - if(GetIsObjectValid(oAOE)) - { - // Cones - // Uses the AOE object for cone of cold. - // These are the "Cones". Appropriate to put it here, don'tca think? - for(nCnt = SPELLABILITY_CONE_ACID; nCnt <= SPELLABILITY_CONE_SONIC; nCnt++) - { - if(AI_ActionCastSpellRandom(nCnt, 40, oAOE, FALSE, TRUE)) return TRUE; - } - if(AI_ActionCastSpellRandom(SPELLABILITY_HELL_HOUND_FIREBREATH, 40, oAOE, FALSE, TRUE)) return TRUE; - } - } - - - // Mind fog cast here, lower prioritory, if the spell target has high will. - // Long range. - if(bRangeLongValid && (GlobalSpellTargetWill / 2 >= GlobalSpellAbilityModifier)) - { - // Mind Fog. Level 5 (Mage/Bard) - Minus 10 to all will saves within the AOE. - if(AI_ActionCastSpell(SPELL_MIND_BLANK, GlobalSpellTarget, 15, TRUE)) return TRUE; - } - - // Feeblemind is Good if in medium range, and is a mage :-) - if(bRangeMediumValid && GlobalSeenSpell && - GetLevelByClass(CLASS_TYPE_WIZARD, GlobalSpellTarget) >= GlobalOurHitDice/4) - { - // Feeblemind. Level 5 (Mage) 1d4/4 caster levels in intelligence decrease, if fail will save. - if(AI_ActionCastSpell(SPELL_FEEBLEMIND, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Randomise one of the many level 5 spells. -// AOE: -// [Cloudkill] - Acid damage, and kills level 7s or below. AOE. -// [Cone of Cold] - Cone of damage, up to 15d6 to those in the cone. Reflex for none. -// [Firebrand] - Missile storm - hits enemies up to caster level (max 15) for 1d6 fire reflex damage. -// [Circle of Doom] - 1d8 + 1/caster level in negative damage -// [Flame Strike] - Up to 15d6 in Fire + Divine damage. Reflex based. Medium area. -// [Ball Lightning] - 1d6/missile, to 15 missiles. Reflex based. Cast at singal target (like missile storms) -// Single: -// [Bigby's Interposing Hand] -10 to hit for 1 target. -// [Hold Monster] - Paralyze's an enemy monster (any race) -// [Slay Living] - Touch attack + Fortitude Save, creature dies, else d6(3) negative damage. -// [Inferno] - 2d6 Fire damage/round like acid arrow. No save, only SR. - - // Is it best to target with single-target spells first? Some pretty - // good level 5 spells - Hold monster and Slay Living are useful :-) - // 60-70% if favourable. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 5) - { - // Slay living. 60% chance to cast - it is a touch spell. - if(bRangeTouchValid && !AI_CompareTimeStopStored(SPELL_SLAY_LIVING) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 5)) - { - // Slay Living. Level 5 (Cleric). Touch attack + Fortitude Save, creature dies, else d6(3) negative damage. - if(AI_ActionCastSpellRandom(SPELL_SLAY_LIVING, 50, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Hold monster - Paralyze's an enemy monster (any race) - // Decent enough, if not stunned already - 60% - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_HOLD_MONSTER) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 5)) - { - // Hold monster - Paralyze's an enemy monster (any race) - if(AI_ActionCastSpellRandom(SPELL_HOLD_MONSTER, 50, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Inferno - the Druids Acid Arrow (more damage, however, each round). - // ---- No save!! - if(bRangeShortValid && !GetHasSpellEffect(SPELL_INFERNO)) - { - // Inferno. Level 5 (Druid) 2d6 Fire damage/round like acid arrow. No save, only SR. - if(AI_ActionCastSpellRandom(SPELL_INFERNO, 50, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Bigby's Interposing Hand. No save, only SR. -10 attack rolls for them - // is good if they have highish BAB. Check here. - // (Count as stun for immunity - that is anyting that stops them moving (daze included)) - // - Should affect mind-immune people. Bioware will fix this, been told. No mind check - if(bRangeLongValid && !AI_CompareTimeStopStored(SPELL_BIGBYS_INTERPOSING_HAND) && - !GetHasSpellEffect(SPELL_BIGBYS_INTERPOSING_HAND, GlobalSpellTarget) && - GetBaseAttackBonus(GlobalSpellTarget) >= GlobalOurHitDice/2) - { - // Bigby's Interposing Hand. Level 5 (Mage) No save, only SR. -10 attack rolls for target - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_INTERPOSING_HAND, 50, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } -// AOE: -// [Cloudkill] - Acid damage, and kills level 7s or below. AOE. -// [Cone of Cold] - Cone of damage, up to 15d6 to those in the cone. Reflex for none. -// [Firebrand] - Missile storm - hits enemies up to caster level (max 15) for 1d6 fire reflex damage. -// [Circle of Doom] - 1d8 + 1/caster level in negative damage -// [Flame Strike] - Up to 15d6 in Fire + Divine damage. Reflex based. Medium area. -// [Ball Lightning] - 1d6/missile, to 15 missiles. Reflex based. Cast at singal target (like missile storms) - - // Firebrand - good, because it hits only enemies (up to 15! thats plenty) - // and 1d6 damage each. Mainly, it doesn't hit allies :-D - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_FIREBRAND) && - GetHasSpell(SPELL_FIREBRAND)) - { - // 20M medium range, colossal area. Reflex save - doesn't hit allies too. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_COLOSSAL, 5, SAVING_THROW_REFLEX); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Firebrand Level 5 (Mage) Missile storm - hits enemies up to caster level (max 15) for 1d6 fire reflex damage. - if(AI_ActionCastSpellRandom(SPELL_FIREBRAND, 50, oAOE, 15, TRUE)) return TRUE; - } - } - // Ball lightning - Medium spell, and missile storm. We cast this at the target. - if(bRangeMediumValid && GlobalSeenSpell && - !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 5)) - { - // Ball Lightning. Level 5 (Mage) 1d6/missile, to 15 missiles. Reflex based. Cast at singal target (like missile storms) - if(AI_ActionCastSpellRandom(SPELL_BALL_LIGHTNING, 40, oAOE, 15, TRUE)) return TRUE; - } - - // (Shades) Cone of Cold. Later patches lets Shades hit allies (grr) - if(bRangeShortValid && - (GetHasSpell(SPELL_SHADES_CONE_OF_COLD) || GetHasSpell(SPELL_CONE_OF_COLD))) - { - // Small-distance, cone-based spell. Reflex save - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 11.0, 5, SAVING_THROW_REFLEX, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 100% chance of casting (Can't be bothered to create a special random version of SubSpell) - if(GetIsObjectValid(oAOE)) - { - // Shades Cone of Cold. Level 7 (Mage). Cone of damage, up to 15d6 to those in the cone. Reflex for none. - if(AI_ActionCastSpell(SPELL_SHADES_CONE_OF_COLD, oAOE, 17, TRUE, TRUE)) return TRUE; - - // Cone of Cold. Level 5 (Mage). Cone of damage, up to 15d6 to those in the cone. Reflex for none. - if(AI_ActionCastSpellRandom(SPELL_CONE_OF_COLD, 40, oAOE, 15, TRUE)) return TRUE; - } - } - // Flame Strike - Up to 15d6 in Fire + Divine damage. Reflex based. Medium area. - if(bRangeMediumValid && GetHasSpell(SPELL_FLAME_STRIKE)) - { - // Small-distance, cone-based spell. Reflex save - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_MEDIUM, 5, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Flame Strike. Level 5 (Cleric) Up to 15d6 in Fire + Divine damage. Reflex based. Medium area. - if(AI_ActionCastSpellRandom(SPELL_FLAME_STRIKE, 40, oAOE, 15, TRUE)) return TRUE; - } - } - // Circle of Doom - 1d8 + 1/caster level in negative damage - if(bRangeMediumValid && GetHasSpell(SPELL_CIRCLE_OF_DOOM)) - { - // Shpere, medium and reflex save. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_MEDIUM, 5, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Circle of Doom. Level 5 (Cleric) 1d8 + 1/caster level in negative damage - if(AI_ActionCastSpellRandom(SPELL_CIRCLE_OF_DOOM, 40, oAOE, 15, TRUE)) return TRUE; - } - } - // Cloudkill. Acid damage, and kills level 7s or below. AOE. Quite good persistant damage. - if(bRangeLongValid && GetHasSpell(SPELL_CLOUDKILL)) - { - // No save (fortitude only halfs damage) but large (5M across) AOE - and long range - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_LARGE, 5, FALSE, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Cloudkill. Level 5 (Mage) Acid damage, and kills level 7s or below. AOE. Quite good persistant damage. - if(AI_ActionCastSpellRandom(SPELL_CLOUDKILL, 40, oAOE, 15, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 5 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 5 && - (GlobalOurHitDice <= 14 || GlobalMeleeAttackers <= 2)) - { - // Summon Monster V (5). Level 5 (Most classes) Dire Bear - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_V, 15, 5)) return TRUE; - // Lesser Planar Binding. Level 5 (Mage). Summons Imp (Evil), Slaad Red (Neutral), Lantern Archon (Good) - if(AI_ActionCastSummonSpell(SPELL_LESSER_PLANAR_BINDING, 15, 5)) return TRUE; - } - - // Single spells again. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 5) - { - // Slay living. 60% chance to cast - it is a touch spell. - if(bRangeTouchValid && !AI_CompareTimeStopStored(SPELL_SLAY_LIVING) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 5)) - { - // Slay Living. Level 5 (Cleric). Touch attack + Fortitude Save, creature dies, else d6(3) negative damage. - if(AI_ActionCastSpellRandom(SPELL_SLAY_LIVING, 30, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Hold monster - Paralyze's an enemy monster (any race) - // Decent enough, if not stunned already - 60% - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_HOLD_MONSTER) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 5)) - { - // Hold monster - Paralyze's an enemy monster (any race) - if(AI_ActionCastSpellRandom(SPELL_HOLD_MONSTER, 20, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Inferno - the Druids Acid Arrow (more damage, however, each round). - // ---- No save!! - if(bRangeShortValid) - { - // Inferno. Level 5 (Druid) 2d6 Fire damage/round like acid arrow. No save, only SR. - if(AI_ActionCastSpellRandom(SPELL_INFERNO, 20, GlobalSpellTarget, 15, FALSE)) return TRUE; - } - // Bigby's Interposing Hand. No save, only SR. -10 attack rolls for them - // is good if they have highish BAB. Check here. - // (Count as stun for immunity - that is anyting that stops them moving (daze included)) - // - Should affect mind-immune people. Bioware will fix this, been told. No mind check - if(bRangeLongValid && !AI_CompareTimeStopStored(SPELL_BIGBYS_INTERPOSING_HAND) && - !GetHasSpellEffect(SPELL_BIGBYS_INTERPOSING_HAND, GlobalSpellTarget) && - GetBaseAttackBonus(GlobalSpellTarget) >= GlobalOurHitDice/2) - { - // Bigby's Interposing Hand. Level 5 (Mage) No save, only SR. -10 attack rolls for target - if(AI_ActionCastSpellRandom(SPELL_BIGBYS_INTERPOSING_HAND, 20, GlobalSpellTarget, 16, FALSE)) return TRUE; - } - } - - // Pass random spell not cast, but have, here. - if(AI_ActionCastBackupRandomSpell()) return TRUE; - -/*::4444444444444444444444444444444444444444444444444444444444444444444444444444 - Level 4 Spells. -//::4444444444444444444444444444444444444444444444444444444444444444444444444444 - Thoughts -Quite a few decent enough spells here. Nothing to catch your eye, - except maybe the overused Ice Storm or Wall of Fire. hammer of the gods - is a good clerical AOE spell and phantasmal killer is probably the first - Instant-death spells (but requires 2 save"1"). - - AOE: - [Confusion] - confuse people Vs Mind Will in an area. - [Evard's Black Tentacles] - Rolls VS - [Fear] - Save VS mind will or fear, in an area. - [Ice Storm] - 2d6 (Blud) + 3d6 / 3 caster levels (cold) damage. No save! -S [Isaac's Lesser Missile Storm] - 1d6 per each 1-10 missile divided around enemies in AOE. - [Wall of Fire] - 4d6 fire reflex damage in a retangle persistant AOE - [Hammer of the Gods] - divine damage d8(half caster level) to 5. Can Daze. Will save. - [War Cry] Will save or fear (like a howl) and all allies get +2 attack/damage - - Single: - [Bestow Curse] - Curse = -2 in all stats against a fortitude save. - [Charm Monster] - Charm a single monster (any race) VS will and mind - [Contagion] - Disease (Static DC!) if fail fortitude save - [Enervation] - 1d4 negative levels, fortitude save - [Phantasmal Killer] Will save (Illusion) then fort save, or death. -S [Inflict Critical Wounds] - 3d8 + 1/caster level to +20, in negative energy. - [Poison] - Inflicts poison (sadly, static fortitude save) - - X [Lesser Spell Breach] - Breach an amount of spell protections and lowers SR. - - Defender: - [Elemental Shield] +50% Cold/Fire resistance. 1d6 + Caster level reflected damage to melee attackers. - X [Improved Invisibility] +50% consealment, invisiblity (unseen) until hostile action. Cast above to at least conseal - [Minor Globe of Invulnerability] - 0/1/2/3 level hostile spells immune to. - [Stoneskin] - 10/+5 DR. We cast this here, sorceror behavnOur and backup for greater stoneskin - [Death Ward] - Death Immunity - death magic. - - Summon: - [Summon Creature IV (4)] Summons a Dire Spider - - Other: - X [Polymorph Self] - Troll, umber Hulk, Pixie, Zombie, Giant spider. Cast after spells to fight. - X [Shadow Conjuration] - Shadow spells. - [Cure Critical Wounds] - Cures wounds - X [Divine Power] + Temp HP, +BAB, +Strength to 18. Done before melee - [Freedom of Movement] - Slowing removed. Immunity to slowing effects and stuff. - [Neutralize Poison] - Rids poison - [Restoration] - Restores lost statistics -S [Mass Camouflage] +10 Hide -H X [Holy Sword] - Paladins sword gains the "Holy Avenger" property - +1d6 divine, +5 enchant, 25% dispel. -//::44444444444444444444444444444444444444444444444444444444444444444444444444*/ - - // Jump out if we don't want to cast level 4 spells. - if(nLowestSpellLevel > 4) return FALSE; - - if(bFirstRunThrough) - { - // Cast normal stoneskin to prepare for greater stoneskin going down. - // as par greater stoneskin, we must also have used level 5, 6, 7 8 and 9 spells - // anyway! That, and this is good for sorcerors. - if(!GetHasSpellEffect(SPELL_STONESKIN) && !GetHasSpellEffect(SPELL_SHADES_STONESKIN)) - { - // Shades stoneskin. SPELL_SHADES_STONESKIN (Cast via. subspell) - if(AI_ActionCastSpell(SPELL_SHADES_STONESKIN, OBJECT_SELF, 16, FALSE, TRUE)) return TRUE; - - // Stoneskin. Level 4 (Mage) 5 (Druid) 10/+5 phisical damage reduction - if(AI_ActionCastSpell(SPELL_STONESKIN, OBJECT_SELF, 14, FALSE)) return TRUE; - } - - // Check for Arcane Archer feats here - if(GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER)) - { - // Arrow of death. DC20 or die. - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_ARROW_OF_DEATH, SPELLABILITY_AA_ARROW_OF_DEATH, GlobalSpellTarget)) return TRUE; - // Fireball arrow - won't harm allies - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_IMBUE_ARROW, SPELLABILITY_AA_IMBUE_ARROW, GlobalSpellTarget)) return TRUE; - // Seeker Arrow is cool - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_SEEKER_ARROW_2, SPELLABILITY_AA_SEEKER_ARROW_2, GlobalSpellTarget)) return TRUE; - // Hail of arrows is neat - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_HAIL_OF_ARROWS, SPELLABILITY_AA_HAIL_OF_ARROWS, GlobalSpellTarget)) return TRUE; - // Seeker Arrow is cool - if(AI_ActionUseSpellLikeFeat(FEAT_PRESTIGE_SEEKER_ARROW_1, SPELLABILITY_AA_SEEKER_ARROW_1, GlobalSpellTarget)) return TRUE; - } - - // Elemental Shield is a good spell - reflected damage. It is normally - // cast above with more melee attackers. Here by backup. Shield-based spell - // (EffectDamageShield()) - - // Elemental Shield. Level 5 (Mage) +50% Cold/Fire resistance. 1d6 + Caster level reflected damage to melee attackers. - // (Use this but with Input 4) - if(AI_SpellWrapperShieldProtections(4)) return TRUE; - - // Minor globe backup casting. - if(AI_SpellWrapperGlobeProtections(nLowestSpellLevel)) return TRUE; - - // Not bad, immunity to death/ - // - Might add in opposing casting if they start casting death spells. - if(!AI_GetAIHaveSpellsEffect(GlobalHasDeathWardSpell)) - { - // Death Ward. Level 4 (Cleric/Paladin) 5 (Druid). Immunity to death (Death-based spells nromally, like Wail). - if(AI_ActionCastSpell(SPELL_DEATH_WARD, OBJECT_SELF, 14, FALSE)) return TRUE; - } - - // Some lower end ally buffs - - // Spell Resistance. - if(AI_ActionCastAllyBuffSpell(10.0, 60, SPELL_SPELL_RESISTANCE)) return TRUE; - - if(GetBaseAttackBonus(GlobalSpellTarget) < GlobalSpellTargetHitDice - 2) - { - // Death Ward if we can see an enemy spellcaster. - if(AI_ActionCastAllyBuffSpell(10.0, 60, SPELL_DEATH_WARD)) return TRUE; - } - } - - // BAB check - // - BAB checks check our BASE attack bonus, no modifiers. Basically, as - // normally even mages have a +X to attack, this provides a good indicator - // if we are going to easy, or very easily, hit the enemy. - // - Clerics, Druids and Bards must be able to hit even better then normal. - if(bFirstRunThrough && !SRA && - GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // If a druid, cleric, and so on, have to be able to hit better then - // more then normal - if(GlobalOurChosenClass == CLASS_TYPE_CLERIC || - GlobalOurChosenClass == CLASS_TYPE_DRUID || - GlobalOurChosenClass == CLASS_TYPE_BARD) - { - // BAB check for level 4 spells. - if(GlobalOurBaseAttackBonus - 5 >= GlobalMeleeTargetAC) return FALSE; - } - // Demons, fighters, anything else really. - else - { - // BAB check for level 4 spells. - if(GlobalOurBaseAttackBonus >= GlobalMeleeTargetAC) return FALSE; - } - } - - // Hostile spells -// Single: -// [Enervation] - 1d4 negative levels, fortitude save -// [Phantasmal Killer] Will save (Illusion) then fort save, or death. - -// [Poison] - Inflicts poison (sadly, static fortitude save) -// [Bestow Curse] - Curse = -2 in all stats against a fortitude save. -// [Charm Monster] - Charm a single monster (any race) VS will and mind -// [Contagion] - Disease (Static DC!) if fail fortitude save - - // Is it best to target with single-target spells first? - // Inflict critical, as well as some others, are quite powerful for level 3. - // 60-70% if favourable. - // - We don't cast Bestow Curse, Charm Monster, Poison, or Contagion above - // AOE spells. We cast critical wounds only at the very end. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 4 && - // All level 4, all fort saves - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 4)) - { - // Phantismal Killer. Will and Fortitude save VS death. :-) - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_PHANTASMAL_KILLER) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 4)) - { - // Phantasmal Killer. Level 4 (Mage). Will save (Illusion) then fort save, or death. - if(AI_ActionCastSpellRandom(SPELL_PHANTASMAL_KILLER, 50, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Enervation. 1d4 negative levels. Short range - if(bRangeMediumValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Enervation. Level 4 (Mage). 1d4 negative levels, fortitude save - if(AI_ActionCastSpellRandom(SPELL_ENERVATION, 40, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - -// AOE: -// [Confusion] - confuse people Vs Mind Will in an area. -// [Evard's Black Tentacles] - Rolls VS AC and damage 1-5 lots of 2d6 blud. -// [Fear] - Save VS mind will or fear, in an area. -// [Ice Storm] - 2d6 (Blud) + 3d6 / 3 caster levels (cold) damage. No save! -// [Isaac's Lesser Missile Storm] - 1d6 per each 1-10 missile divided around enemies in AOE. -// [Wall of Fire] - 4d6 fire reflex damage in a retangle persistant AOE -// [Hammer of the Gods] - divine damage d8(half caster level) to 5. Can Daze. Will save. -// [War Cry] Will save or fear (like a howl) and all allies get +2 attack/damage - - if(GlobalNormalSpellsNoEffectLevel < 4) - { - if(bRangeLongValid && GlobalSeenSpell) - { - // Lesser missile storm. 1d6/missile. 1-10 missiles basically. Enemies only! - // Just cast at the enemy. - // Isaac's Lesser Missile Storm. Level 4 (Mage) 1d6 per each 1-10 missile divided around enemies in AOE. - if(AI_ActionCastSpellRandom(SPELL_ISAACS_LESSER_MISSILE_STORM, 70, GlobalSpellTarget, 14, TRUE)) return TRUE; - } - - // War cry here. No need to check if they run off - helps allies. - if(GlobalSpellTargetRange <= RADIUS_SIZE_COLOSSAL) - { - // War Cry. Level 4 (Bard) Will save or fear (like a howl) and all allies get +2 attack/damage - if(AI_ActionCastSpellRandom(SPELL_WAR_CRY, 30, OBJECT_SELF, 14, TRUE)) return TRUE; - } - } - - // Ice storm. plenty of damage :-) - if(bRangeLongValid && GetHasSpell(SPELL_ICE_STORM)) - { - // Shpere, huge and no save :-) - long range too. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_HUGE, 4, FALSE, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Ice Storm. Level 4 (Mage) 5 (Druid) 6 (Bard) - 2d6 (Blud) + 3d6 / 3 caster levels (cold) damage. No save! - if(AI_ActionCastSpellRandom(SPELL_ICE_STORM, 50, oAOE, 14, TRUE)) return TRUE; - } - } - // Confusion - confusion! Decent especially against PC's. - if(bRangeMediumValid && GetHasSpell(SPELL_CONFUSION)) - { - // Shpere, huge and no save :-) - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 4, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireHostile); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Ice Storm. Level 4 (Mage) 5 (Druid) 6 (Bard) - 2d6 (Blud) + 3d6 / 3 caster levels (cold) damage. No save! - if(AI_ActionCastSpellRandom(SPELL_CONFUSION, 50, oAOE, 14, TRUE)) return TRUE; - } - } - // Hammer of the Gods. Divine damage is good, as well as save VS daze. - if(bRangeMediumValid && GetHasSpell(SPELL_HAMMER_OF_THE_GODS)) - { - // Shpere, no friends affected, we cast even if saves VS will. :-) - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 4); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Hammer of the Gods. Level 4 (Cleric). Divine damage d8(half caster level) to 5d8. Can Daze. Will save. - if(AI_ActionCastSpellRandom(SPELL_HAMMER_OF_THE_GODS, 40, oAOE, 14, TRUE)) return TRUE; - } - } - // Fear - fear! - if(bRangeMediumValid && GetHasSpell(SPELL_FEAR)) - { - // Shpere, no friends affected, we cast even if saves VS will. :-) - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 4, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireHostile); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Fear. Level 4 (Mage) 3 (Bard). Save VS mind will or fear, in an area. - if(AI_ActionCastSpellRandom(SPELL_FEAR, 40, oAOE, 14, TRUE)) return TRUE; - } - } - // Wall of Fire. - if(bRangeMediumValid && - (GetHasSpell(SPELL_WALL_OF_FIRE) || GetHasSpell(SPELL_SHADES_WALL_OF_FIRE))) - { - // Ok, retangle. Take it as a medium sized sphere. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_MEDIUM, 4, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Shades version. Cast as subspell. - if(AI_ActionCastSpell(SPELL_SHADES_WALL_OF_FIRE, oAOE, 14, TRUE, TRUE)) return TRUE; - - // Wall of Fire. Level 4 (Mage) 5 (Druid) 4d6 fire reflex damage in a retangle persistant AOE - if(AI_ActionCastSpellRandom(SPELL_WALL_OF_FIRE, 40, oAOE, 14, TRUE)) return TRUE; - } - } - // Evard's Black Tentacles. AC attack and damage (fort or paralysis on enter) - // Casts if average HD is under 10 - if(bRangeMediumValid && GlobalAverageEnemyHD <= 10 && - GetHasSpell(SPELL_EVARDS_BLACK_TENTACLES)) - { - // 5M sized AOE spell, medium range. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 4, FALSE, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 40% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Evard's Black Tentacles. Level 4 (Mage) AC attack and damage (2d6 x 1-5 hits) (fort or paralysis on enter) - if(AI_ActionCastSpellRandom(SPELL_EVARDS_BLACK_TENTACLES, 30, oAOE, 14, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 4 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 4 && - (GlobalOurHitDice <= 12 || GlobalMeleeAttackers <= 2)) - { - // Summon Monster IV (4). Level 4 (Most classes) Summons a Dire Spider - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_IV, 14, 4)) return TRUE; - } - -// [Enervation] - 1d4 negative levels, fortitude save -// [Phantasmal Killer] Will save (Illusion) then fort save, or death. -// [Inflict Critical Wounds] - 3d8 + 1/caster level to +20, in negative energy. - -// [Poison] - Inflicts poison (sadly, static fortitude save) -// [Bestow Curse] - Curse = -2 in all stats against a fortitude save. -// [Charm Monster] - Charm a single monster (any race) VS will and mind -// [Contagion] - Disease (Static DC!) if fail fortitude save - - // All single target spells, even poison and so on. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 4) - { - // All but charm are fortitude based. - if(!AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 4)) - { - // Phantismal Killer. Will and Fortitude save VS death. :-) - if(bRangeMediumValid && !AI_CompareTimeStopStored(SPELL_PHANTASMAL_KILLER) && - !AI_GetSpellTargetImmunity(GlobalImmunityDeath) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 4)) - { - // Phantasmal Killer. Level 4 (Mage). Will save (Illusion) then fort save, or death. - if(AI_ActionCastSpellRandom(SPELL_PHANTASMAL_KILLER, 50, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Enervation. 1d4 negative levels. Short range - if(bRangeMediumValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Enervation. Level 4 (Mage). 1d4 negative levels, fortitude save - if(AI_ActionCastSpellRandom(SPELL_ENERVATION, 40, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Contagion. Disease! Quite good, but still check spell save DC at fort above. - // Necromancy. - if(bRangeTouchValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityDisease)) - { - // Blackguard Ability - if(AI_ActionUseSpellLikeFeat(FEAT_CONTAGION, SPELLABILITY_BG_CONTAGION, GlobalMeleeTarget)) return TRUE; - - // Contagion. Level 4 (Mage) 3 (Cleric/Bard). Random disease (Set DC's!) against a fortitude saving throw. - if(AI_ActionCastSpellRandom(SPELL_CONTAGION, 40, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Poison - Inflicts poison (sadly, static fortitude save) Necro spell. - if(bRangeTouchValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityPoison)) - { - // Poison. Level 4 (Cleric) 3 (Druid) Large Scorion Venom poison (Set DC!) against a fortitude saving throw. - if(AI_ActionCastSpellRandom(SPELL_POISON, 40, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - // Bestow Curse - Inflicts poison (sadly, static fortitude save) Necro spell. - if(bRangeTouchValid && !AI_GetSpellTargetImmunity(GlobalImmunityCurse)) - { - // Bestow Curse. Level 4 (Mage) 3 (Cleric/Bard) -2 to all stats VS Fortitude save. - if(AI_ActionCastSpellRandom(SPELL_BESTOW_CURSE, 40, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - } - // Charm Monster. Charms any monster. Will save, mind based. - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind) && bRangeShortValid && - !AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 4)) - { - // Charm Monster. Level 4 (mage) 3 (Bard). Charm any monster, will save to resist. - if(AI_ActionCastSpellRandom(SPELL_CHARM_MONSTER, 30, GlobalSpellTarget, 14, FALSE)) return TRUE; - } - } - - // Backup cast anything we didn't choose to before - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Critical wounds - damage at a touch attack. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 4 && bRangeTouchValid) - { - // Cast Cure Critical Wounds (Which acts the same way for undead as - // inflict critical does) - if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD) - { - // Cure Critical Wounds. Level 4 (Cleric) 3d8 + 1/caster level to +20, in positive energy. - if(AI_ActionCastSpontaeousSpell(SPELL_CURE_CRITICAL_WOUNDS, GlobalSpellTarget)) return TRUE; - } - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Blackguard ability - if(AI_ActionUseSpellLikeFeat(FEAT_INFLICT_CRITICAL_WOUNDS, SPELLABILITY_BG_INFLICT_CRITICAL_WOUNDS, GlobalSpellTarget)) return TRUE; - - // Inflict Critical Wounds. Level 4 (Cleric) 3d8 + 1/caster level to +20, in negative energy. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_CRITICAL_WOUNDS, GlobalSpellTarget)) return TRUE; - } - } - -/*::3333333333333333333333333333333333333333333333333333333333333333333333333333 - Level 3 Spells. -//::3333333333333333333333333333333333333333333333333333333333333333333333333333 - Thoughts - This is a level where mages pick up - IE fireball! Many decent AOE - and single-target spells, which scale up pretty well for mid and high level - casters. Also dispels level 2 protections before other things. - - AOE: - [Fireball] - THE ONE SPELL TO RULE THEM ALL! - ok, basically the 1 D&D spell - which is most famous - and frequently the last word a mage says before it kills him! - up to 10d6 reflex fire damage, in a large AOE hit area. Allies are hit too! (as we all know...) -S [Gust of Wind] Knockdown enemies VS reflex. Main thing is Dispeling AOE's, and 1 is always kept in reserve. - [Lightning Bolt] An "oh, other spell" to fireball. Does a different damage type. can be more useful - different shape! Can't hit caster! 10d6 reflex electrical - [Negative Energy Burst] 1d8 + 1-20 (caster level) negative damage, and -1 STR/4 caster levels. Heals undead. - [Slow] -50% speed, -1 Attack, -4 AC (I think) to those in an AOE - doesn't hit allies. - [Stinking Cloud] - Dazes those in the AOE, if fail VS will. - [Call Lightning] - Lightning damage - To 10d6 reflex electrical. Never hits allies. Smaller AOE then fireball -S [Spike Growth] - Damage to those in the AOE, and slow for 24 Hours! -H [Mestals Acid Breath] - A cone of up to 10d6 (acid) damage. Reflex save. -H [Scintillating Sphere] - Explosion of up to 10d6 Damage (Electical) - An electiric fireball (reflex save) -H [Glyph of Warding] - AOE, if entered, does up to 1d6/2 caster levels (to 5d6) damage. - - [Dispel Magic] - Dispels all magic (at a max of +10 check) or 1 from all in AOE - - Single: - [Flame Arrow] 4d6 Reflex Fire Damage for each missile - 1/4 caster levels. - [Hold Person] Paralyze's 1 humanoid target (Playable Race/humanoid), if they fail a will save. - [Vampiric Touch] 1d6(caster level/2) in negative damage, heals us with temp HP. - [Dominate Animal] Dominates an animal only. Will save. -S [Quillfire] 1 quill at 1d8 + 1-5 damage. Scorpion poison too. - [Searing Light] Maxs of 10d6 to undead, 5d8 to others, 5d6 to constructs. Divine damage. Done above (way above) VS undead -S [Inflict Serious Wounds] - Touch attack, hit means 3d8 + 1-15 damage. -H [Healing Sting] - 1d6 + 1/Caster evel damage, and healed for that amount. Fort save for none. -H [Infestation of Maggots] - 1d4 Temp constitution damage/round. (1 round/caster level) - - Defender: -S X [Displacement] - 50% consealment. Cast above to conseal ourselves sooner (50% missing is good! stoneskin lasts twice as long!) - [Magic Circle Against Alignment] +AC, +mind immunity etc. In a persistant AOE around caster. - X [Protection From Elements] 30/- elemental protection, until 40 damage. - [Negative Energy Protection] Immunity to negative energy -S [Wounding Whispers] 1d6 + Caster level in refelected sonic damage. -H [Magical Vestment] - Gives 1 suit of armor/shield a +1 AC bonus/3 caster levels (to +5) - - Summon: - [Animate Dead] - Skeleton or zomie summon. Tough DR, long lasting, but hard to heal. - [Summon Creature III] - Summons a Dire Wolf. - - Other: - X [Clairaudience/Clairvoyance] +20 spot. - [Clarity] - Mind resistance, clears hostile mind effects. -XXXX[Find Traps] - Finds and disarms traps. Never cast - unless I add it for PC traps. - X [Haste] +1 action. +4 AC. +150% speed. Good spell, cast right near top for maximum effect. - X [Invisibility Sphere] - Allies in area become invisible. Cast above (nearly first spell!) if want to go invis. -S [Greater Magic Fang] - Helps animal companion a lot :-) - X [Cure Serious Wounds] 3d8 + 1-15 damage healed. - X [Invisibility Purge] - AOE around us which removes Invisiblity effects. Cast as special - X [Prayer] +HP, +Attack +Damage for one person. Cast just before melee - X [Remove Blindness/Deafness] - Removes blindness and deafness! - X [Remove Curse] - " " curse - X [Remove Disease] - " " Disease -H X [Greater Magical Weapon] - Up to +5 enchantment for weapon (cast before melee) -H X [Keen Edge] - Keens a weapon. -H X [Blade Thirst] - +3 enchantment bonus to 1 slashing weapon. -H X [Darkfire] - +1d6 + 1/caster level (to +10) in fire damage applied to non-magic weapon. - - Dispels all level 2 protections here. - - Bolts cast here. -//::33333333333333333333333333333333333333333333333333333333333333333333333333*/ - - // Jump out if we don't want to cast level 3 spells. - if(nLowestSpellLevel > 3) return FALSE; - - // Dispel level 2 protections (Hastes, regenerates, tensors...) - if(AI_ActionAttemptDispel(2, bRangeMediumValid)) return TRUE; - - if(bFirstRunThrough) - { - // Greater magic fang - oAOE = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION); - if(GetIsObjectValid(oAOE) && !GetHasSpellEffect(SPELL_GREATER_MAGIC_FANG, oAOE)) - { - // Greater MAgic fang. Level 3 (Ranger/Druid) +Attack, +DR to animal companion - if(AI_ActionCastSpell(SPELL_GREATER_MAGIC_FANG, oAOE, 13, FALSE)) return TRUE; - } - - // Divine Shield - a feat, but a damn good one. - // Up to +5 Dodge AC. - if(GetHasFeat(FEAT_TURN_UNDEAD)) - { - // Divine Shield - if(AI_ActionUseSpellLikeFeat(FEAT_DIVINE_SHIELD, SPELL_DIVINE_SHIELD)) return TRUE; - } - - // Magical vestment - this adds up to +5 AC to armor or shield! - // - Affects only our equipped armor. - oAOE = GetItemInSlot(INVENTORY_SLOT_CHEST); - // Makes sure it is valid - if(GetIsObjectValid(oAOE) && !GetHasSpellEffect(SPELL_MAGIC_VESTMENT)) - { - // Cast it at the armor - // Magical Vestment. Level 3 (Cleric) Gives 1 suit of armor/shield a +1 AC bonus/3 caster levels (to +5) - if(AI_ActionCastSpell(SPELL_MAGIC_VESTMENT, oAOE, 13, FALSE)) return TRUE; - } - - // Regenerations - if(AI_ActionCastAllyBuffSpell(10.0, 50, SPELL_REGENERATE, SPELL_MONSTROUS_REGENERATION)) return TRUE; - - // Bulls Strength, Cats Grace, Endurance - if(AI_ActionCastAllyBuffSpell(10.0, 50, SPELL_ENDURANCE, SPELL_CATS_GRACE, SPELL_ENDURANCE, -1, SPELL_GREATER_BULLS_STRENGTH, SPELL_GREATER_CATS_GRACE)) return TRUE; - } - - // BAB check - // - BAB checks check our BASE attack bonus, no modifiers. Basically, as - // normally even mages have a +X to attack, this provides a good indicator - // if we are going to easy, or very easily, hit the enemy. - // - Clerics, Druids and Bards must be able to hit even better then normal. - if(bFirstRunThrough && !SRA && - GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // If a druid, cleric, and so on, have to be able to hit better then - // more then normal - if(GlobalOurChosenClass == CLASS_TYPE_CLERIC || - GlobalOurChosenClass == CLASS_TYPE_DRUID || - GlobalOurChosenClass == CLASS_TYPE_BARD) - { - // BAB check for level 3 spells. - // Must be able to hit them 100% of the time. - if(GlobalOurBaseAttackBonus >= GlobalMeleeTargetAC) return FALSE; - } - // Demons, fighters, anything else really. - else - { - // BAB check for level 3 spells. - // 75% chance of hitting them outright. - if(GlobalOurBaseAttackBonus + 5 >= GlobalMeleeTargetAC) return FALSE; - } - } - - // Bolts 80% chance. Not too good, but oh well. - if(GlobalSeenSpell && bRangeMediumValid && d10() <= 8) - { - // All ability Draining Bolts. All creature, so no limits. - if(GetAbilityScore(GlobalSpellTarget, ABILITY_DEXTERITY) >= 10) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_DEXTERITY, 30, GlobalSpellTarget)) return TRUE; - if(GetAbilityScore(GlobalSpellTarget, ABILITY_WISDOM) >= 12) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_WISDOM, 30, GlobalSpellTarget)) return TRUE; - if(GetAbilityScore(GlobalSpellTarget, ABILITY_CONSTITUTION) >= 12) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_CONSTITUTION, 30, GlobalSpellTarget)) return TRUE; - if(GetAbilityScore(GlobalSpellTarget, ABILITY_STRENGTH) >= 12) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_STRENGTH, 30, GlobalSpellTarget)) return TRUE; - if(GetAbilityScore(GlobalSpellTarget, ABILITY_CHARISMA) >= 14) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_CHARISMA, 30, GlobalSpellTarget)) return TRUE; - if(GetAbilityScore(GlobalSpellTarget, ABILITY_INTELLIGENCE) >= 14) - if(AI_ActionCastSpellRandom(SPELLABILITY_BOLT_ABILITY_DRAIN_INTELLIGENCE, 30, GlobalSpellTarget)) return TRUE; - // And the damaging bolts/status affecting bolts. - // I really can't be bothered to add in a lot of checks for immunities. - // Might do later. - for(nCnt = SPELLABILITY_BOLT_ACID; nCnt <= SPELLABILITY_BOLT_WEB; nCnt++) - { - if(AI_ActionCastSpellRandom(nCnt, 30, GlobalSpellTarget)) return TRUE; - } - // Manticore spikes - if(AI_ActionCastSpellRandom(SPELLABILITY_MANTICORE_SPIKES, 30, GlobalSpellTarget)) return TRUE; - // Shifter one - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_GWILDSHAPE_SPIKES, 30, GlobalSpellTarget)) return TRUE; - // Azer blast - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_AZER_FIRE_BLAST, 30, GlobalSpellTarget)) return TRUE; - // Shadow attack - if(!GetHasSpellEffect(AI_SPELLABILITY_SHADOW_ATTACK, GlobalSpellTarget)) - { - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_SHADOW_ATTACK, 30, GlobalSpellTarget)) return TRUE; - } - // Petrify last. - if(!AI_GetSpellTargetImmunity(GlobalImmunityPetrify)) - { - if(AI_ActionCastSpellRandom(SPELLABILITY_TOUCH_PETRIFY, 30, GlobalSpellTarget)) return TRUE; - } - - // Backup casting - if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - -// Hostile spells - randomise a bit (remember, some are cast sooner still) - -// Single: -// [Flame Arrow] 4d6 Reflex Fire Damage for each missile - 1/4 caster levels. -// [Hold Person] Paralyze's 1 humanoid target (Playable Race/humanoid), if they fail a will save. -// [Searing Light] Maxs of 10d6 to undead, 5d8 to others, 5d6 to constructs. Divine damage. Done above (way above) VS undead -// [Dominate Animal] Dominates an animal only. Will save. -// [Quillfire] 1 quill at 1d8 + 1-5 damage. Scorpion poison too. -// [Vampiric Touch] 1d6(caster level/2) in negative damage, heals us with temp HP. -// [Healing Sting] - 1d6 + 1/Caster evel damage, and healed for that amount. For save for none. -// [Infestation of Maggots] - 1d4 Temp constitution damage/round. (1 round/caster level) - -// [Inflict Serious Wounds] - Touch attack, hit means 3d8 + 1-15 damage. - - // Is it best to target with single-target spells first? - // Flame arrow, searing light and hold person are quite effective. - // 60-70% if favourable. - // - We don't cast inflict serious wounds here. GetHasSpell bodges with spontaeous spells. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 3) - { - // Flame arrow - not THE best spell, but well worth it. Also it is long range. - if(bRangeLongValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 3)) - { - // Flame Arrow. Level 3 (Mage) 4d6 Reflex Fire Damage for each missile - 1/4 caster levels. - if(AI_ActionCastSpellRandom(SPELL_FLAME_ARROW, 60, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // All others are in medium range or smaller - if(bRangeMediumValid) - { - // Hold Person - must be playable race, of course. Still quite powerful - as it paralyzes. - if(!AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3) && - // 1.4 - Added test for correct race. - (GetIsPlayableRacialType(GlobalSpellTarget) || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_GOBLINOID || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_MONSTROUS || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_ORC || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_REPTILIAN)) - { - // Hold Person. Level 3 (Mage) 2 (Cleric/Bard) Paralyze's 1 humanoid target (Playable Race/humanoid), if they fail a will save. - if(AI_ActionCastSpellRandom(SPELL_HOLD_PERSON, 40, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // Searing light does good type of damage - divine, and is alright damage amount (up to 5d8) and more importantly, no save! - // Searing Light. Level 3 (Cleric). Maxs of 10d6 to undead, 5d8 to others, 5d6 to constructs. Divine damage. Done above (way above) VS undead - if(AI_ActionCastSpellRandom(SPELL_SEARING_LIGHT, 30, GlobalSpellTarget, 13, FALSE)) return TRUE; - // Dominate Animal. Must be an animal, duh! Dominates an animal only. Will save. - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3)) - { - // Dominate Animal. Level 3 (Druid) Dominates an animal only. Will save. - if(AI_ActionCastSpellRandom(SPELL_DOMINATE_ANIMAL, 30, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Quillfire. Poison isn't bad, and a little damage :-) - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3)) - { - // Quillfire. Level 3 (Mage) 1 quill at 1d8 + 1-5 damage. Scorpion poison too. - if(AI_ActionCastSpellRandom(SPELL_QUILLFIRE, 30, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - if(bRangeTouchValid) - { - // These 3 are necromantic - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy)) - { - // Infestation of maggots - lots of CON damage over time. :-) - if(!GetHasSpellEffect(SPELL_INFESTATION_OF_MAGGOTS, GlobalSpellTarget)) - { - // Infestation of Maggots. Level 3 (Druid) 1d4 Temp constitution damage/round. (1 round/caster level) - if(AI_ActionCastSpellRandom(SPELL_INFESTATION_OF_MAGGOTS, 40, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // These 2 are negative energy - if(!AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Healing sting isn't too bad. At least no immunities - // and levels up OK. Negative energy damage, however. - if(!AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 3)) - { - // Healing Sting. Level 3 (Druid). 1d6 + 1/Caster evel damage, and healed for that amount. Fort save for none. - if(AI_ActionCastSpellRandom(SPELL_HEALING_STING, 40, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // Vampiric touch - good spell and scales nicely, and - // heals :-D - // Vampiric Touch. Level 3 (Mage) 1d6(caster level/2) in negative damage, heals us with temp HP. - if(AI_ActionCastSpellRandom(SPELL_VAMPIRIC_TOUCH, 30, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - // AOE spells -// [Fireball] - Up to 10d6 reflex fire damage, in a large AOE hit area. Allies are hit too! (as we all know...) -// [Call Lightning] - Lightning damage - To 10d6 reflex electrical. Never hits allies. Smaller AOE then fireball -// [Lightning Bolt] An "oh, other spell" to fireball. Does a different damage type. can be more useful - different shape! Can't hit caster! 10d6 reflex electrical -// [Slow] -50% speed, -1 Attack, -4 AC (I think) to those in an AOE - doesn't hit allies. -// [Negative Energy Burst] 1d8 + 1-20 (caster level) negative damage, and -1 STR/4 caster levels. Heals undead. -// [Stinking Cloud] - Dazes those in the AOE, if fail VS will. -// [Spike Growth] - Damage to those in the AOE, and slow for 24 Hours! -// [Gust of Wind] Knockdown enemies VS reflex. Main thing is Dispeling AOE's, and 1 is always kept in reserve. -// [Mestals Acid Breath] - A cone of up to 10d6 (acid) damage. Reflex save. -// [Scintillating Sphere] - Explosion of up to 10d6 Damage (Electical) - An electiric fireball (reflex save) -// [Glyph of Warding] - AOE, if entered, does up to 1d6/2 caster levels (to 5d6) damage. - - // Real fireball is hot! (Ban pun there...) - // Scintillating Sphere is also fire-ball like, but electrical damage *shrugs* - if(bRangeLongValid && (GetHasSpell(SPELL_FIREBALL) || - GetHasSpell(SPELL_SCINTILLATING_SPHERE) || GetHasSpell(SPELL_SHADES_FIREBALL))) - { - // Huge, long ranged, reflex based save. Normal = reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_HUGE, 3, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // (Shades) Fireball. Level 7 (Mage) Up to 10d6 reflex fire damage, in a large AOE hit area. Shades now hits allies. - if(AI_ActionCastSpell(SPELL_SHADES_FIREBALL, oAOE, 17, TRUE, TRUE)) return TRUE; - - // Fireball. Level 3 (Mage) Up to 10d6 reflex fire damage, in a large AOE hit area. Allies are hit too! (as we all know...) - if(AI_ActionCastSpellRandom(SPELL_FIREBALL, 60, oAOE, 13, TRUE)) return TRUE; - - // Scintillating Sphere. Level 3 (Mage) Explosion of up to 10d6 Damage (Electical) - An electiric fireball (reflex save) - if(AI_ActionCastSpellRandom(SPELL_SCINTILLATING_SPHERE, 60, oAOE, 13, TRUE)) return TRUE; - } - } - // Call Lightning - Never hits allies, so excelent to cast :-) - if(bRangeLongValid && GetHasSpell(SPELL_CALL_LIGHTNING)) - { - // Huge, long ranged, reflex based save. No enemies hit! - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_HUGE, 3, SAVING_THROW_REFLEX); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Call Lightning. Level 3 (Druid) Lightning damage - To 10d6 reflex electrical. Never hits allies. Smaller AOE then fireball - if(AI_ActionCastSpellRandom(SPELL_CALL_LIGHTNING, 60, oAOE, 13, TRUE)) return TRUE; - } - } - // Mestils acid breath is on the standard 10d6 max damage. Acid + cone - if(bRangeShortValid && GetHasSpell(SPELL_MESTILS_ACID_BREATH)) - { - // Short, cone based. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 11.0, 3, SAVING_THROW_REFLEX, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Mestals Acid Breath. Level 3 (Mage) A cone of up to 10d6 (acid) damage. Reflex save. - if(AI_ActionCastSpellRandom(SPELL_MESTILS_ACID_BREATH, 50, oAOE, 13, TRUE)) return TRUE; - } - } - // Lightning Bolt. Basically, a fireball in a line. :-) - // Requires a target object to hit. - if(bRangeMediumValid && GetHasSpell(SPELL_LIGHTNING_BOLT)) - { - // Requries an object. Hits allies. 30 spell cylinder range. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, 30.0, 3, SAVING_THROW_REFLEX, SHAPE_SPELLCYLINDER, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting - only if seen - if(GetIsObjectValid(oAOE) && GetObjectSeen(oAOE)) - { - // Lightning Bolt. Level 3 (Mage) An "oh, other spell" to fireball. Does a different damage type. can be more useful - different shape! Can't hit caster! 10d6 reflex electrical - if(AI_ActionCastSpellRandom(SPELL_LIGHTNING_BOLT, 40, oAOE, 13, FALSE)) return TRUE; - } - } - // Slow is a good AOE - hits enemies, and slows them (Will save) - if(bRangeShortValid && GetHasSpell(SPELL_SLOW)) - { - // Slow - doesn't hit allies. Colossal range. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_COLOSSAL, 3, SAVING_THROW_WILL); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Slow. Level 3 (Mage/bard) -50% speed, -1 Attack, -4 AC (I think) to those in an AOE - doesn't hit allies. - if(AI_ActionCastSpellRandom(SPELL_SLOW, 40, oAOE, 13, TRUE)) return TRUE; - } - } - // Negative Energy Burst. Negative damage (to non-undead) and strength loss. - if(bRangeMediumValid && GetHasSpell(SPELL_NEGATIVE_ENERGY_BURST)) - { - // Necromantic spell, hits allies. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 3, FALSE, SHAPE_SPHERE, GlobalFriendlyFireFriendly, FALSE, TRUE); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Negative Energy Burst. Level 3 (Mage) 1d8 + 1-20 (caster level) negative damage, and -1 STR/4 caster levels. Heals undead. - if(AI_ActionCastSpellRandom(SPELL_NEGATIVE_ENERGY_BURST, 40, oAOE, 13, TRUE)) return TRUE; - } - } - // Stinking Cloud. Daze, lots of daze (will based) - if(bRangeMediumValid && GetHasSpell(SPELL_STINKING_CLOUD)) - { - // Allies are hit, will save to be immune. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 3, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Stinking Cloud. Level 3 (Mage) Dazes those in the AOE, if fail VS will. - if(AI_ActionCastSpellRandom(SPELL_STINKING_CLOUD, 40, oAOE, 13, TRUE)) return TRUE; - } - } - // Spike Growth. Alright AOE - 30% speed decrease for 24HRS is the best bit. - if(bRangeMediumValid && GetHasSpell(SPELL_SPIKE_GROWTH)) - { - // Allies are hit, will save to be immune. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 3, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Spike Growth. Level 3 (Druid) AOE - 30% speed decrease for 24HRS + 1d4 piercing damage/round. - if(AI_ActionCastSpellRandom(SPELL_SPIKE_GROWTH, 40, oAOE, 13, TRUE)) return TRUE; - } - } - // Gust of Wind. Always need 2 of these (1 to dispel AOE's) - if(bRangeMediumValid && GetHasSpell(SPELL_GUST_OF_WIND) >= 2) - { - // Allies are hit, will save to be immune. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 3, SAVING_THROW_FORT, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 50% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Gust of Wind. Level 3 (Bard/Mage) Dispels all AOE's in radius, and save VS fort for 3 round knockdown. - if(AI_ActionCastSpellRandom(SPELL_GUST_OF_WIND, 40, oAOE, 13, TRUE)) return TRUE; - } - } - // Glyph of Warding is cast last, lowest %, and just at spell target. - // This is because it is good for setting up traps, but not that good - // in combat, apart from the damage type. 30% - if(GlobalSeenSpell && bRangeShortValid) - { - // Glyph of Warding. Level 3 (Mage) AOE, if entered, does up to 1d6/2 caster levels (to 5d6) damage. - if(AI_ActionCastSpellRandom(SPELL_GLYPH_OF_WARDING, 20, GlobalSpellTarget, 13, TRUE)) return TRUE; - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 3 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 3 && - (GlobalOurHitDice <= 10 || GlobalMeleeAttackers <= 2)) - { - // Pale master - Feat Animate Dead - if(AI_ActionCastSummonSpell(SPELLABILITY_PM_ANIMATE_DEAD, -1, 3, FEAT_ANIMATE_DEAD)) return TRUE; - - // Animate Dead. Level 3 (Mage). Skeleton or zomie summon. Tough DR, long lasting, but hard to heal. - if(AI_ActionCastSummonSpell(SPELL_ANIMATE_DEAD, 13, 3)) return TRUE; - - // Summon Monster III (3). Level 3 (Most classes) Summons a Dire Wolf. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_III, 13, 3)) return TRUE; - } - - // Single target spells. - // - We don't cast inflict serious wounds. GetHasSpell bodges with spontaeous spells. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 3) - { - // Flame arrow - not THE best spell, but well worth it. Also it is long range. - if(bRangeLongValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 3)) - { - // Flame Arrow. Level 3 (Mage) 4d6 Reflex Fire Damage for each missile - 1/4 caster levels. - if(AI_ActionCastSpellRandom(SPELL_FLAME_ARROW, 30, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // All others are in medium range or smaller - if(bRangeMediumValid) - { - // Hold Person - must be playable race, of course. Still quite powerful - as it paralyzes. - if(!AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3) && - // 1.4 - Added test for correct race. - (GetIsPlayableRacialType(GlobalSpellTarget) || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_GOBLINOID || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_MONSTROUS || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_ORC || - GlobalSpellTargetRace == RACIAL_TYPE_HUMANOID_REPTILIAN)) - { - // Hold Person. Level 3 (Mage) 2 (Cleric/Bard) Paralyze's 1 humanoid target (Playable Race/humanoid), if they fail a will save. - if(AI_ActionCastSpellRandom(SPELL_HOLD_PERSON, 20, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // Searing light does good type of damage - divine, and is alright damage amount (up to 5d8) and more importantly, no save! - // Searing Light. Level 3 (Cleric). Maxs of 10d6 to undead, 5d8 to others, 5d6 to constructs. Divine damage. Done above (way above) VS undead - if(AI_ActionCastSpellRandom(SPELL_SEARING_LIGHT, 10, GlobalSpellTarget, 13, FALSE)) return TRUE; - // Dominate Animal. Must be an animal, duh! Dominates an animal only. Will save. - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3)) - { - // Dominate Animal. Level 3 (Druid) Dominates an animal only. Will save. - if(AI_ActionCastSpellRandom(SPELL_DOMINATE_ANIMAL, 10, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Quillfire. Poison isn't bad, and a little damage :-) - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 3)) - { - // Quillfire. Level 3 (Mage) 1 quill at 1d8 + 1-5 damage. Scorpion poison too. - if(AI_ActionCastSpellRandom(SPELL_QUILLFIRE, 10, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - if(bRangeTouchValid) - { - // These 3 are necromantic - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy)) - { - // Infestation of maggots - lots of CON damage over time. :-) - if(!GetHasSpellEffect(SPELL_INFESTATION_OF_MAGGOTS, GlobalSpellTarget)) - { - // Infestation of Maggots. Level 3 (Druid) 1d4 Temp constitution damage/round. (1 round/caster level) - if(AI_ActionCastSpellRandom(SPELL_INFESTATION_OF_MAGGOTS, 20, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // These 2 are negative energy - if(!AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Healing sting isn't too bad. At least no immunities - // and levels up OK. Negative energy damage, however. - if(!AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 3)) - { - // Healing Sting. Level 3 (Druid). 1d6 + 1/Caster evel damage, and healed for that amount. Fort save for none. - if(AI_ActionCastSpellRandom(SPELL_HEALING_STING, 20, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - // Vampiric touch - good spell and scales nicely, and - // heals :-D - // Vampiric Touch. Level 3 (Mage) 1d6(caster level/2) in negative damage, heals us with temp HP. - if(AI_ActionCastSpellRandom(SPELL_VAMPIRIC_TOUCH, 10, GlobalSpellTarget, 13, FALSE)) return TRUE; - } - } - } - } - - // Backup spell - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Serious wounds - damage at a touch attack. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 3 && bRangeTouchValid) - { - // Cast Cure Critical Wounds (Which acts the same way for undead as - // inflict critical does) - if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD) - { - // Cure Serious Wounds. Level 3 (Cleric) Touch attack, hit means 3d8 + 1-15 positive damage. - if(AI_ActionCastSpontaeousSpell(SPELL_CURE_SERIOUS_WOUNDS, GlobalSpellTarget)) return TRUE; - } - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Blackguard ability - if(AI_ActionUseSpellLikeFeat(FEAT_INFLICT_SERIOUS_WOUNDS, SPELLABILITY_BG_INFLICT_SERIOUS_WOUNDS, GlobalMeleeTarget)) return TRUE; - - // Inflict Serious Wounds. Level 3 (Cleric) Touch attack, hit means 3d8 + 1-15 negative damage. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_SERIOUS_WOUNDS, GlobalSpellTarget)) return TRUE; - } - } - -/*::2222222222222222222222222222222222222222222222222222222222222222222222222222 - Level 2 Spells. -//::2222222222222222222222222222222222222222222222222222222222222222222222222222 - Thoughts - Lacking in AOE spells, as it is lower levels, it really - lacks a lot of spells anyway. A few decent damage spells, but many of the - spells are special-case healing, or cast elsewhere. Dispels all level 1 - protections here. - - AOE: -S [Balagarn's Iron Horn] Need to beat (Enemy STR + d20) with 20 + d20. If so, 6 second knockdown - [Web] - Reflex saves or entangles and stuck in the web. AOE, quite large, persistant. - [Sound Burst] - 1d8 sonic damage + Stun unless save VS will. - [Silence] - Silence AOE that moves with target. Applie silence to those in the AOE. -H [Cloud of Bewilderment] - Enemies only are stunned and blinded in the AOE. Fort save. -H [Gedlee's Electric Loop] - All in AOE have 1d6 Electric dam (to 5d6) + will save for 1 round stun. - - [Lesser Dispel] - Can be cast in silence (Stomatic only). Dispel up to +5 check. - - Single: - [Blindness/Deafness] - Blindness/deafness on Fort save failure. - [Ghoul Touch] - Fort save VS paralysis and an AOE on target which gives -2 attack/damage to enemies nearby. - [Melf's Acid Arrow] - 3d6 Impact and 1d6 damage for up to 7 rounds (caster level/3) after that -S [Tasha's Hideous Laughter] Knockdown for 1d3 rounds, if - [Charm Person or Animal] Charms an animal, or humanoid, if fail mind will save. -S [Flame Lash] 2d6 + 1d6/3 caster levels of fire damage. Reflex save. - [Hold Animal] Paralyze's an amimal race target, if they fail a will save. -S [Inflict Moderate Wounds] 2d8 + 1-10 damage on a touch attack -H [Continual Flame] 2d6 + 1 Caster Level (to +10) Fire dam. Reflex save. Every round after, reflex (until sucess) at 1d6 damage. - - Defender: - X [Darkness]- Darkness. Supposedly caster can see. Basically an area of blindness countered with ultravision - [Ghostly Visage] - 5/+1 DR. 0/1 spell immunity. 10% consealment. - X [Invisibility] - Invisbile (not inaudible) until a hostile action. - X [Resist Elements] - Resists 20/- elemental damage, until 30 damage is done. Cast above - [Barkskin] - 1-6 = +3, 7-12 = +4. 13+ = +5 natural armor AC bonus. -H [Death Armor] - 1d4 + 1/2 caster levels (to +5) damage shield (Magical damage!) -H [Stone Bones] - An undead target gets +3 natural AC. - - Summon: - [Summon Creature II] - Summons a Dire Boar - - Other: - X [Bull's Strength] +Strength stat. Cast before melee normally. - X [Cat's Grace] *bulls strength* - X [Continual Flame] - Light for ever. - X [Eagle's Splendor] *bulls strength* - X [Endurance] *bulls strength* - X [Fox's Cunning] *bulls strength* - X [Knock] - Unlocks doors. Done OnBlocked. - X [Owl's Wisdom] *bulls strength* - X [See Invisibility] Cast in special cases. Pierces Invisiblity. - X [Ultravision] Lets you see fully in Darkness AOE's. -S X [Blood Frenzy] Rage - +3STR, CON - 2 AC. -S X [One with the Land] +4 Hide, Move Silently, Set Traps and Animal Empthy. not cast in this AI - X [Aid] +1d8 HP bonus, +1 attack/damage. - X [Cure Moderate Wounds] Cures 2d8 Damage + 1-10. - X [Lesser Restoration] Removes some bad effects. - X [Remove Paralysis] Removes paralysis! -H X [Flame Weapon] - 1d4 + 1/caster level (to +10) fire damage to a weapon. -H X [Aura of Glory] - +4 Char, and allies get +4 VS Fear effects. - -//::22222222222222222222222222222222222222222222222222222222222222222222222222*/ - - // Jump out if we don't want to cast level 2 spells. - if(nLowestSpellLevel > 2) return FALSE; - - if(bFirstRunThrough) - { - // Barkskin (if not already) - if(!AI_GetAIHaveSpellsEffect(GlobalHasNaturalACSpell)) - { - // This is natural AC, and only for undead. Cast it on ourselves, or - // our summoned undead monster. - if(MyPRCGetRacialType(OBJECT_SELF) == RACIAL_TYPE_UNDEAD) - { - // Stone bones - cast if we do not have a natural armor AC spell. - if(AI_ActionCastSpell(SPELL_STONE_BONES, OBJECT_SELF, 12, FALSE)) return TRUE; - } - else if(MyPRCGetRacialType(GlobalBuffAlly) == RACIAL_TYPE_UNDEAD) - { - // Stone bones - cast if we do not have a natural armor AC spell. - if(AI_ActionCastSpell(SPELL_STONE_BONES, GlobalBuffAlly, 12, FALSE)) return TRUE; - } - // Barkskin. Level 2 (Druid). 1-6 = +3, 7-12 = +4. 13+ = +5 natural armor AC bonus. - if(AI_ActionCastSpell(SPELL_BARKSKIN, OBJECT_SELF, 12, FALSE)) return TRUE; - } - // See AC notes in level 1 spells. - - // Cast ally buff spells if we are a buffer - if(GlobalWeAreBuffer) - { - // Some AC protections - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_BARKSKIN, SPELL_MAGE_ARMOR)) return TRUE; - } - - // All visage spells here. - if(AI_SpellWrapperVisageProtections(nLowestSpellLevel)) return TRUE; - - // Eyeball rays. Low stuff, but hey, whatever, eh? - // Random cast these. 3 random ones. - if(bRangeMediumValid) - { - // Random cast. Each one has 30-50 % chance. Doesn't matter which we use! - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_EYEBALL_RAY_0, 40, GlobalSpellTarget)) return TRUE; - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_EYEBALL_RAY_1, 40, GlobalSpellTarget)) return TRUE; - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_EYEBALL_RAY_2, 40, GlobalSpellTarget)) return TRUE; - - // Backup cast - if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - } - - // Dispel level 1 protections (Hastes, regenerates, tensors...) - if(AI_ActionAttemptDispel(1, bRangeMediumValid)) return TRUE; - - // BAB check - // - BAB checks check our BASE attack bonus, no modifiers. Basically, as - // normally even mages have a +X to attack, this provides a good indicator - // if we are going to easy, or very easily, hit the enemy. - // - Clerics, Druids and Bards must be able to hit even better then normal. - if(bFirstRunThrough && !SRA && - GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // If a druid, cleric, and so on, have to be able to hit better then - // more then normal - if(GlobalOurChosenClass == CLASS_TYPE_CLERIC || - GlobalOurChosenClass == CLASS_TYPE_DRUID || - GlobalOurChosenClass == CLASS_TYPE_BARD) - { - // BAB check for level 3 spells. - // Must be able to hit them 75% of the time. - if(GlobalOurBaseAttackBonus + 5 >= GlobalMeleeTargetAC) return FALSE; - } - // Demons, fighters, anything else really. - else - { - // BAB check for level 3 spells. - // 50% chance of hitting them outright. - if(GlobalOurBaseAttackBonus + 10 >= GlobalMeleeTargetAC) return FALSE; - } - } - - // Level 2 random hostile spell -// Single: -// [Melf's Acid Arrow] - 3d6 Impact and 1d6 damage for up to 7 rounds (caster level/3) after that -// [Hold Animal] Paralyze's an amimal race target, if they fail a will save. -// [Blindness/Deafness] - Blindness/deafness on Fort save failure. -// [Tasha's Hideous Laughter] Knockdown for 1d3 rounds, if fail will save. -4 DC if different races -// [Charm Person or Animal] Charms an animal, or humanoid, if fail mind will save. -// [Flame Lash] 2d6 + 1d6/3 caster levels of fire damage. Reflex save. -// [Ghoul Touch] - Fort save VS paralysis and an AOE on target which gives -2 attack/damage to enemies nearby. -// [Continual Flame] 2d6 + 1 Caster Level (to +10) Fire dam. Reflex save. Every round after, reflex (until sucess) at 1d6 damage. - - // Is it best to target with single-target spells first? - // Acid arrow, flame lash all scale well, while blindness/deafness is a good spell too. - // 60-70% if favourable. - // - We don't cast inflict serious wounds here. GetHasSpell bodges with spontaeous spells. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 2) - { - // Ghoul Touch. Paralysis is good :-D - if(bRangeTouchValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 2)) - { - // Ghoul Touch. Level 2 (Mage) - Fort save VS paralysis and an AOE on target which gives -2 attack/damage to enemies nearby. - if(AI_ActionCastSpellRandom(SPELL_GHOUL_TOUCH, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - if(bRangeLongValid) - { - // Greater shadow conjuration - // This if statement here is because AI_ActionCastSpellRandom() doesn't have - // support for bSubSpell. Will probably change later. - if(d10() <= 6) - { - if(AI_ActionCastSpell(SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW, GlobalSpellTarget, 12, FALSE, TRUE)) return TRUE; - } - // Acid arrow - decent enough, and persistant damage, and no save. Long range too! - // Melf's Acid Arrow. Level 2 (Mage) 3d6 Impact and 1d6 damage for up to 7 rounds (caster level/3) after that - if(AI_ActionCastSpellRandom(SPELL_MELFS_ACID_ARROW, 60, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Continual flame isn't a bad spell - touch spell, and does - // continual damage (reflex based) - if(bRangeTouchValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 2)) - { - // Continual Flame. Level 2 (Mage) 3 (Cleric) 2d6 + 1 Caster Level (to +10) Fire dam. Reflex save. Every round after, reflex (until sucess) at 1d6 damage. - if(AI_ActionCastSpellRandom(SPELL_CONTINUAL_FLAME, 60, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Flame Lash is an alright amount of flame damage. - if(bRangeShortValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 2)) - { - // [Flame Lash] 2d6 + 1d6/3 caster levels of fire damage. Reflex save. - if(AI_ActionCastSpellRandom(SPELL_FLAME_LASH, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - if(bRangeMediumValid) - { - // Hold Animal - animals are paralyzed on a will save failure. - if(GlobalSpellTargetRace == RACIAL_TYPE_ANIMAL && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Hold Animal. Level 2 (Druid/Ranger) Paralyze's an amimal race target, if they fail a will save. - if(AI_ActionCastSpellRandom(SPELL_HOLD_ANIMAL, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Blindness/Deafness is a pretty good spell. - if(!AI_GetSpellTargetImmunity(GlobalImmunityBlindDeaf) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 2)) - { - // Blindness/Deafness. Level 2 (Mage/Bard) 3 (Cleric) Blindness/deafness on Fort save failure. - if(AI_ActionCastSpellRandom(SPELL_BLINDNESS_AND_DEAFNESS, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Tasha's Hideous Laughter is knockdown - not too bad. - // - We don't bother with the +4/-4. - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Tasha's Hideous Laughter. Level 2 (Bard/Mage) Knockdown for 1d3 rounds, if fail will save. -4 DC if different races - if(AI_ActionCastSpellRandom(SPELL_TASHAS_HIDEOUS_LAUGHTER, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Charm Person or Animal. Charms an animal, or humanoid, if fail mind will save. - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - (GetIsPlayableRacialType(GlobalSpellTarget) || GlobalSpellTargetRace == RACIAL_TYPE_ANIMAL) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Charm Person or Animal. Level 2 (Druid) Charms an animal, or humanoid, if fail mind will save. - if(AI_ActionCastSpellRandom(SPELL_CHARM_PERSON_OR_ANIMAL, 50, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - } - - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - -// AOE: -// [Silence] - Silence AOE that moves with target. Applies silence to those in the AOE. -// [Web] - Reflex saves or entangles and stuck in the web. AOE, quite large, persistant. -// [Balagarn's Iron Horn] Need to beat (Enemy STR + d20) with 20 + d20. If so, 6 second knockdown -// [Sound Burst] - 1d8 sonic damage + Stun unless save VS will. -// [Cloud of Bewilderment] - Creatures are stunned and blinded in the AOE. Fort save. -// [Gedlee's Electric Loop] - All in AOE have 1d6 Electric dam (to 5d6) + will save for 1 round stun. - - // Silence - must be a mage or sorceror. No talent for this, BTW. Also - // note: can't have the spell's effects already, and must be over 10M away. - if(bRangeLongValid && GlobalSeenSpell && GlobalSpellTargetRange >= 10.0 && - !GetHasSpellEffect(SPELL_SILENCE, GlobalSpellTarget) && - (GetLevelByClass(CLASS_TYPE_WIZARD, GlobalSpellTarget) || - GetLevelByClass(CLASS_TYPE_SORCERER, GlobalSpellTarget) || - GetLevelByClass(CLASS_TYPE_CLERIC, GlobalSpellTarget))) - { - // Silence. Level 2 (Mage/Cleric/Bard) Silence AOE that moves with target. Applies silence to those in the AOE. - if(AI_ActionCastSpellRandom(SPELL_SILENCE, 60, GlobalSpellTarget, 12)) return TRUE; - } - // Gedlee's Electric Loop is a good damaging AOE spell - and the only mage level 2 one. - // - Note, it is set as DiscrnMinate, but is really IndiscrnMinate (ReactionType) - if(bRangeShortValid && GetHasSpell(SPELL_GEDLEES_ELECTRIC_LOOP)) - { - // Small, short ranged, and reflex save based. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_SMALL, 2, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Gedlee's Electric Loop. Level 2 (Mage) All in AOE have 1d6 Electric dam (to 5d6) + will save for 1 round stun. - if(AI_ActionCastSpellRandom(SPELL_GEDLEES_ELECTRIC_LOOP, 60, oAOE, 12, TRUE)) return TRUE; - } - } - // Web - sticky stuff. Illusion version first :-D - if(bRangeMediumValid && (GetHasSpell(SPELL_WEB) || - GetHasSpell(SPELL_GREATER_SHADOW_CONJURATION_WEB) || - GetHasSpell(AI_SPELLABILITY_BEBELITH_WEB))) - { - // large AOE, medium ranged, reflex based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_LARGE, 2, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Beblith version - if(AI_ActionCastSpellRandom(AI_SPELLABILITY_BEBELITH_WEB, 60, oAOE)) return TRUE; - - // Shades vesion. Shades is Level 6. Cast as subspell. - if(AI_ActionCastSpell(SPELL_GREATER_SHADOW_CONJURATION_WEB, oAOE, 16, TRUE, TRUE)) return TRUE; - - // Web. Level 2 (Mage) Entangles on reflex sve. - if(AI_ActionCastSpellRandom(SPELL_WEB, 60, oAOE, 12, TRUE)) return TRUE; - } - } - // Cloud of Bewilderment is an alright AOE - stun and blindness :-) - // Note - Only casts if the target is not immune to stun nor blindness! - if(bRangeMediumValid && - !AI_GetSpellTargetImmunity(GlobalImmunityBlindDeaf) && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - GetHasSpell(SPELL_CLOUD_OF_BEWILDERMENT)) - { - // 5M radius (large) AOE, short ranged, fort based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, RADIUS_SIZE_LARGE, 2, SAVING_THROW_FORT, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Cloud of Bewilderment. Level 2 (Mage/Bard) Creatures are stunned and blinded in the AOE. Fort save. - // Web. Level 2 (Mage) Entangles on reflex sve. - if(AI_ActionCastSpellRandom(SPELL_CLOUD_OF_BEWILDERMENT, 50, oAOE, 12, TRUE)) return TRUE; - } - } - // Balagarn's Iron Horn is only a 6 second knockdown, not too bad. - // Mainly, it has no save. Caster gets +20 on d20, enemy gets strength bonus. - // It is a personal, affects us spell :-) - if(GlobalSpellTargetRange <= 5.0) - { - // Balagarn's Iron Horn. Level 2 (Mage) Need to beat (Enemy STR + d20) with 20 + d20. If so, 6 second knockdown - if(AI_ActionCastSpellRandom(SPELL_BALAGARNSIRONHORN, 60, OBJECT_SELF, 12, TRUE)) return TRUE; - } - // Sound burst - best part is the stun! Trust me! Long range too! - if(bRangeLongValid && GetHasSpell(SPELL_SOUND_BURST)) - { - // Medium AOE, medium ranged, will based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_MEDIUM, 2, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Sound burst. Level 2 (cleric). 1d8 Sonic damage, and if fail will save, stunned for 2 rounds. - if(AI_ActionCastSpellRandom(SPELL_SOUND_BURST, 50, oAOE, 12, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 2 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 2 && - (GlobalOurHitDice <= 8 || GlobalMeleeAttackers <= 2)) - { - // Summon Monster II (2). Level 2 (Most classes) Summons a Dire Boar. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_II, 12, 2)) return TRUE; - } - - // Single spells, lower %'s - // - We don't cast inflict serious wounds. GetHasSpell bodges with spontaeous spells. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 2) - { - // Ghoul Touch. Paralysis is good :-D - if(bRangeTouchValid && !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 2)) - { - // Ghoul Touch. Level 2 (Mage) - Fort save VS paralysis and an AOE on target which gives -2 attack/damage to enemies nearby. - if(AI_ActionCastSpellRandom(SPELL_GHOUL_TOUCH, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - if(bRangeLongValid) - { - // Temp addition because ActionCastSpellRandom() doesn't support subspells just yet. - if(d10() <= 4) - { - // Greater shadow conjuration - if(AI_ActionCastSpell(SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW, GlobalSpellTarget, 12, FALSE, TRUE)) return TRUE; - } - // Acid arrow - decent enough, and persistant damage, and no save. Long range too! - // Melf's Acid Arrow. Level 2 (Mage) 3d6 Impact and 1d6 damage for up to 7 rounds (caster level/3) after that - if(AI_ActionCastSpellRandom(SPELL_MELFS_ACID_ARROW, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Continual flame isn't a bad spell - touch spell, and does - // continual damage (reflex based) - if(bRangeTouchValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 2)) - { - // Continual Flame. Level 2 (Mage) 3 (Cleric) 2d6 + 1 Caster Level (to +10) Fire dam. Reflex save. Every round after, reflex (until sucess) at 1d6 damage. - if(AI_ActionCastSpellRandom(SPELL_CONTINUAL_FLAME, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Flame Lash is an alright amount of flame damage. - if(bRangeShortValid && !AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 2)) - { - // [Flame Lash] 2d6 + 1d6/3 caster levels of fire damage. Reflex save. - if(AI_ActionCastSpellRandom(SPELL_FLAME_LASH, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - if(bRangeMediumValid) - { - // Hold Animal - animals are paralyzed on a will save failure. - if(GlobalSpellTargetRace == RACIAL_TYPE_ANIMAL && - !AI_GetSpellTargetImmunity(GlobalImmunityStun) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Hold Animal. Level 2 (Druid/Ranger) Paralyze's an amimal race target, if they fail a will save. - if(AI_ActionCastSpellRandom(SPELL_HOLD_PERSON, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Blindness/Deafness is a pretty good spell. - if(!AI_GetSpellTargetImmunity(GlobalImmunityBlindDeaf) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 2)) - { - // Blindness/Deafness. Level 2 (Mage/Bard) 3 (Cleric) Blindness/deafness on Fort save failure. - if(AI_ActionCastSpellRandom(SPELL_BLINDNESS_AND_DEAFNESS, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - // Tasha's Hideous Laughter is knockdown - not too bad. - // - We don't bother with the +4/-4. - if(!AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Tasha's Hideous Laughter. Level 2 (Bard/Mage) Knockdown for 1d3 rounds, if fail will save. -4 DC if different races - if(AI_ActionCastSpellRandom(SPELL_TASHAS_HIDEOUS_LAUGHTER, 30, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Charm Person or Animal. Charms an animal, or humanoid, if fail mind will save. - if(!AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - (GetIsPlayableRacialType(GlobalSpellTarget) || GlobalSpellTargetRace == RACIAL_TYPE_ANIMAL) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Charm Person or Animal. Level 2 (Druid) Charms an animal, or humanoid, if fail mind will save. - if(AI_ActionCastSpellRandom(SPELL_CHARM_PERSON_OR_ANIMAL, 20, GlobalSpellTarget, 12, FALSE)) return TRUE; - } - } - } - - // Backup casting - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Moderate wounds - damage at a touch attack. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 3 && bRangeTouchValid) - { - // Cast Cure Critical Wounds (Which acts the same way for undead as - // inflict critical does) - if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD) - { - // Cure Moderate Wounds. Level 2 (Cleric) Touch attack, hit means 2d8 + 1-10 positive damage. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_MODERATE_WOUNDS, GlobalSpellTarget)) return TRUE; - } - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Blackguard ability - if(AI_ActionUseSpellLikeFeat(FEAT_INFLICT_MODERATE_WOUNDS, SPELLABILITY_BG_INFLICT_SERIOUS_WOUNDS, GlobalMeleeTarget)) return TRUE; - - // Inflict Moderate Wounds. Level 2 (Cleric) Touch attack, hit means 2d8 + 1-10 negative damage. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_MODERATE_WOUNDS, GlobalSpellTarget)) return TRUE; - } - } - -/*::1111111111111111111111111111111111111111111111111111111111111111111111111111 - Level 1 Spells. -//::1111111111111111111111111111111111111111111111111111111111111111111111111111 - Thoughts - Not bad AOE spells, better at lower levels or with more people. - Magic missile is a decent spell for level 1, as it goes up to level 9 :-) and - is a classic. Others are simple enough, doing small amounts of damage or - doing some ability daamge, or sleep for limited hit dice creatures. Useful - AC enhancing spells at level 1 though! - - AOE: - [Burning Hands] - 1d4/level to 5d4 Reflex Fire damage to a cone AOE. - [Color Spray] - effect based on HD - Sleep Stun and Blindness if fail will save - [Grease] - Reflex save or knockdown, and slow in AOE. - [Sleep] - 8HD or under creatures, will save VS sleep. Can do more then 1, if total HD affected under d4 + 4. - [Entangle] - Entangles creatures in the AOE so they cannot move, reflex save, every round. -S [Bane] - -1 to all saves VS fear, attack rolls, damage. Opposite of Bless. - - Single: - [Charm Person] - Charms one humanoid if they fail a mind will save. - [Magic Missile] - 1d4 + 1 damage/missile. 1 missile for 2 caster levels. Max 5 at level 9. - [Negative Energy Ray] 1d6(CasterLevel/2) to 5d6 negative damage. - [Doom] -2 Saves, Damage, to hit at a mind will save. - [Ray of Enfeeblement] - d6 + (Caster level/2) strength damage to d6 + 10. Fort save. - [Scare] - 1d4 round of fear, saving throw VS will, for 5HD or less creature -H [Horzilkaul's Boom] - 1d4/2 caster levels (to 5d4) sonic damage, + Will VS deafness. -H [Ice Dagger] - Reflex-based, 1d4/Level (to 5d4) ice damage. - -S [Inflict Light Wounds] 1d8 + 1-5 negative damage on touch attack. - - Defender: - X [Endure Elements] 10/- Elemental resistance until 20 damage has been done - [Mage Armor] +1 Dodge/Armor/Deflection/Natural AC bonuses. (total +4) - [Protection From Alignment] +2 AC, mind immunity from alignment -S [Shield] +4 Armor AC and immunity to magic missile. -S [Shield of Faith] +2 deflection AC bonus, +1 every 6 levels (max +5) -S [Entropic Shield] 20% Consealment VS ranged attacks. -H X [Iron Guts] +4 Saves VS poison. (cast as level 0 spell...this is specilised!) - - Summon: - [Summon Creature I] - Summons a dire badger -H [Shelgarn's Persistant Blade] - Summons a dagger for the caster. - - Other: -SXXX[Amiplify] +20 to listen checks. -S X [Expeditious Retreat] - 150% movement speed. Cast before melee. -XXXX[Identify] - Extra lore. Not cast -S X [True Strike] +9 attack for a single attack. - X [Cure Light Wounds] 1d8 + 1-5 healing damage - X [Bless] +1 to attack rolls, damage for AOE, +2 VS fear saves. -S X [Divine Favor] +1/3 caster levels attack bonus, to +5. - X [Remove Fear] Removes fear! - X [Sanctuary] Will saving throw for enemies to spot you. Kinda a bad invisiblity. -SXXX[Camouflage] +10 hide for self. -S [Magic Fang] + 1 attack/damage to animal companion statistics. -H X [Magic Weapon] +1 enchantment to 1 weapon. -H X [Bless Weapon] +1 enchantment and +2d6 dam VS Undead to 1 weapon. -H X [Deafening Clang] +1 enchantment. +3 sonic damage. On Hit: Deafness, on a weapon. - -//::11111111111111111111111111111111111111111111111111111111111111111111111111*/ - - // Jump out if we don't want to cast level 1 spells. - if(nLowestSpellLevel > 1) return FALSE; - - // Ok, AC increasing/defensive spells first. - if(bFirstRunThrough) - { - // Entropic shield. 20% VS ranged attackers - we need some ranged attackers - // OR people far away (After other AC spells). Also no normal consealment spells (they don't stack) - if(GlobalRangedAttackers && - !AI_GetAIHaveSpellsEffect(GlobalHasConsealmentSpells) && - !AI_GetAIHaveSpellsEffect(GlobalHasRangedConsealment) && - !AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - // Entropic Shield. Level 1 (Cleric) 20% Consealment VS ranged attacks. - if(AI_ActionCastSpell(SPELL_ENTROPIC_SHIELD, OBJECT_SELF, 11, FALSE)) return TRUE; - } - - // We don't cast AC spells which will not do well over other AC inducing spells - // - Shield + Divine Shield == Deflection. Never cast together - // - Barkskin, Stone Bones == Natural - // - Mage armor (+Epic) == Narual, Deflection, Dodge, Armor. Never cast with both Barkskin and Shield. - - // Out of the deflection spells, Shield first then Shield of Faith. - if(!AI_GetAIHaveSpellsEffect(GlobalHasDeflectionACSpell)) - { - // Shield. Level 1 (Mage) +4 Armor AC and immunity to magic missile. - if(AI_ActionCastSpell(SPELL_SHIELD, OBJECT_SELF, 11, FALSE)) return TRUE; - // Shield of Faith. Level 1 (Cleric) +2 deflection AC bonus, +1 every 6 levels (max +5) - if(AI_ActionCastSpell(SPELL_SHIELD_OF_FAITH, OBJECT_SELF, 11, FALSE)) return TRUE; - } - // If we have not got natural or other AC, we cast mage armor. - if(!AI_GetAIHaveSpellsEffect(GlobalHasNaturalACSpell) && - !AI_GetAIHaveSpellsEffect(GlobalHasOtherACSpell)) - { - // Shadow conjuration version - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_MAGE_ARMOR, OBJECT_SELF, 11, FALSE, TRUE)) return TRUE; - // Mage Armor. Level 1 (Mage) +1 Dodge/Armor/Deflection/Natural AC bonuses. (total +4) - if(AI_ActionCastSpell(SPELL_MAGE_ARMOR, OBJECT_SELF, 11, FALSE)) return TRUE; - } - - // Cast Entropic shield if nearest enemy is over 4 M away. - if(!GlobalEnemiesIn4Meters && - !AI_GetAIHaveSpellsEffect(GlobalHasConsealmentSpells) && - !AI_GetAIHaveSpellsEffect(GlobalHasRangedConsealment) && - !AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - // Entropic Shield. Level 1 (Cleric) 20% Consealment VS ranged attacks. - if(AI_ActionCastSpell(SPELL_ENTROPIC_SHIELD, OBJECT_SELF, 11, FALSE)) return TRUE; - } - - // Cheat and use protection froms. Have to rely upon talents :-/ - // as cannot specify using ActionCast - it plain don't wanna work. - // Both cast as subspells. - if(nEnemyAlignment == ALIGNMENT_GOOD && - !AI_GetAIHaveSpellsEffect(GlobalHasProtectionGoodSpell)) - { - // Protection From Alignment. Level 1 (Bard/Cleric/Paladin/Mage). +2 AC, mind immunity from alignment - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_GOOD, OBJECT_SELF, 11, FALSE, TRUE)) return TRUE; - } - else if(nEnemyAlignment == ALIGNMENT_EVIL && - !AI_GetAIHaveSpellsEffect(GlobalHasProtectionEvilSpell)) - { - if(AI_ActionCastSpell(SPELL_PROTECTION_FROM_EVIL, OBJECT_SELF, 11, FALSE, TRUE)) return TRUE; - } - - // Ally buff spells if buffer - if(GlobalWeAreBuffer) - { - // Bless, Aid - if(AI_ActionCastAllyBuffSpell(6.0, 100, SPELL_AID, SPELL_BLESS)) return TRUE; - } - } - - // BAB check - // - BAB checks check our BASE attack bonus, no modifiers. Basically, as - // normally even mages have a +X to attack, this provides a good indicator - // if we are going to easy, or very easily, hit the enemy. - // - Clerics, Druids and Bards must be able to hit even better then normal. - if(bFirstRunThrough && !SRA && - GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // If a druid, cleric, and so on, have to be able to hit better then - // more then normal - if(GlobalOurChosenClass == CLASS_TYPE_CLERIC || - GlobalOurChosenClass == CLASS_TYPE_DRUID || - GlobalOurChosenClass == CLASS_TYPE_BARD) - { - // BAB check for level 4 spells. 50% - if(GlobalOurBaseAttackBonus+ 10 >= GlobalMeleeTargetAC) return FALSE; - } - // Demons, fighters, anything else really. - else - { - // BAB check for level 4 spells. 25% - if(GlobalOurBaseAttackBonus + 15 >= GlobalMeleeTargetAC) return FALSE; - } - } - - // Try grenades - we always throw these. They are about level 1 standard of DC's - // and effects. Not too bad, when NPC's get a chance to use them! :-) - if(bRangeMediumValid) - { - // - Note, these are also always thrown before melee, if the person has <5 HD. - // - Reasons for not casting are really the BAB checks. - if(AI_AttemptGrenadeThrowing(GlobalSpellTarget)) return TRUE; - } - - // Random hostile spell -// [Magic Missile] - 1d4 + 1 damage/missile. 1 missile for 2 caster levels. Max 5 at level 9. -// [Negative Energy Ray] 1d6(CasterLevel/2) to 5d6 negative damage. -// [Scare] - 1d4 round of fear, saving throw VS will, for 5HD or less creature -// [Ray of Enfeeblement] - d6 + (Caster level/2) strength damage to d6 + 10. Fort save. -// [Doom] -2 Saves, Damage, to hit at a mind will save. -// [Charm Person] - Charms one humanoid if they fail a mind will save. -// [Horzilkaul's Boom] - 1d4/2 caster levels (to 5d4) sonic damage, + Will VS deafness. -// [Ice Dagger] - Reflex-based, 1d4/Level (to 5d4) ice damage. - - // Is it best to target with single-target spells first? - // Magic missile, negative energy ray and flame lash are better at damaging - // one target, if there is one target, then the AOE spells usually. - // 60-70% if favourable. - // - We don't cast inflict light wounds. GetHasSpell bodges with spontaeous spells. - if(bSingleSpellsFirst && GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 1) - { - // Magic Missile - Is a nice long range spell. Can do damage to almost anything. - if(bRangeLongValid && !GetHasSpellEffect(SPELL_SHIELD, GlobalSpellTarget)) - { - // as others, AI_ActionCastSpellRandom() ain't got subspell suppor yet. - if(d10() <= 6) - { - // Shad. conjuration - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_MAGIC_MISSILE, GlobalSpellTarget, 11, FALSE, TRUE)) return TRUE; - } - // Magic Missile. Level 1 (Mage) 1d4 + 1 damage/missile. 1 missile for 2 caster levels. Max 5 at level 9. - if(AI_ActionCastSpellRandom(SPELL_MAGIC_MISSILE, 60, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Horizikaul's boom is sonic damage - no save! Also, goes also to 5d4 (at level 10 anyway). Comparable to MM! - if(bRangeShortValid) - { - // Horzilkaul's Boom. Level 1 (Mage) 1d4/2 caster levels (to 5d4) sonic damage, + Will VS deafness. - if(AI_ActionCastSpellRandom(SPELL_HORIZIKAULS_BOOM, 50, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - if(bRangeMediumValid) - { - // Negative energy ray is similar to Magic Missile, but heals undead. can do more dmage then MM, but more random - d6 compared to d4 + 1. - if(GlobalSpellTargetRace != RACIAL_TYPE_UNDEAD && - GlobalSpellTargetRace != RACIAL_TYPE_CONSTRUCT && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Negative Energy Ray. Level 1 (Mage) 2 (Cleric) 1d6(CasterLevel/2) to 5d6 negative damage. - if(AI_ActionCastSpellRandom(SPELL_NEGATIVE_ENERGY_RAY, 50, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Doom does some...stuff. The damage -2 is best. Will save negates. - if(!GetHasSpellEffect(SPELL_DOOM, GlobalSpellTarget) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 1)) - { - // Doom. Level 1 (Mage) -2 Saves, Damage, to hit at a mind will save. - if(AI_ActionCastSpellRandom(SPELL_DOOM, 50, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Damage with Ice Dagger is not bad - it is cirtinly comparable to MM! Saves though... - if(!AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 1)) - { - // Ice Dagger. Level 1 (Mage) Reflex-based, 1d4/Level (to 5d4) ice damage. - if(AI_ActionCastSpellRandom(SPELL_ICE_DAGGER, 50, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Scare - needs 5HD or under HD - if(!AI_GetSpellTargetImmunity(GlobalImmunityFear) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 1)) - { - // Scare. Level 1 (Mage) 1d4 round of fear, saving throw VS will, for 5HD or less creature - if(AI_ActionCastSpellRandom(SPELL_SCARE, 50, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Ray of Enfeeblement pities high strength enemies. d6 + 1-10 str. Loss - if(GetAbilityScore(GlobalSpellTarget, ABILITY_STRENGTH) >= 14 && - !GetHasSpellEffect(SPELL_RAY_OF_ENFEEBLEMENT, GlobalSpellTarget) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 1)) - { - // Ray of Enfeeblement. Level 1 (Mage) d6 + (Caster level/2) strength damage to d6 + 10. Fort save. - if(AI_ActionCastSpellRandom(SPELL_RAY_OF_ENFEEBLEMENT, 40, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Charm Person charms them. Might as well... (Bit bad this spell) - if(GetIsPlayableRacialType(GlobalSpellTarget) && - !AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Charm Person. Level 1 (Mage/Bard) Charms one humanoid if they fail a mind will save. - if(AI_ActionCastSpellRandom(SPELL_CHARM_PERSON, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - } - // Single spell override backup casting - if(bSingleSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - - // Random AOE spell. -// [Burning Hands] - 1d4/level to 5d4 Reflex Fire damage to a cone AOE. -// [Color Spray] - effect based on HD - Sleep Stun and Blindness if fail will save -// [Grease] - Reflex save or knockdown, and slow in AOE. -// [Sleep] - 8HD or under creatures, will save VS sleep. Can do more then 1, if total HD affected under d4 + 4. -// [Bane] - -1 to all saves VS fear, attack rolls, damage. Opposite of Bless. -// [Entangle] - Entangles creatures in the AOE so they cannot move, reflex save, every round. - - // Burning hands - fire reflex damage to a cone - if(bRangeShortValid && GetHasSpell(SPELL_BURNING_HANDS)) - { - // Cone AOE, short ranged, reflex based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 10.0, 1, SAVING_THROW_REFLEX, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Burning Hands. Level 1 (Mage) 1d4/level to 5d4 Reflex Fire damage to a cone AOE. - if(AI_ActionCastSpellRandom(SPELL_BURNING_HANDS, 60, oAOE, 11, TRUE)) return TRUE; - } - } - // Color Spray - Does at least blind higher levels. Will save, however, negates - if(bRangeShortValid && GetHasSpell(SPELL_COLOR_SPRAY)) - { - // Cone AOE, short ranged, reflex based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fShortRange, 10.0, 1, SAVING_THROW_WILL, SHAPE_SPELLCONE, GlobalFriendlyFireFriendly); - // Is it valid? 70% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Color Spray. Level 1 (Mage) - effect based on HD - Sleep Stun and Blindness if fail will save - if(AI_ActionCastSpellRandom(SPELL_COLOR_SPRAY, 50, oAOE, 11, TRUE)) return TRUE; - } - } - // Grease means knockdown - good if they are not immune to knockdown :-P (reflex save) - if(bRangeLongValid && GetHasSpell(SPELL_GREASE)) - { - // Take as Medium AOE, long ranged, reflex based save. Reaction friendly. - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_MEDIUM, 1, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Grease. Level 1 (Mage) Reflex save or knockdown, and slow in AOE. - if(AI_ActionCastSpellRandom(SPELL_GREASE, 50, oAOE, 11, TRUE)) return TRUE; - } - } - // Sleep - 8HD or less average HD for enemy to target this. - if(bRangeMediumValid && GlobalAverageEnemyHD <= 8 && - (GetHasSpell(SPELL_SLEEP) || GetHasFeat(FEAT_HARPER_SLEEP))) - { - // Huge AOE, medium ranged, will based save. Reaction type enemy - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_HUGE, 1, SAVING_THROW_WILL, SHAPE_SPHERE, GlobalFriendlyFireHostile); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // The harper sleep - if(AI_ActionUseSpellLikeFeat(FEAT_HARPER_SLEEP, AI_SPELLABILITY_HARPER_SLEEP, oAOE)) return TRUE; - - // Sleep. Level 1 (Mage) 8HD or under creatures, will save VS sleep. Can do more then 1, if total HD affected under d4 + 4. - if(AI_ActionCastSpellRandom(SPELL_SLEEP, 50, oAOE, 11, TRUE)) return TRUE; - } - } - // Bane is...alright, I guess. Will save, however. It doesn't affect allies though! - if(bRangeLongValid && GetHasSpell(SPELL_BANE)) - { - // collosal AOE, long ranged, will based save. No allies - oAOE = AI_GetBestAreaSpellTarget(fMediumRange, RADIUS_SIZE_COLOSSAL, 1, SAVING_THROW_WILL); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Sleep. Level 1 (Mage) 8HD or under creatures, will save VS sleep. Can do more then 1, if total HD affected under d4 + 4. - if(AI_ActionCastSpellRandom(SPELL_BANE, 50, oAOE, 11, TRUE)) return TRUE; - } - } - // Entangle stops them moving - not a bad spell to say the least, I guess - if(bRangeLongValid && GetHasSpell(SPELL_ENTANGLE)) - { - // Huge AOE, Long ranged, reflex based save. Reaction type friendly - oAOE = AI_GetBestAreaSpellTarget(fLongRange, RADIUS_SIZE_HUGE, 1, SAVING_THROW_REFLEX, SHAPE_SPHERE, GlobalFriendlyFireFriendly); - // Is it valid? 60% chance of casting. - if(GetIsObjectValid(oAOE)) - { - // Entangle. Level 1 (Druid/Ranger) Entangles creatures in the AOE so they cannot move, reflex save, every round. - if(AI_ActionCastSpellRandom(SPELL_ENTANGLE, 50, oAOE, 11, TRUE)) return TRUE; - } - } - - // Multi spell override backup casting - if(bMultiSpellOverride) if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Level 1 summons - if(bFirstRunThrough && GlobalCanSummonSimilarLevel <= 1 && GlobalOurHitDice <= 10 && - (GlobalOurHitDice <= 6 || GlobalMeleeAttackers <= 2)) - { - // Shelgarn's Persistant Blade. Level 1 (Mage only) Summons a dagger for the caster. - if(AI_ActionCastSummonSpell(SPELL_SHELGARNS_PERSISTENT_BLADE, 11, 1)) return TRUE; - // Summon Monster I (1). Level 1 (Most classes) Summons a Dire Badger. - if(AI_ActionCastSummonSpell(SPELL_SUMMON_CREATURE_I, 11, 1)) return TRUE; - } - - // Single spells again - // Similar %'s as it is level 1 spells. - // - We don't cast inflict light wounds. GetHasSpell bodges with spontaeous spells. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 1) - { - // Magic Missile - Is a nice long range spell. Can do damage to almost anything. - if(bRangeLongValid && !GetHasSpellEffect(SPELL_SHIELD, GlobalSpellTarget)) - { - // Shad. conjuration - if(d10() <= 4) - { - if(AI_ActionCastSpell(SPELL_SHADOW_CONJURATION_MAGIC_MISSILE, GlobalSpellTarget, 11, FALSE, TRUE)) return TRUE; - } - // Magic Missile. Level 1 (Mage) 1d4 + 1 damage/missile. 1 missile for 2 caster levels. Max 5 at level 9. - if(AI_ActionCastSpellRandom(SPELL_MAGIC_MISSILE, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Horizikaul's boom is sonic damage - no save! Also, goes also to 5d4 (at level 10 anyway). Comparable to MM! - if(bRangeShortValid) - { - // Horzilkaul's Boom. Level 1 (Mage) 1d4/2 caster levels (to 5d4) sonic damage, + Will VS deafness. - if(AI_ActionCastSpellRandom(SPELL_HORIZIKAULS_BOOM, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - if(bRangeMediumValid) - { - // Negative energy ray is similar to Magic Missile, but heals undead. can do more dmage then MM, but more random - d6 compared to d4 + 1. - if(GlobalSpellTargetRace != RACIAL_TYPE_UNDEAD && - GlobalSpellTargetRace != RACIAL_TYPE_CONSTRUCT && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Negative Energy Ray. Level 1 (Mage) 2 (Cleric) 1d6(CasterLevel/2) to 5d6 negative damage. - if(AI_ActionCastSpellRandom(SPELL_NEGATIVE_ENERGY_RAY, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Doom does some...stuff. The damage -2 is best. Will save negates. - if(!GetHasSpellEffect(SPELL_DOOM, GlobalSpellTarget) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 1)) - { - // Doom. Level 1 (Mage) -2 Saves, Damage, to hit at a mind will save. - if(AI_ActionCastSpellRandom(SPELL_DOOM, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - } - if(bRangeShortValid) - { - // Damage with Ice Dagger is not bad - it is cirtinly comparable to MM! Saves though... - if(!AI_SaveImmuneSpellTarget(SAVING_THROW_REFLEX, 1)) - { - // Ice Dagger. Level 1 (Mage) Reflex-based, 1d4/Level (to 5d4) ice damage. - if(AI_ActionCastSpellRandom(SPELL_ICE_DAGGER, 30, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Scare - needs 5HD or under HD - if(!AI_GetSpellTargetImmunity(GlobalImmunityFear) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 1)) - { - // Scare. Level 1 (Mage) 1d4 round of fear, saving throw VS will, for 5HD or less creature - if(AI_ActionCastSpellRandom(SPELL_SCARE, 20, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Ray of Enfeeblement pities high strength enemies. d6 + 1-10 str. Loss - if(GetAbilityScore(GlobalSpellTarget, ABILITY_STRENGTH) >= 14 && - !GetHasSpellEffect(SPELL_RAY_OF_ENFEEBLEMENT, GlobalSpellTarget) && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 1)) - { - // Ray of Enfeeblement. Level 1 (Mage) d6 + (Caster level/2) strength damage to d6 + 10. Fort save. - if(AI_ActionCastSpellRandom(SPELL_RAY_OF_ENFEEBLEMENT, 20, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - // Charm Person charms them. Might as well... (Bit bad this spell) - if(GetIsPlayableRacialType(GlobalSpellTarget) && - !AI_GetSpellTargetImmunity(GlobalImmunityDomination) && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 2)) - { - // Charm Person. Level 1 (Mage/Bard) Charms one humanoid if they fail a mind will save. - if(AI_ActionCastSpellRandom(SPELL_CHARM_PERSON, 10, GlobalSpellTarget, 11, FALSE)) return TRUE; - } - } - } - - // Backup casting - if(AI_ActionCastBackupRandomSpell()) return TRUE; - - // Light wounds - damage at a touch attack. - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 3 && bRangeTouchValid) - { - // Cast Cure Critical Wounds (Which acts the same way for undead as - // inflict critical does) - if(GlobalSpellTargetRace == RACIAL_TYPE_UNDEAD) - { - // Cure Light Wounds. Level 1 (Cleric) Touch attack, hit means 1d8 + 1-5 positive damage. - if(AI_ActionCastSpontaeousSpell(SPELL_CURE_MODERATE_WOUNDS, GlobalSpellTarget)) return TRUE; - } - if(!AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Inflict Light Wounds. Level 1 (Cleric) Touch attack, hit means 1d8 + 1-5 negative damage. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_LIGHT_WOUNDS, GlobalSpellTarget)) return TRUE; - } - } - - // Lastly, cheat cast spells. We cast these if we run out of all others - // - Cast ABOVE level 0 spells. - if(GetAIConstant(AI_CHEAT_CAST_SPELL + "1") >= FALSE) - { - // It is normally 6 spells. It will default to the first if one - // we pick is not valid. - int nSpell = GetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(d6())); - if(nSpell <= 0) - { - nSpell = GetAIConstant(AI_CHEAT_CAST_SPELL + "1"); - } - // 33: "[DCR:Casting] Cheat Spell. End of Spells. [Spell] " + IntToString(nSpell) + "[Target]" + GetName(GlobalSpellTarget) - DebugActionSpeakByInt(33, GlobalSpellTarget, nSpell); - ActionCastSpellAtObject(nSpell, GlobalSpellTarget, METAMAGIC_NONE, TRUE); - return TRUE; - } - -/*::0000000000000000000000000000000000000000000000000000000000000000000000000000 - Level 0 Spells. -//::0000000000000000000000000000000000000000000000000000000000000000000000000000 - Thoughts - These are backup spells, even at level 1. To be honest, ray - of frost at level 1-3 is a good spell, even 5+ it is alright, as it has - no save. (Shame it isn't like Acid Splash, as in correct D&D damage). - Daze is also useful in some situations. No AOE spells and the defensive - spells are nothing to speak of, however. - - AOE: - X [None] - - Single: - [Ray of frost] 1d4 + 1 cold damage, at no save. -S [Flare] Target gets -1 to attack rolls if they fail a fortitude save - [Daze] If <= 5 Hit dice, target is dazed on a failed fortitude save. -S [Acid Splash] 1d3 Acid damage, no save. Longer range then ray of frost. -S [Electric Jolt] 1d3 Electrical damage, no save. Longer range then ray of frost. -S [Inflict Minor Wounds] 1 Negative damage, on a touch attack. Heals undead. - - Defender: - [Resistance] +1 to all saves for 2 turns - [Virtue] +1 HP, 1 turn/caster level. - - Summon: - X [None] - - Other: - X [Cure Minor Wounds] - Heals 4 hit points (meant to be only 1) - [Light] 20M of light around the target. -//::00000000000000000000000000000000000000000000000000000000000000000000000000*/ - - // Jump out if we don't want to cast level 0 spells. - if(nLowestSpellLevel > 0) return FALSE; - - // BAB check. - if(!SRA && GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // BAB check for level 0 spells. - if(GlobalOurBaseAttackBonus >= GetAC(GlobalSpellTarget)) return FALSE; - // HD check - if(GlobalOurHitDice > 8) return FALSE; - } - - if(bFirstRunThrough) - { - // Need no enemies in 4 meters. - if(!GlobalEnemiesIn4Meters) - { - // Not sure of effectiveness...so acting as a cantrip. - // Sanctuary. Level 1 (Cleric). Will save (low DC!) or cannot see target. - if(AI_ActionCastSpell(SPELL_SANCTUARY, OBJECT_SELF, 11, FALSE)) return TRUE; - } - // Iron guts are very specifically VS poisoners - I'd see the use if I saw - // spiders. I won't bother adding them checks, however, because frankly NPC's - // won't use this much - if(!GetHasSpellEffect(SPELL_IRONGUTS)) - { - // Iron Guts. Level 1 (Mage) +4 Saves VS poison. (cast as level 0 spell...this is specilised!) - if(AI_ActionCastSpell(SPELL_IRONGUTS, OBJECT_SELF, 11, FALSE)) return TRUE; - } - } - - // Note: Also, as these are always the worst, last things to use in combat, we - // don't care about ranges :-P - // Note 2: We have the required amount of stat to 0. We check, On Spawn, - // if we can cast spells (IE right stats) and these are the worst we can cast. - if(GlobalNormalSpellsNoEffectLevel < 1 && GlobalSeenSpell) - { - // Random cast one of the 5 hostile cantrip spells - // Daze! - if(bRangeLongValid && - GlobalSpellTargetHitDice <= 5 && - !AI_GetSpellTargetImmunity(GlobalImmunityMind) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_WILL, 0)) - { - // Daze. Level 0 (Mage/Bard) If <= 5 Hit dice, target is dazed on a failed fortitude save. - if(AI_ActionCastSpellRandom(SPELL_DAZE, 50, GlobalSpellTarget, 10, FALSE)) return TRUE; - } - if(bRangeMediumValid) - { - // Minor damage. Moderate range. 60% chance of casting. - if(AI_ActionCastSpellRandom(SPELL_RAY_OF_FROST, 50, GlobalSpellTarget, 10, FALSE)) return TRUE; - } - if(bRangeLongValid) - { - // Long range, for Acid Splash and Electric Jolt. Random cast one of them - if(AI_ActionCastSpellRandom(SPELL_ELECTRIC_JOLT, 40, GlobalSpellTarget, 10, FALSE)) return TRUE; - if(AI_ActionCastSpellRandom(SPELL_ACID_SPLASH, 40, GlobalSpellTarget, 10, FALSE)) return TRUE; - } - // Flare is OK - low 10% cast, but will backup cast at end. - if(bRangeMediumValid && !GetHasSpellEffect(SPELL_FLARE, GlobalSpellTarget) && - !AI_SaveImmuneSpellTarget(SAVING_THROW_FORT, 0)) - { - // Flare. Level 0 (Bard/Mage) Target gets -1 to attack rolls if they fail a fortitude save - if(AI_ActionCastSpellRandom(SPELL_FLARE, 0, GlobalSpellTarget, 10, FALSE)) return TRUE; - } - - // Backup casting - if(AI_ActionCastBackupRandomSpell()) return TRUE; - } - // Need decent % HP and no enemies in 4 Meters to cast these - if(bFirstRunThrough && GlobalOurPercentHP >= 60 && !GlobalEnemiesIn4Meters) - { - if(!GetHasSpellEffect(SPELL_VIRTUE)) - { - // Virtue. Level 0 (Druid/Cleric/Paladin) +1 HP, 1 turn/caster level. - if(AI_ActionCastSpell(SPELL_VIRTUE, OBJECT_SELF, 10, FALSE)) return TRUE; - } - if(!GetHasSpellEffect(SPELL_RESISTANCE)) - { - // Resistance. Level 0 (Mage/Cleric/Bard/Druid) 1 (Paladin) +1 to all saves for 2 turns - if(AI_ActionCastSpell(SPELL_RESISTANCE, OBJECT_SELF, 10, FALSE)) return TRUE; - } - // Light - if(!GetHasSpellEffect(SPELL_LIGHT)) - { - // Light. Level 0 (Mage/Cleric/Druid/Bard) 20M of light around the target. - if(AI_ActionCastSpell(SPELL_LIGHT, OBJECT_SELF, 10)) return TRUE; - } - } - // Minor wounds - damage at a touch attack. - // HARDLY worth it, but use it anyway...if we pass the BAB check that is :-) - if(GlobalSeenSpell && GlobalNormalSpellsNoEffectLevel < 1 && bRangeTouchValid && - !AI_GetSpellTargetImmunity(GlobalImmunityNecromancy) && - !AI_GetSpellTargetImmunity(GlobalImmunityNegativeEnergy)) - { - // Inflict Minor Wounds. Level 0 (Cleric) Touch attack, hit means 1 negative damage. - if(AI_ActionCastSpontaeousSpell(SPELL_INFLICT_MINOR_WOUNDS, GlobalSpellTarget)) return TRUE; - } - - // Return false. No spell cast. - return FALSE; -} - - -/*:://///////////////////////////////////////////// -//:: Name ActionDragonBreath -//:://///////////////////////////////////////////// - Wrapper to use dragon breath. TRUE if: - 1. They don't have the spell's effects (unless iDamaging is TRUE) - 2. We have it! - - After it is used, nWingCounter is set, debug message, and re-set counter to 0. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//:://///////////////////////////////////////////*/ - -// Either the chosen class is a dragon, or the appearance type is a dragon type, -// we return TRUE. -int AI_GetIsDragon() -{ - // Basic check - if(GlobalOurChosenClass == CLASS_TYPE_DRAGON) - { - return TRUE; - } - // Appearance type (includes if we polymorph into one!) - switch(GetAppearanceType(OBJECT_SELF)) - { - case APPEARANCE_TYPE_DRAGON_BLACK: - case APPEARANCE_TYPE_DRAGON_BLUE: - case APPEARANCE_TYPE_DRAGON_BRASS: - case APPEARANCE_TYPE_DRAGON_BRONZE: - case APPEARANCE_TYPE_DRAGON_COPPER: - case APPEARANCE_TYPE_DRAGON_GOLD: - case APPEARANCE_TYPE_DRAGON_GREEN: - case APPEARANCE_TYPE_DRAGON_RED: - case APPEARANCE_TYPE_DRAGON_SILVER: - case APPEARANCE_TYPE_DRAGON_WHITE: - // Sorta dragons - case APPEARANCE_TYPE_FAERIE_DRAGON: - case APPEARANCE_TYPE_PSEUDODRAGON: - // Tiny ones! - case APPEARANCE_TYPE_WYRMLING_BLACK: - case APPEARANCE_TYPE_WYRMLING_BLUE: - case APPEARANCE_TYPE_WYRMLING_BRASS: - case APPEARANCE_TYPE_WYRMLING_BRONZE: - case APPEARANCE_TYPE_WYRMLING_COPPER: - case APPEARANCE_TYPE_WYRMLING_GOLD: - case APPEARANCE_TYPE_WYRMLING_GREEN: - case APPEARANCE_TYPE_WYRMLING_RED: - case APPEARANCE_TYPE_WYRMLING_SILVER: - case APPEARANCE_TYPE_WYRMLING_WHITE: - // Hordes ones - case APPEARANCE_TYPE_DRAGON_PRIS: // Dragon_Pris 425 - case APPEARANCE_TYPE_DRAGON_SHADOW: // Dragon_Shadow 418 - case APPEARANCE_TYPE_DRACOLICH: // Dracolich 405 - return TRUE; - break; - } - return FALSE; -} - -// Uses tBreath if they are not immune -// - TRUE if used. -int AI_ActionUseBreath(object oTarget, talent tBreath, int nSpellID) -{ - int iImmune = FALSE;// If TRUE, don't use it it - // Go through them... - switch(nSpellID) - { - case SPELLABILITY_DRAGON_BREATH_FEAR: iImmune = GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR); break; - case SPELLABILITY_DRAGON_BREATH_PARALYZE: iImmune = GetIsImmune(oTarget, IMMUNITY_TYPE_PARALYSIS); break; - case SPELLABILITY_DRAGON_BREATH_SLEEP: iImmune = GetIsImmune(oTarget, IMMUNITY_TYPE_SLEEP); break; - case SPELLABILITY_DRAGON_BREATH_SLOW: iImmune = GetIsImmune(oTarget, IMMUNITY_TYPE_SLOW); break; - case SPELLABILITY_DRAGON_BREATH_WEAKEN: iImmune = GetIsImmune(oTarget, IMMUNITY_TYPE_ABILITY_DECREASE); break; - } - // Use it! - if(!iImmune) - { - // 35: "[DCR:Dragon] Breath weapon & attacking [Breath ID] " + IntToString(nSpellID) + " [Target] " + GetName(oTarget) - DebugActionSpeakByInt(35, oTarget, nSpellID); - ActionUseTalentAtLocation(tBreath, GetLocation(oTarget)); - ActionAttack(oTarget); - return TRUE; - } - return FALSE; -} -int AI_ActionDragonBreath(object oTarget, int nWingCounter) -{ - // Get a random breath... - talent tBreath = GetCreatureTalentRandom(TALENT_CATEGORY_DRAGONS_BREATH); - if(GetIsTalentValid(tBreath)) - { - int nTypeRandom, nTypeBest; - // Check if it affects them - nTypeRandom = GetIdFromTalent(tBreath); - if(!GetHasSpellEffect(nTypeRandom, oTarget)) - { - if(AI_ActionUseBreath(oTarget, tBreath, nTypeRandom)) return TRUE; - } - else - { - // Try again...best this time - tBreath = GetCreatureTalentBest(TALENT_CATEGORY_DRAGONS_BREATH, 20); - if(GetIsTalentValid(tBreath)) - { - nTypeBest = GetIdFromTalent(tBreath); - if(nTypeBest != nTypeRandom && !GetHasSpellEffect(nTypeBest, oTarget)) - { - if(AI_ActionUseBreath(oTarget, tBreath, nTypeBest)) return TRUE; - } - } - } - } - return FALSE; -} -// This tests breath attacks or the use of the Wing Buffet, randomised each round -// and not used constantly. -// * oTarget - target to breath on (ouch, bad breath!) -int AI_DragonBreathOrWing(object oTarget) -{ - int bBreath = GetIsTalentValid(GetCreatureTalentBest(TALENT_CATEGORY_DRAGONS_BREATH, MAXCR)); - // Breath attack, or wing buffet. Which one?! - // Check if we can do either...and that we are huge - IE not persuado dragon! - if(bBreath || GetCreatureSize(OBJECT_SELF) >= CREATURE_SIZE_HUGE) - { - // Adds one to all things, by default, every call. This will randomise when to use things. - int nBreath = GetAIInteger(AI_DRAGONS_BREATH); - int nWing = GetAIInteger(AI_WING_BUFFET); - int nAboveXBreath = GetBoundriedAIInteger(AI_DRAGON_FREQUENCY_OF_BUFFET, 3); - int nAboveXWing = GetBoundriedAIInteger(AI_DRAGON_FREQUENCY_OF_BREATH, 3); - // There is a small chance of actuall reducing it for one after it, or - // adding another! - if(d20() == 1 && (nWing > FALSE || nBreath > FALSE))// 5% chance of x2 the number! - { - nWing *= 2; - nBreath *= 2; - } - else if(d20() == 1)// 5% of reducing each by 1. - { - nWing--; - nBreath--; - } - else // Else we add 1 as normal - { - // Add one... - nWing++; - nBreath++; - } - // Set normal values to locals again - SetAIInteger(AI_WING_BUFFET, nWing); - SetAIInteger(AI_DRAGONS_BREATH, nBreath); - // Check 1. If breath is over 2 of wing, we may use it. - if(!GetSpawnInCondition(AI_FLAG_COMBAT_NO_WING_BUFFET, AI_COMBAT_MASTER) && - nBreath >= nAboveXBreath && nBreath >= (nWing + 2) && bBreath) - { - // We don't attack, with breath, our own dragons (IE as 3E rules, and - // the factmost dragons do have that immunity to that damage in place) - if(GetAppearanceType(oTarget) != GetAppearanceType(OBJECT_SELF)) - { - if(AI_ActionDragonBreath(oTarget, nWing)) - { - SetAIInteger(AI_DRAGONS_BREATH, 0); - return TRUE; - } - } - } - // Else wing must be higher, or no breath! - // So we use wing buffet, re-set that, then try breath to end... - if(nWing >= nAboveXWing && - GetCreatureSize(OBJECT_SELF) >= CREATURE_SIZE_HUGE && - GetCreatureSize(oTarget) < CREATURE_SIZE_HUGE) - { - // 36: "[DCR:Dragon] Wing Buffet [Target] " + GetName(oTarget) - DebugActionSpeakByInt(36, oTarget); - // Reset wing buffet counter - SetAIInteger(AI_WING_BUFFET, 0); - SetAIInteger(AI_DRAGONS_BREATH, nBreath); - // - Not action do command, just Execute Script - ExecuteScript(FILE_DRAGON_WING_BUFFET, OBJECT_SELF); - return TRUE; - } - // Breath final... - if(bBreath && nBreath >= nAboveXBreath) - { - // Breaths. - if(AI_ActionDragonBreath(oTarget, nWing)) - { - SetAIInteger(AI_DRAGONS_BREATH, 0); - return TRUE; - } - } - }//End any check - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name TalentDragonCombat -//:://///////////////////////////////////////////// - Main call for dragons. This will cast major spells, - use feats, wing buffet and breath weapons. -//:://///////////////////////////////////////////// -//:: Created By: Bioware. Heavily Modified: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptDragonCombat() -{ - // We will attempt all spells possible with SRA on - if(SRA) - { - if(AI_AttemptAllSpells()) return TRUE; - } - - // Dragons can be tiny winey, and so we might attempt more spells in 1.4. - - // Now, we use DRAGONS BREATH! MUHAHAHAHAH! - // OR wing buffet! Yeehaw! - // - This is done on a breath by breath basis, with GetAppearance checking! - // - Basically, these are as powerful (if not more so) then level 9 spells - if(AI_DragonBreathOrWing(GlobalMeleeTarget)) return TRUE; - - // Chance each round to use best spells possible. - // We, always, love level 9 spells! just great, especially if the dragon has them! - if(AI_AttemptAllSpells(9)) return TRUE; - - // We may attack our GlobalMeleeTarget if they are very weak in the AC - // department! - // - We will always hit - // - They have no DR protections - // - They have under 50 current hit points - // - They are in HTH combat range. - if(GlobalOurBaseAttackBonus - 5 >= GlobalMeleeTargetAC && - !GetHasSpellEffect(AI_SPELL_EPIC_WARDING, GlobalMeleeTarget) && - !GetHasSpellEffect(SPELL_STONESKIN, GlobalMeleeTarget) && - !GetHasSpellEffect(SPELL_GREATER_STONESKIN, GlobalMeleeTarget) && - !GetHasSpellEffect(SPELL_PREMONITION, GlobalMeleeTarget) && - !GetHasSpellEffect(SPELL_SHADES_STONESKIN, GlobalMeleeTarget) && - GetCurrentHitPoints(GlobalMeleeTarget) < 50 && GlobalRangeToMeleeTarget < 4.0) - { - // We then attack with feats, or whatever :-) - // - This includes flying - AI_AttemptMeleeAttackWrapper(); - return TRUE; - } - - // We will, if a low level dragon (awwwww! cute!) will cast more spells - // then normal. We have already used our breath weapon, but lower level - // dragons have more spells (or may be half-dragons). - if(GlobalOurHitDice <= 8 || (GlobalOurHitDice <= 14 && d100() <= 40)) - { - // Attempt all spells. - // * Still uses nBABCheckHighestLevel, to not cast the lowest if we have - // a very high BAB. - if(AI_AttemptAllSpells()) return TRUE; - } - else - { - // We will use more spells if there are more enemies - as AOE spells will - // be *maybe* better to use. - int nSpellLowestMinus; - if(GlobalMeleeAttackers >= 4 || GlobalTotalSeenHeardEnemies >= 6) - { - // -6 - nSpellLowestMinus = 6; - } - else - { - // -2d4 - nSpellLowestMinus = d4(2); - } - // We randomly choose what to use... - if(AI_AttemptAllSpells(9 - nSpellLowestMinus, 0 + Random(6))) - { - // We also ActionAttack the enemy, as to move closer :-) - ActionAttack(GlobalMeleeTarget); - return TRUE; - } - } - // We then attack with feats, or whatever :-) - // - This includes flying - return AI_AttemptMeleeAttackWrapper(); -} -// Beholder teleport attempt. Flees from combat. -int AI_ActionBeholderTeleport() -{ - // By default, we use Bioware's Beholder escape points, but then we check - // for allies to flee too. - // 1.4 adds this. Only FLEES however! It norally is never quicker to go - // nearer... - if(GetLocalInt(OBJECT_SELF,"X2_BEHOLDER_AI_NOJUMP")) - { - return TRUE; - } - - // Get nearest exit point to us - object oExit = GetNearestObjectByTag("X2_WP_BEHOLDER_TUNNEL"); - - if(GetIsObjectValid(oExit)) - { - float fDist = GetDistanceBetween(oExit, GlobalMeleeTarget); - int bJump; - - if((fDist >= 10.0f) && (fDist <= 40.0f)) - { - bJump = TRUE; - } - - if(!bJump) - { - oExit = GetNearestObjectByTag("X2_WP_BEHOLDER_TUNNEL", OBJECT_SELF, 2); - } - if(GetIsObjectValid(oExit)) - { - fDist = GetDistanceBetween(oExit, GlobalMeleeTarget); - - if((fDist >= 8.0f) && (fDist <= 50.0f)) - { - bJump = TRUE; - } - } - - if(bJump) - { - int nAni = GetLocalInt(oExit, "X2_L_BEH_USE_ANI"); - if (nAni == 0) - { - nAni = 1;// Fly "up". - } - effect eAppear = EffectDisappearAppear(GetLocation(oExit), nAni) ; - eAppear = SupernaturalEffect(eAppear); - object oSelf = OBJECT_SELF; - ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAppear, oSelf, 4.0f); - // make the beholder enter combat again - DelayCommand(4.1, ActionCastSpellAtObject(AI_SPELLABILITY_BEHOLDER_MAGIC_CONE, GlobalSpellTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); - return TRUE; - } - } - // End Bioware - - // Go from futhest to nearest seen allies - int nCnt = GetLocalInt(OBJECT_SELF, MAXINT_ + ARRAY_ALLIES_RANGE_SEEN); - if(nCnt <= FALSE) return FALSE; - int bBreak = FALSE; - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oEnemy) || GetDistanceToObject(oEnemy) > 5.0) return FALSE; - // Loop futhest to nearest - object oAlly = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oAlly) && bBreak != TRUE) - { - // Check nearest enemy to the ally. - oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oAlly, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(GetDistanceToObject(oEnemy) > 5.0) - { - bBreak = TRUE; - } - else - { - // Next futhest. - nCnt--; - oAlly = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - } - } - // If true, we run to the ally - if(bBreak) - { - // 37: "[DCR] Beholder Teleport" - DebugActionSpeakByInt(37); - effect eBeholder = EffectDisappearAppear(GetLocation(oAlly)); - float fTime = 3.0 + (GetDistanceToObject(oAlly)/10.0); - // Apply effect - ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeholder, OBJECT_SELF, fTime); - // Determine Combat Round - DelayCommand(fTime + 1.0, DetermineCombatRound(GlobalMeleeTarget)); - } - return FALSE; -} -// Beholders have special rays for eyes. This is used if the setting is set -// on spawn for beholders, or if the appearance is a beholder. -int AI_AttemptBeholderCombat() -{ - // We will randomly teleport away if low HP, then heal - if(GlobalOurPercentHP < GetBoundriedAIInteger(AI_HEALING_US_PERCENT, 50, 100, 1)) - { - // Randomly teleport directly to an ally with no one near to them. - if(AI_ActionBeholderTeleport()) - { - return TRUE; - } - // Else attempt to heal because we are far enough away. - else if(AI_AttemptHealingSelf()) - { - return TRUE; - } - } - - // We will attempt high-level spells first. - // - This will also make them use protections of course - // - Only level 9 and 8 spells. - if(AI_AttemptAllSpells(8)) return TRUE; - - // We attempt to fire beholder rays, or do antimagic cone. - // 736 Beholder_Special_Spell_AI - Handles Beholder rays - // 727 Beholder_Anti_Magic_Cone - Dispels all Magical effects, and... - /* Beholder anti magic cone - 30m cone, - 100% spell failure to all targets, - 100% spellresistance to all targets - 9 seconds duration - No save */ - - // Cast the antimagic cone randomly, if the target is nearish. - if(d100() <= 60 && GlobalSpellTargetRange <= 15.0) - { - // 38: "[DCR] Beholder Rays" - DebugActionSpeakByInt(38); - ActionCastSpellAtLocation(AI_SPELLABILITY_BEHOLDER_MAGIC_CONE, GetLocation(GlobalSpellTarget), METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - return TRUE; - } - // 80% chance of rays if at range (must be seen!) - else if(d100() <= 80 && GlobalSeenSpell) - { - // 38: "[DCR] Beholder Rays" - DebugActionSpeakByInt(38); - ActionCastSpellAtObject(AI_SPELLABILITY_BEHOLDER_ALLRAYS, GlobalSpellTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - return TRUE; - } - // Then magic or bust - no BAB checks - else if(AI_AttemptAllSpells(FALSE, FALSE)) - { - return TRUE; - } - // Else there is a 20% chance of melee attack if enemy is at low HP - else if(GetCurrentHitPoints(GlobalMeleeTarget) <= 30 && - GlobalMeleeTargetAC <= 25 && - GlobalRangeToMeleeTarget < 5.0 && d100() <= 40) - { - if(AI_AttemptMeleeAttackWrapper()) - { - return TRUE; - } - else - { - // 38: "[DCR] Beholder Rays" - DebugActionSpeakByInt(38); - ActionCastSpellAtObject(AI_SPELLABILITY_BEHOLDER_ALLRAYS, GlobalSpellTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - return TRUE; - } - } - // Then rays finally, as a default thing. - else - { - // 38: "[DCR] Beholder Rays" - DebugActionSpeakByInt(38); - ActionCastSpellAtObject(AI_SPELLABILITY_BEHOLDER_ALLRAYS, GlobalSpellTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - return TRUE; - } - // Should never return FALSE. - return FALSE; -} -// Taken from x2_ai_mflayer. -// Bioware's implimenation of the Mind Suck. -void MindFlayerSuck(object oTarget) -{ - // Move closer! - ActionMoveToObject(oTarget, FALSE, 1.0); - ActionDoCommand(SetFacingPoint(GetPosition(oTarget))); - ActionWait(0.5); - // normal brain suck - ActionCastSpellAtObject(AI_SPELLABILITY_SUCKBRAIN, oTarget, METAMAGIC_ANY, TRUE); -} -// Illithid Use special attacks. -// This is set on spawn, or by the user on spawn. -int AI_AttemptMindflayerCombat() -{ - // We may attempt a brain suck as Bioware's mind flayer would. - - // - Mind attack if the melee enemy is NOT polymorphed, - // but is stunned/paralyzed or Dazed + % chance - - // Check polymorph - if(AI_GetAIHaveEffect(GlobalEffectPolymorph, GlobalMeleeTarget)) return FALSE; - - // Stunned, held, sleep, etc. uncommandable, it is 100% - if(AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalMeleeTarget) || - // 30% with daze only. - (AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalMeleeTarget) && d100() <= 30)) - { - // Bioware function. - MindFlayerSuck(GlobalMeleeTarget); - return TRUE; - } - // 70% chance of mind blast - else if(GetDistanceToObject(GlobalMeleeTarget) < 5.0 && d100() <= 70) - { - // Special mind blast - ActionCastSpellAtObject(SPELLABILITY_MINDBLAST, OBJECT_SELF, METAMAGIC_ANY, TRUE); - return TRUE; - } - // 40% chance of pyionic charm monster - else if(GetDistanceToObject(GlobalMeleeTarget) < 8.0 && d100() <= 40 && - !GetHasSpellEffect(SPELLABILITY_CHARMMONSTER, GlobalMeleeTarget) && - GetHasSpell(SPELLABILITY_CHARMMONSTER)) - { - // Special mind blast - ActionCastSpellAtObject(SPELLABILITY_CHARMMONSTER, GlobalMeleeTarget, METAMAGIC_ANY, TRUE); - return TRUE; - } - // False means no special mind flayer attacks. - return FALSE; -} - - -// Sets a value, 1-5, for what we can Dispel. Also sets -// a 1-5 value for breach spells. -// The values are NOT, I repeat NOT what the spell level are. Generally, they -// class spell-stopping spells as a higher prioritory to Dispel! -// * 5 - Dispeled before hostile spells are cast at target -// * 4 - Dispeled just before level 7 or so spells. -// * 3 - Dispeled just before level 4 or so spells -// * 2 - Dispeled just before level 2 or so spells. -// * 1 - Lowest prioritory - Dispeled at the end. -// There are NO cantrips included (level 0 spells). -void AI_SetDispelableEnchantments() -{ - // We CANNOT dispel any of the epic spells, so we DO NOT check for them - // here!!! - - // Summons dispelling - object oMaster = GetMaster(GlobalDispelTarget); - if(GetIsObjectValid(oMaster)) - { - // First, is it the black blade we can dispel? (If cast aganst the master) - if(GetTag(GlobalDispelTarget) == "x2_s_bblade") - { - // Check if seen - if(GetObjectSeen(oMaster) || GetObjectHeard(oMaster)) - { - // Dispel the caster - GlobalDispelTarget = oMaster; - GlobalDispelTargetHighestDispel = 5; - return; - } - else - { - // Else, not seen or heard, so we try and dispel just the sword - // * Its an evil sword and must die! - GlobalDispelTargetHighestDispel = 5; - return; - } - } - // Check if we can dispel the master of the summon - else if(GetObjectSeen(oMaster) || GetObjectHeard(oMaster)) - { - // Dispel the caster - GlobalDispelTarget = oMaster; - GlobalDispelTargetHighestDispel = 5; - return; - } - // Else - normal dispel behavour. I don't think targeting dispels at - // a summon will kill them! - } - - // We check the spell it has been cast from :-) - int nSpellID, nSpellCounter; - // We check all of thier effects. - effect eCheck = GetFirstEffect(GlobalDispelTarget); - // Loop around valid effects. - while(GetIsEffectValid(eCheck) && - // Break loop if we are already at 5 - GlobalDispelTargetHighestDispel < 5 && - GlobalDispelTargetHighestBreach < 5) - { - nSpellID = GetEffectSpellId(eCheck); - // Make sure that it is equal, or over, 0 (IE acid fog) - // - Must be magical, else DispelMagic will not work. - if(nSpellID >= 0 && GetEffectSubType(eCheck) == SUBTYPE_MAGICAL) - { - // We then switch the spells (I tihnk it is easier to debug :-) ) - // and set what level of benifical enchantment it is :-) - switch(nSpellID) - { - // * 5 - Dispeled before hostile spells are cast at target - // Level 5 Breach Spells - should be Dispeled before attacking. - case SPELL_GREATER_SPELL_MANTLE: // Stops all offensive spells! - case SPELL_SPELL_MANTLE: // Stops all offensive spells! - case SPELL_LESSER_SPELL_MANTLE: // Stops all offensive spells! - case SPELL_SHADOW_SHIELD: // Immunity to negative energy, death spells + Necromancy! - so Dispel - case SPELL_ENERGY_BUFFER: // 40/- Elemental reistance can stop some level 9 spells! :-) - { - if(GlobalDispelTargetHighestDispel < 5) GlobalDispelTargetHighestDispel = 5; - if(GlobalDispelTargetHighestBreach < 5) GlobalDispelTargetHighestBreach = 5; - nSpellCounter++; - } - break; - // Level 5 other spells. - case SPELL_UNDEATHS_ETERNAL_FOE: // Stops quite a bit, and is a level 9 cleric spell. - case SPELL_HOLY_AURA: // 25 spell resistance! (and mind immunity) - case SPELL_UNHOLY_AURA:// 25 spell resistance! (and mind immunity) - case SPELL_SPELL_RESISTANCE: // 11 + Caster level in spell resistance. - case SPELL_DEATH_WARD: // Immunity to death spells - so Dispel - case SPELL_NEGATIVE_ENERGY_PROTECTION:// Immunity to negative energy, - so Dispel - case SPELL_TRUE_SEEING:// Can see anything - powerful against invis! - case SPELL_SHAPECHANGE:// VERY Powerful polymorphing. - case SPELL_PROTECTION_FROM_SPELLS:// +8 on all saves - { - if(GlobalDispelTargetHighestDispel < 5) GlobalDispelTargetHighestDispel = 5; - if(GlobalDispelTargetHighestBreach < 5) GlobalDispelTargetHighestBreach = 5; - nSpellCounter++; - } - break; - // * 4 - Dispeled just before level 7 or so spells. - case SPELL_PREMONITION: // Damage reduction 30/+5. Do this for fighters. - { - if(GlobalDispelTargetHighestDispel < 4) GlobalDispelTargetHighestDispel = 4; - if(GlobalDispelTargetHighestBreach < 4) GlobalDispelTargetHighestBreach = 4; - nSpellCounter++; - } - break; - // Most other decent protection spells, especially ones which will - // disrupt all castings. - case SPELL_CLARITY: // Immunity: mind spells. - case SPELL_MASS_HASTE: // Why should they be hasted! >:-D - case SPELL_HASTE: // Why should they be hasted! >:-D - case SPELL_PROTECTION_FROM_ELEMENTS: // 30/- Protection - case SPELL_REGENERATE: // +5 regen is quite powerful! - case SPELL_TENSERS_TRANSFORMATION://ANother powerful +AB ETC spell. - // High level summons - case SPELL_ELEMENTAL_SWARM: // Swarm - case SPELL_SUMMON_CREATURE_IX:// 9 - case SPELL_BLACK_BLADE_OF_DISASTER: // Black blade - case SPELL_SUMMON_CREATURE_VIII:// 8 - { - if(GlobalDispelTargetHighestDispel < 4) GlobalDispelTargetHighestDispel = 4; - nSpellCounter++; - } - break; - // * 3 - Dispeled just before level 4 or so spells - case SPELL_GLOBE_OF_INVULNERABILITY: // Stops level 1-4 spells. - case SPELL_GREATER_STONESKIN: // 20/+5 DR. Help fighters half-way though spells. - case SPELL_RESIST_ELEMENTS: // 20/- Protection - { - if(GlobalDispelTargetHighestDispel < 3) GlobalDispelTargetHighestDispel = 3; - if(GlobalDispelTargetHighestBreach < 3) GlobalDispelTargetHighestBreach = 3; - nSpellCounter++; - } - break; - // Increases in abilites, and some which stop level 4, or nearby, spells. - case SPELL_AURA_OF_VITALITY: // "All allies within the AOE gain +4 Str, Con, Dex"!! - case SPELL_FREEDOM_OF_MOVEMENT:// Freedom - web ETC may be affected (and slow!) - case SPELL_MAGIC_CIRCLE_AGAINST_EVIL:// +saves, AC, and mind immunity - case SPELL_MAGIC_CIRCLE_AGAINST_GOOD:// +saves, AC, and mind immunity - case SPELL_SEE_INVISIBILITY: // See through invisiblity - case SPELL_MESTILS_ACID_SHEATH: // 2/level + 1d6 acid damage - damage shield. - // Quite High level summons - case SPELL_SUMMON_CREATURE_VII: // 7 - case SPELL_SUMMON_CREATURE_VI: // 6 - case SPELL_SUMMON_CREATURE_V: // 5 - { - if(GlobalDispelTargetHighestDispel < 3) GlobalDispelTargetHighestDispel = 3; - nSpellCounter++; - } - break; - // * 2 - Dispeled just before level 2 or so spells. - case SPELL_MINOR_GLOBE_OF_INVULNERABILITY: // Immunity 1-2 level spells. - case SPELL_ETHEREAL_VISAGE: // Immunity 1-2 level spells (and some DR) - case SPELL_ENDURE_ELEMENTS: // 10/- Reduction. SPELL_GHOSTLY_VISAGE - case SPELL_GHOSTLY_VISAGE: // 0-1 level spell immunity, and 10% consealment - case SPELL_STONESKIN: // 10/+5 DR. Help fighters just before low-end spells. - case SPELL_SHADES_STONESKIN:// Shades version of above. - { - if(GlobalDispelTargetHighestDispel < 2) GlobalDispelTargetHighestDispel = 2; - if(GlobalDispelTargetHighestBreach < 2) GlobalDispelTargetHighestBreach = 2; - nSpellCounter++; - } - break; - // Things that stop level 2 or 1 spells, and low-end ones which - // may hinder lower-end castings, and very powreful benifical - // enhancements. - case SPELL_DISPLACEMENT: // +50% consealment. Helps fighters. - case SPELL_EXPEDITIOUS_RETREAT:// +150% speed. Dispel here. - case SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE: // Immunity 1-2 level spells. - case SPELL_PROTECTION_FROM_EVIL:// Mind immunity mostly. - case SPELL_PROTECTION_FROM_GOOD:// Mind immunity mostly. - case SPELL_SHIELD: // +AC + Immunity magic missile - // Enhancements - case SPELL_DIVINE_POWER:// +Stat, HP, base attack bonus. - case SPELL_DIVINE_FAVOR:// +1-5 Attack/damage - case SPELL_ELEMENTAL_SHIELD: // +Damage Sheild (gives HTH attackers damage) - // Moderate level summons - case SPELL_SUMMON_CREATURE_IV: // 4 - case SPELL_SUMMON_CREATURE_III: // 3 - { - if(GlobalDispelTargetHighestDispel < 2) GlobalDispelTargetHighestDispel = 2; - nSpellCounter++; - } - break; - // * 1 - Lowest prioritory - Dispeled at the end. - // The rest - mostly low-end AC increases, bless and so forth. - // Before we attack, we Dispel them (and therefore help allies!) - case SPELL_MAGE_ARMOR: // +AC - { - if(GlobalDispelTargetHighestDispel < 1) GlobalDispelTargetHighestDispel = 1; - if(GlobalDispelTargetHighestBreach < 1) GlobalDispelTargetHighestBreach = 1; - nSpellCounter++; - } - // Non-breach - case SPELL_AID: // +Some HP and attack - case SPELL_AMPLIFY: // +20 listen - case SPELL_BARKSKIN: // +AC - case SPELL_BLESS: // +Attack, damage (AOE) - case SPELL_BLOOD_FRENZY:// +Attack, damage (Rage-like) - case SPELL_BULLS_STRENGTH:// +Stat - case SPELL_CATS_GRACE: // +Stat - case SPELL_EAGLE_SPLEDOR:// +Stat - case SPELL_ENTROPIC_SHIELD: // +20% consealment VS ranged. - case SPELL_OWLS_WISDOM: // +Stat - case AI_SPELL_OWLS_INSIGHT: // +Stat (Owls insight) - case SPELL_SANCTUARY: // Invisiblity-like. - case SPELL_SHIELD_OF_FAITH:// +2-5 AC - case SPELL_WAR_CRY: // +Attack, damage - case SPELL_WOUNDING_WHISPERS:// +Damage Sheild (gives HTH attackers damage) - case SPELL_STONE_BONES: // +3 AC to undead. - case SPELL_BATTLETIDE: // +2 Saves, attack, damage, also a negative AOE. - // Low level summons - case SPELL_SUMMON_CREATURE_II: // 2 - case SPELL_SUMMON_CREATURE_I: // 1 - { - if(GlobalDispelTargetHighestDispel < 1) GlobalDispelTargetHighestDispel = 1; - nSpellCounter++; - } - break; - } - } - eCheck = GetNextEffect(GlobalDispelTarget); - } - // If we cannot see GlobalDispelTarget, set GlobalDispelTargetHighestBreach to - // 0 anyway. Cannot cast Breach against something we cannot see! - if(!GetObjectSeen(GlobalDispelTarget)) GlobalDispelTargetHighestBreach = 0; - - // We might dispel anything. - if(!GetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER)) - { - if(GlobalDispelTargetHighestBreach) GlobalDispelTargetHighestBreach = 5; - if(GlobalDispelTargetHighestDispel) GlobalDispelTargetHighestDispel = 5; - } - // Do we have a ton of spells? We add 1 to the prioritory for every 10 spells - // applied. - if(nSpellCounter > 5) GlobalDispelTargetHighestDispel += nSpellCounter / 10; - if(GlobalDispelTargetHighestDispel > 5) GlobalDispelTargetHighestDispel = 5; -} - -// Just sorts out sOriginalArrayName to sNewArrayName based on range only. -void AI_TargetingArrayDistanceStore(string sOriginalArrayName, string sNewArrayName) -{ - int bFilterPC; - if(sOriginalArrayName == ARRAY_TEMP_ENEMIES && - GetSpawnInCondition(AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS, AI_TARGETING_FLEE_MASTER)) - { - // Check for the nearest seen, enemy PC. - bFilterPC = GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)); - } - // Make sure sNewArrayName is cleared - DeleteLocalInt(OBJECT_SELF, MAXINT_ + sNewArrayName); - int nCnt = 1; - float fSetUpRange; - // Now, we check for things like if to do melee or ranged, or whatever :-) - object oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - while(GetIsObjectValid(oTarget)) - { - if(!bFilterPC || GetIsPC(oTarget)) - { - fSetUpRange = GetDistanceToObject(oTarget); - // We set it to sNewArrayName - highest to lowest. - SetArrayFloatValue(sNewArrayName, oTarget, fSetUpRange); - } - // Next one - nCnt++; - oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - } - // If we have no valid targets, and PC's are on, we try again. - if(bFilterPC && !GetIsObjectValid(GetLocalObject(OBJECT_SELF, sNewArrayName + "1"))) - { - // Re-run again. - nCnt = 1; - oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - while(GetIsObjectValid(oTarget)) - { - fSetUpRange = GetDistanceToObject(oTarget); - // We set it to sNewArrayName - highest to lowest. - SetArrayFloatValue(sNewArrayName, oTarget, fSetUpRange); - // Next one - nCnt++; - oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - } - } - // delete old ones. - int iCheck; - for(iCheck = 1; iCheck <= nCnt; iCheck++) - { - // Delete the old one - DeleteLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - } -} - -// Just sorts out sOriginalArrayName to sNewArrayName based on nType. -// nType 1 = AC, nType 2 = Total Saves, nType 3 = Phisical Protections, -// nType 4 = BAB, nType 5 = Hit Dice, nType 6 = Percent HP, nType 7 = Current HP, -// nType 8 = Maximum HP. 9 = Attacking us or not. -void AI_TargetingArrayIntegerStore(int nType, string sOriginalArrayName) -{ - int nCnt = 1; - int nValue; - // Now, we check for things like if to do melee or ranged, or whatever :-) - object oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - while(GetIsObjectValid(oTarget)) - { - if(nType == 1) - { - // AC - nValue = GetAC(oTarget); - } - else if(nType == 2) - { - // Total saving throws. - nValue = GetFortitudeSavingThrow(oTarget) + - GetReflexSavingThrow(oTarget) + - GetReflexSavingThrow(oTarget); - } - else if(nType == 3) - { - // Damage reduction - // 30/+5 - if(GetHasSpellEffect(SPELL_PREMONITION, oTarget)) - { - nValue = 30; - } - // 20/+5, 20/+3 - else if(GetHasSpellEffect(SPELL_GREATER_STONESKIN, oTarget) || - GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, oTarget)) - { - nValue = 20; - } - // 10/+5 10/+3 - else if(GetHasSpellEffect(SPELL_SHADOW_SHIELD, oTarget) || - GetHasSpellEffect(SPELL_STONESKIN, oTarget) || - GetHasSpellEffect(SPELL_SHADES_STONESKIN, oTarget)) - { - nValue = 10; - } - // 5/+1 - else if(GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, oTarget)) - { - nValue = 5; - } - else - { - nValue = 0; - } - } - else if(nType == 4) - { - // BAB - nValue = GetBaseAttackBonus(oTarget); - } - else if(nType == 5) - { - // Hit dice - nValue = GetHitDice(oTarget); - } - else if(nType == 6) - { - // %HP - nValue = AI_GetPercentOf(GetCurrentHitPoints(oTarget), GetMaxHitPoints(oTarget)); - } - else if(nType == 7) - { - // Current - nValue = GetCurrentHitPoints(oTarget); - } - else if(nType == 8) - { - // Max - nValue = GetMaxHitPoints(oTarget); - } - else if(nType == 9) - { - // Sneak attack. - nValue = FALSE; - if(GetAttackTarget(oTarget) != OBJECT_SELF && - !GetIsImmune(oTarget, IMMUNITY_TYPE_SNEAK_ATTACK)) - { - nValue = TRUE; - } - } - // We set it to the new array name - highest to lowest. - SetArrayIntegerValue(ARRAY_TEMP_ARRAY, oTarget, nValue); - // Delete the old one - if(nType != 9)// Sneak attack, if not a valid sneak target, we target normally so don't delete - { - DeleteLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - } - // Next target - nCnt++; - oTarget = GetLocalObject(OBJECT_SELF, sOriginalArrayName + IntToString(nCnt)); - } -} -// Deletes all FLoats, Integers and Objects set to sArray for valid -// objects got by GetLocalObject to sArray. -void AI_TargetingArrayDelete(string sArray) -{ - int nCnt = 1; - string sCnt = IntToString(nCnt); - object oLocal = GetLocalObject(OBJECT_SELF, sArray + sCnt); - while(GetIsObjectValid(oLocal)) - { - // Delete all - DeleteLocalFloat(OBJECT_SELF, sArray + sCnt); - DeleteLocalInt(OBJECT_SELF, sArray + sCnt); - DeleteLocalObject(OBJECT_SELF, sArray + sCnt); - // Get next object - nCnt++; - sCnt = IntToString(nCnt); - oLocal = GetLocalObject(OBJECT_SELF, sArray + sCnt); - } - DeleteLocalInt(OBJECT_SELF, MAXINT_ + sArray); -} - -// This sets ARRAY_TEMP_ARRAY of integer values to sNewArrayName. -// - nTypeOfTarget, used TARGET_LOWER, TARGET_HIGHER. -// - We work until nMinimum is filled, or we get to nMinimum and we get to -// a target with value > iInputMinimum. (20 - 25 > X?) -int AI_TargetingArrayLimitTargets(string sNewArrayName, int nTypeOfTarget, int iInputMinLimit, int nMinLoop, int nMaxLoop) -{ - int iAddEachTime, nValue, nCnt, nCnt2, nCnt3, bBreak, nLowestHighestValue; - string sCnt; - object oSetUpTarget; - // Is it lowest to highest, or highest to lowest? - // - 1. Lowest to highest - if(nTypeOfTarget == TARGET_LOWER) - { - iAddEachTime = 1; - nCnt = 1; - } - else // if(nTypeOfTarget == TARGET_HIGHER) - { - // Change to start at top value, and work down. - iAddEachTime = -1; - nCnt = GetLocalInt(OBJECT_SELF, MAXINT_ + ARRAY_TEMP_ARRAY); - } - - // Start loop from array based on AC. Overrides exsisting targets - // - Use temp enemy array. ARRAY_TEMP_ARRAY - nCnt2 = 0; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - while(GetIsObjectValid(oSetUpTarget) && bBreak != TRUE) - { - // We check AC or whatever... - nValue = GetLocalInt(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - // Delete objects - DeleteLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - DeleteLocalInt(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - // Check values. - // we check if we have under minimum OR it is under/over X. - // As it is in value order, once we get to a point to stop, we - // break the loop. - if((nCnt2 < nMaxLoop) && - ((nCnt2 < nMinLoop) /*Default, get minimum targets*/ - || (nValue - nLowestHighestValue < iInputMinLimit && nTypeOfTarget == TARGET_LOWER)// Lowest to highest (20 - 25 < X?) - || (nLowestHighestValue - nValue < iInputMinLimit && nTypeOfTarget == TARGET_HIGHER)))// Highest to lowest (25 - 20 < X?) - { - // Set this as the newest highest/lowest value - nLowestHighestValue = nValue; - // Add it to array. - nCnt2++; - sCnt = IntToString(nCnt2); - SetLocalObject(OBJECT_SELF, sNewArrayName + sCnt, oSetUpTarget); - SetLocalInt(OBJECT_SELF, sNewArrayName + sCnt, nValue); - } - else // else break out. (If got to max targets, got to a target we don't want to target) - { - for(nCnt3 = nCnt; bBreak != TRUE; nCnt3 += iAddEachTime) - { - // Remove all other values in the loop. - sCnt = IntToString(nCnt3); - if(GetIsObjectValid(GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt))) - { - DeleteLocalInt(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - DeleteLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - } - else - { - bBreak = TRUE; - } - } - bBreak = TRUE; - } - // Get next AC target - we add X, which is either +1 or -1, to - // continue a loop going up or down. - nCnt += iAddEachTime; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - } - // Start resetting temp array used in the rest. - DeleteLocalInt(OBJECT_SELF, MAXINT_ + ARRAY_TEMP_ARRAY); - // Returns the amount of targets stored. - return nCnt2; -} -// This sets ARRAY_TEMP_ARRAY of float values to sNewArrayName. -// - nTypeOfTarget, used TARGET_LOWER, TARGET_HIGHER. -// - We work until nMinimum is filled, or we get to nMinimum and we get to -// a target with value > iInputMinimum. (20.0 - 25.0 > X?) -// Returns the amount of targets set in sNewArrayName. -int AI_TargetingArrayLimitTargetsFloat(string sNewArrayName, int nTypeOfTarget, float fInputMinLimit, int nMinLoop, int nMaxLoop) -{ - int iAddEachTime, nCnt, nCnt2, nCnt3, bBreak; - float fValue, fLowestHighestValue; - string sCnt; - object oSetUpTarget; - // Is it lowest to highest, or highest to lowest? - // - 1. Lowest to highest - if(nTypeOfTarget == TARGET_LOWER) - { - iAddEachTime = 1; - nCnt = 1; - } - else // if(nTypeOfTarget == TARGET_HIGHER) - { - // Change to start at top value, and work down. - iAddEachTime = -1; - nCnt = GetLocalInt(OBJECT_SELF, MAXINT_ + ARRAY_TEMP_ARRAY); - } - - // Start loop from array based on AC. Overrides exsisting targets - // - Use temp enemy (AC) array. - nCnt2 = FALSE;// Reset counter - nCnt = 1; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - while(GetIsObjectValid(oSetUpTarget) && bBreak != TRUE) - { - // We check range normally... - fValue = GetLocalFloat(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - // Check values. - // we check if we have under minimum OR it is under/over X. - // As it is in value order, once we get to a point to stop, we - // break the loop. - if((nCnt2 < nMaxLoop) && - ((nCnt2 < nMinLoop) /*Default, get minimum targets*/ - || (fValue - fLowestHighestValue < fInputMinLimit && nTypeOfTarget == TARGET_LOWER)// Lowest to highest (20 - 25 < X?) - || (fLowestHighestValue - fValue < fInputMinLimit && nTypeOfTarget == TARGET_HIGHER)))// Highest to lowest (25 - 20 < X?) - { - // Set fLowestHighestValue - fLowestHighestValue = fValue; - // Add it to array. - nCnt2++; - sCnt = IntToString(nCnt2); - SetLocalObject(OBJECT_SELF, sNewArrayName + sCnt, oSetUpTarget); - SetLocalFloat(OBJECT_SELF, sNewArrayName + sCnt, fValue); - } - else // else break out. (If got to max targets, got to a target we don't want to target) - { - for(nCnt3 = nCnt; bBreak != TRUE; nCnt3 += iAddEachTime) - { - // Remove all other values in the loop. - sCnt = IntToString(nCnt3); - if(GetIsObjectValid(GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt))) - { - DeleteLocalFloat(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - DeleteLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - } - else - { - bBreak = TRUE; - } - } - bBreak = TRUE; - } - // Delete objects - DeleteLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - DeleteLocalFloat(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - // Get next AC target - we add X, which is either +1 or -1, to - // continue a loop going up or down. - nCnt += iAddEachTime; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + sCnt); - } - // Start resetting temp array used in the rest. - DeleteLocalInt(OBJECT_SELF, MAXINT_ + ARRAY_TEMP_ARRAY); - // Returns the amount of targets stored. - return nCnt2; -} - -// Check if oTarget is: -// - Dead, Petrified, AI Ignore ON, A DM, Invalid -// - Not: Seen or heard (IE: We cannot see or hear them) -// Returns: TRUE if it is SANE to attack oTarget -int AI_GetTargetSanityCheck(object oTarget) -{ - // Ethereal check - if(GetIsEthereal(oTarget)) return FALSE; - - if(!GetIsObjectValid(oTarget) && // Isn't valid - GetIsDead(oTarget) || // Is dead - GetIsDM(oTarget) || // Is DM - GetIgnore(oTarget) || // Is ignored - AI_GetAIHaveEffect(GlobalEffectPetrify, oTarget) || // Is petrified - (!GetObjectSeen(oTarget) && !GetObjectHeard(oTarget))) // Is not seen nor heard. - { - // If we cannot see or hear the target, or they are an invalid target, - // it is NOT sane to atack them - return FALSE - return FALSE; - } - // Else, return TRUE - we CAN attack them! - return TRUE; -} - -// We set up targets to Global* variables, GlobalSpellTarget, GlobalRangeTarget, -// and GlobalMeleeTarget. Counts enemies, and so on. -// - Uses oIntruder (to attack or move near) if anything. -// - We return TRUE if it ActionAttack's, or moves to an enemy - basically -// that we cannot do an action, but shouldn't search. False if normal. -int AI_SetUpAllObjects(object oInputBackup) -{ - // Delete past arrays - AI_TargetingArrayDelete(ARRAY_ENEMY_RANGE); - AI_TargetingArrayDelete(ARRAY_ENEMY_RANGE_SEEN); - AI_TargetingArrayDelete(ARRAY_ENEMY_RANGE_HEARD); - AI_TargetingArrayDelete(ARRAY_ALLIES_RANGE); - AI_TargetingArrayDelete(ARRAY_ALLIES_RANGE_SEEN); - AI_TargetingArrayDelete(ARRAY_ALLIES_RANGE_SEEN_BUFF); - - // We always use range as at least 1 of the ways to get best target. - float fCurrentRange, fSetMaxWeCanGoTo; - location lSelf = GetLocation(OBJECT_SELF); - int nCnt, nCnt2, nCnt3, bBreak;//Counter loop. - int nValue, nMaxTurnsAttackingX, nMaximum, nMinimum, nRemainingTargets, nTypeOfTarget; - string sCnt; // IntToString(nCnt) :-) - object oTempLoopObject, oSetUpTarget, oLastTarget, oInputBackUpToAttack; - - // Note: Here we check if oIntruder is a sane thing to attack. - if(AI_GetTargetSanityCheck(oInputBackup)) - { - oInputBackUpToAttack = oInputBackup; - } - // Note: oIntruder is still used to search near if anything. - - // SRA - Spell Ranged Attacking uses the nearest seen, or the nearest heard, - // for the spell target (not ranged or melee, however) - if(SRA) - { - // Checked below for validness ETC. - GlobalSpellTarget = GlobalNearestEnemySeen; - } - - // we have a max amount of rounds to attack one target. - nMaxTurnsAttackingX = GetBoundriedAIInteger(AI_MAX_TURNS_TO_ATTACK_ONE_TARGET, 6, 40, 1); - - // Start... - // Gets all CREATURES within 50M andin LOS. THIS IS THE MAJOR OBJECT LOOP OF THE AI! - oSetUpTarget = GetFirstObjectInShape(SHAPE_SPHERE, 50.0, lSelf, TRUE); - while(GetIsObjectValid(oSetUpTarget)) - { - // We totally ignore DM's, and AI_IGNORE people - // * 1.4: We also ignore all Etherealness (even if they are visible). - // A new function is added after targeting to react to the - // ethereal people we *may* see via. trueseeing, and cannot see anything - // else by casting defensive only spells, healing, summoning, - // and making sure we stay in combat! - // * Ignore: - // - Dead - // - Petrified - // - AI Ignore ON - // - DM - // - Invalid - // Must be: Seen or heard - // Else, we ignore them. Special cases can get dead people (raising, - // killing off) but unseen/unheard people are, in the case of the AI, - // unknown about unless we specifically know they went/came invisible - if(AI_GetTargetSanityCheck(oSetUpTarget) && oSetUpTarget != OBJECT_SELF) - { - // If the target is a friend, we add 1 to targets, and set in array. - if(GetIsFriend(oSetUpTarget) || GetFactionEqual(oSetUpTarget)) - { - GlobalTotalAllies++; - SetLocalObject(OBJECT_SELF, ARRAY_TEMP_ALLIES + IntToString(GlobalTotalAllies), oSetUpTarget); - } - // Enemy...add to enemy array, even if not seen nor heard. - else if(GetIsEnemy(oSetUpTarget)) - { - //SpeakString("Enemy (no dead) in LOS:" + GetName(oSetUpTarget)); - // We set up a "Seen or heard" enemies counter below - nCnt++; - SetLocalObject(OBJECT_SELF, ARRAY_TEMP_ENEMIES + IntToString(nCnt), oSetUpTarget); - } - // Well, we have enemies in range. We check if we need to re-set constants - // based on a timer. If done, set a timer. - // * 1.4 : Removes the timer! This is now done each time the AI runs, - // and as the Bioware AI does loops of all effects quite often, this, - // even if not a large improvement of performance, is easier for the AI - // and me to write and code. - // * 1.4 changes also fix some remove condition problems of the - // local not being updated. - // Always set up effects - allied, neutral, or enemy! - AI_SetEffectsOnTarget(oSetUpTarget); - } - oSetUpTarget = GetNextObjectInShape(SHAPE_SPHERE, 50.0, lSelf, TRUE); - } - // The first simple one is therefore done :-) - -/*::////////////////////////////////////////////// - Special case: - - If we have NO nearest seen/heard enemies (GetNearest* calls) we: - - Check allies for thier targets - - Nothing else for now. -//::////////////////////////////////////////////*/ - - -/*::////////////////////////////////////////////// - Enemies - - Set up finalish arrays of enemies, and lots of counting numbers. -//::////////////////////////////////////////////*/ - - // Next, we loop on range. Allies and Enemies - AI_TargetingArrayDistanceStore(ARRAY_TEMP_ENEMIES, ARRAY_ENEMY_RANGE); - - // Before we start re-setting targets, we do set up an extra 2 arrays based - // on seen and heard (one OR the other) arrays for the enemy. These are objects in our LOS. - nCnt = 1; - nCnt2 = FALSE;// Counter for seen - nCnt3 = FALSE;// Counter for heard - nValue = FALSE;// Counter for BAB - bBreak = FALSE;// Counter for HD - GlobalEnemiesIn4Meters = FALSE;// Make sure at 0 - GlobalMeleeAttackers = FALSE;// Make sure at 0 - GlobalRangedAttackers = FALSE;// Make sure at 0 - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - fCurrentRange = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE + IntToString(nCnt)); - - // 1.4 change here. Already checked for dead and petrifed creatures - // in setting all arrays of enemies and allies. - - // Count ranged and melee attackers. - if(GetAttackTarget(oSetUpTarget) == OBJECT_SELF) - { - // Melee/ranged attacker? - if(GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oSetUpTarget))) - { - // - 1.3 beta fixed this. I didn't notice I got these mixed up :-P - GlobalRangedAttackers++; - } - else - { - GlobalMeleeAttackers++; - } - } - // Total enemies in 4M - if(fCurrentRange <= 4.0) - { - GlobalEnemiesIn4Meters++; - } - // It is nearest to futhest. Just set each one in one of 2 arrays. - if(GetObjectSeen(oSetUpTarget)) - { - // bBreak counts average HD - bBreak += GetHitDice(oSetUpTarget); - // Value counts BAB - nValue += GetBaseAttackBonus(oSetUpTarget); - // Add to total seen/heard enemies - GlobalTotalSeenHeardEnemies++; - // Object seen. - nCnt2++; - SetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt2), fCurrentRange); - SetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt2), oSetUpTarget); - } - else if(GetObjectHeard(oSetUpTarget)) - { - // bBreak counts average HD - bBreak += GetHitDice(oSetUpTarget); - // Value counts BAB - nValue += GetBaseAttackBonus(oSetUpTarget); - // Add to total seen/heard enemies - GlobalTotalSeenHeardEnemies++; - // Object heard. - nCnt3++; - SetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt3), fCurrentRange); - SetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt3), oSetUpTarget); - } - // Next enemy - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE + IntToString(nCnt)); - } - // Set GlobalRangeToFuthestEnemy. - // - Using futhest heard should be good enough. - GlobalRangeToFuthestEnemy = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt3)); - - // We need value just above to calcualte these, else leave at 0. - if(GlobalTotalSeenHeardEnemies >= 1 && bBreak >= 1) - { - // Average enemy HD - GlobalAverageEnemyHD = bBreak / GlobalTotalSeenHeardEnemies; - if(GlobalAverageEnemyHD < 1) GlobalAverageEnemyHD = 1; - // Average BAB - GlobalAverageEnemyBAB = nValue / GlobalTotalSeenHeardEnemies; - if(GlobalAverageEnemyBAB < 0) GlobalAverageEnemyBAB = 0; - } - -/*::////////////////////////////////////////////// - Friends - - Sets up all allies things -//::////////////////////////////////////////////*/ - - // Friendly (ally) targets too - for curing ETC. - AI_TargetingArrayDistanceStore(ARRAY_TEMP_ALLIES, ARRAY_ALLIES_RANGE); - - // Spells which affect GetIsReactionType - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + "1"); - - // If not valid, use self - if(!GetIsObjectValid(oSetUpTarget)) - { - // Use nearest us, just for testing. - GlobalFriendlyFireHostile = GetIsReactionTypeHostile(OBJECT_SELF); - GlobalFriendlyFireFriendly = GetIsReactionTypeFriendly(OBJECT_SELF); - } - - // Use nearest ally, just for testing. - GlobalFriendlyFireHostile = GetIsReactionTypeHostile(oSetUpTarget); - GlobalFriendlyFireFriendly = GetIsReactionTypeFriendly(oSetUpTarget); - GlobalNearestAlly = oSetUpTarget; - GlobalValidAlly = GetIsObjectValid(GlobalNearestAlly); - GlobalRangeToAlly = GetDistanceToObject(oSetUpTarget); - - // 0 Seen/heard. We don't check enemies numbers - they could be hidden. - if(!GlobalValidNearestSeenEnemy && !GlobalValidNearestHeardEnemy) - { - bBreak = FALSE; - // Loop allies for ANY target, and move to them! (Attack in HTH, this - // lets us re-set targets On Percieve) - nCnt = -1; - // Allys - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget) && bBreak != TRUE) - { - // It is nearest to futhest. - oTempLoopObject = GetAttackTarget(oSetUpTarget); - if(GetIsObjectValid(oTempLoopObject)) - { - // If a valid attack object, we stop! - bBreak = TRUE; - } - else - { - // Next ally - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - } - } - // We move to the target if we have one. - if(bBreak) - { - // Just a temp most damaging melee. Normally, it is best to - // just Move to the target - // 39: "[DCR:Targeting] No valid enemies in sight, moving to allies target's. [Target] " + GetName(oSetUpTarget) - DebugActionSpeakByInt(39, oSetUpTarget); - AI_EquipBestShield(); - ActionEquipMostDamagingMelee(); - ActionMoveToLocation(GetLocation(oSetUpTarget), TRUE); - return TRUE; - } - } - // What other ally stuff? - // - Nearest leader - // - Who to heal? (Most damaged in X range of lesser damaged ones) - // - Who to heal effects from? (Not done here!) - // - Nearest ally - // - Buff ally - if(GlobalValidAlly) - { - // Set up an array of seen ranged-based allies, for healing and for - // healing effects, and for buffing. - nCnt = 1; - nCnt2 = 0; - nCnt3 = 0; - nValue = FALSE; // Just a temp for leader status set - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - nCnt3 += GetHitDice(oSetUpTarget); - if(GetObjectSeen(oSetUpTarget)) - { - nCnt2++; - SetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt2), oSetUpTarget); - // Set global nearest seen leader for morale ETC. - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER, oSetUpTarget) - && nValue != TRUE) - { - GlobalNearestLeader = oSetUpTarget; - nValue = TRUE; - } - } - // Next ally - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - } - GlobalValidLeader = nValue; - if(nCnt >= 1 && nCnt3 >= 1) - { - GlobalAverageFriendlyHD = nCnt3 / nCnt; - } - // Set nearest seen ally. - GlobalNearestSeenAlly = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + "1"); - GlobalValidSeenAlly = GetIsObjectValid(GlobalNearestSeenAlly); - - // We set up buff allies in a new array. - // - We may set up summons (or people with masters) if we have under - // <= 3 people, or it is of comparable hit dice to us. - nCnt = 1; - nCnt2 = FALSE; - fSetMaxWeCanGoTo = 20.0; - // we add this onto any ranges we input, so how far we'll move to. - GlobalBuffRangeAddon = 0.0; - // nValue is the limit of buff targets - // - Less if sorceror/bard (very few) - // - More if proper buffer - nValue = 5; - if(GlobalWeAreSorcerorBard) - { - nValue = 2; - } - // If we are set to buff allies, we extend the range. - if(GetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER)) - { - nValue = 8; - fSetMaxWeCanGoTo = 40.0; - GlobalBuffRangeAddon = 30.0; - } - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - // Loop allies - // - Only up to 10. - // - Check masters as above. - while(GetIsObjectValid(oSetUpTarget) && nCnt2 <= nValue && - GetDistanceToObject(oSetUpTarget) <= fSetMaxWeCanGoTo) - { - // No arcane spellcasters. - if(!GetLevelByClass(CLASS_TYPE_SORCERER, oSetUpTarget) && - !GetLevelByClass(CLASS_TYPE_WIZARD, oSetUpTarget) && - // - Master check - (GlobalTotalAllies <= 3 || - !GetIsObjectValid(GetMaster(oSetUpTarget)) || - GetHitDice(oSetUpTarget) >= GlobalOurHitDice - 5)) - { - // Add to new array - nCnt2++; - SetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN_BUFF + IntToString(nCnt2), oSetUpTarget); - } - // Next seen ally - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE_SEEN + IntToString(nCnt)); - } - } - -/*::////////////////////////////////////////////// - Well, do we change our targets? - - There is a max limit (default of 6) rounds that we attack targets, melee - ranged and spell. - - There is also a random % to re-set the target, for each type. - - Leaders override all 3 targets, and set it to it. - - And finally, the target we had last time must be: - - Not dead - - Seen or heard (Spell targets must be seen if there is a valid seen enemy) - - Not attacking us if we have sneak attack (Ranged/Melee target) -//::////////////////////////////////////////////*/ - - // Leader checking - oSetUpTarget = GetAIObject(AI_ATTACK_SPECIFIC_OBJECT); - // Always delete - DeleteAIObject(AI_ATTACK_SPECIFIC_OBJECT); - // Our specific target to attack - // - sanity check just in case - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - // 40: "[DCR:Targeting] Override Target Seen. [Name]" + GetName(oSetUpTarget) - DebugActionSpeakByInt(40, oSetUpTarget); - // Melee target, we must check if we have any valid. - GlobalMeleeTarget = oSetUpTarget; - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - // Lagbusting, get nearest - // * This is under AI_OTHER_MASTER. 1.4 fix. - else if(GetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER)) - { - if(GetIsObjectValid(GlobalNearestEnemySeen)) - { - // The validness of these are checked later anyway - GlobalMeleeTarget = GlobalNearestEnemySeen; - GlobalRangedTarget = GlobalNearestEnemySeen; - GlobalSpellTarget = GlobalNearestEnemySeen; - } - } - // We may also make it so that we target only the lowest AC and so on... - // LIKE_LOWER_HP, LIKE_LOWER_AC, LIKE_MAGE_CLASSES, LIKE_ARCHERS - else if(GetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HP, AI_TARGETING_FLEE_MASTER)) - { - // We use this check - inbuilt, automatic, and also is simple! - oSetUpTarget = GetFactionMostDamagedMember(GlobalNearestEnemySeen); - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - // HD - else if(GetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HD, AI_TARGETING_FLEE_MASTER)) - { - // We use this check - inbuilt, automatic, and also is simple! - oSetUpTarget = GetFactionWeakestMember(GlobalNearestEnemySeen); - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - // AC - else if(GetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_AC, AI_TARGETING_FLEE_MASTER)) - { - // We use this check - inbuilt, automatic, and also is simple! - oSetUpTarget = GetFactionWorstAC(GlobalNearestEnemySeen); - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - // Make sure the nearest seen is not in front of the worst AC. - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - // Ranged attackers - else if(GetSpawnInCondition(AI_FLAG_TARGETING_LIKE_ARCHERS, AI_TARGETING_FLEE_MASTER)) - { - // Get nearest one who is attacking us. - nCnt = 1; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - // All the array is already sane targets. - - // have they got a ranged weapon? - if(GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oSetUpTarget))) - { - // Only set to melee if quite near. - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - break; - } - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - } - // Mage classes - else if(GetSpawnInCondition(AI_FLAG_TARGETING_LIKE_MAGE_CLASSES, AI_TARGETING_FLEE_MASTER)) - { - // Sorceror - oSetUpTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_SORCERER, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_IS_ALIVE, TRUE); - // If the sorceror isn't sane, we will check for wizards. - if(!AI_GetTargetSanityCheck(oSetUpTarget)) - { - // Wizard - oSetUpTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_WIZARD, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_IS_ALIVE, TRUE); - } - // If valid, use - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - // Only set to melee if quite near. - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - nValue = GetAIConstant(AI_FAVOURED_ENEMY_RACE); - if(nValue >= FALSE) - { - oSetUpTarget = GetNearestCreature(CREATURE_TYPE_RACIAL_TYPE, nValue, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - // Make sure the nearest seen is not in front of the worst AC. - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - else - { - nValue = GetAIConstant(AI_FAVOURED_ENEMY_CLASS); - if(nValue >= FALSE) - { - oSetUpTarget = GetNearestCreature(CREATURE_TYPE_CLASS, nValue, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - if(AI_GetTargetSanityCheck(oSetUpTarget)) - { - // Make sure the nearest seen is not in front of the worst AC. - if(GetDistanceToObject(GlobalNearestEnemyHeard) > 4.0 || - GetDistanceToObject(oSetUpTarget) < 3.0) - { - GlobalMeleeTarget = oSetUpTarget; - } - GlobalRangedTarget = oSetUpTarget; - GlobalSpellTarget = oSetUpTarget; - } - } - } - -/*::////////////////////////////////////////////// - Melee targeting - - This uses some of the closer people or all within reach (determined before) - - After getting the right people, we determine with AC, HP and some other - things, which are the best. -//::////////////////////////////////////////////*/ - - // Do we want to change melee targets? - oLastTarget = GetAIObject(AI_LAST_MELEE_TARGET); - - // bValid is the counter for attacking target X... - bBreak = GetAIInteger(AI_MELEE_TURNS_ATTACKING); - bBreak++; - SetAIInteger(AI_MELEE_TURNS_ATTACKING, bBreak); - // We set this to 0 if we our oSetUpTarget != GlobalMeleeTarget below changing. - - // Check % - // If we have an override, we don't check for targets, but run Global* - // setups at the end still, but with the target being oOverride. - - // - No valid override target - if(!GetIsObjectValid(GlobalMeleeTarget) && - // 1. If the last target isn't a sane target... - (!AI_GetTargetSanityCheck(oLastTarget) || - // 2. ...Or must pass a % roll to change (or check for new) targets... - d100() <= GetBoundriedAIInteger(AI_MELEE_LAST_TO_NEW_TARGET_CHANCE, 20, 100) || - // 3. ...OR last target attacked for X rounds we limit ourselves to. - bBreak >= nMaxTurnsAttackingX)) - { - // Loop targets, ETC, and get GlobalMeleeTarget normally. - // Set up melee = ARRAY_MELEE_ENEMY - - // Note: if we start getting wide gaps between group A and object B, we - // stop, because they are probably behind more enemies :-D - // Note 2: We only use seen enemies as a prioritory, else heard ones (like - // invisible ones) - - // 1. Nearby SEEN enemies. Obviously nearest to furthest! - // IE the maximum and minimum targets for the range checking. - nMinimum = GetBoundriedAIInteger(TARGETING_RANGE + MINIMUM, 2, 40, 1); - nMaximum = GetBoundriedAIInteger(TARGETING_RANGE + MAXIMUM, 8, 40, 1); - - // fSetMaxWeCanGoTo = Maximum range away from us (GetDistanceToObject) that - // we can go to. This is increased if we have tumble (compared to level) or - // spring attack is king :-D - fSetMaxWeCanGoTo = GlobalOurReach + 1.0;// Have 1 extra as well - // We add a lot for spring attack - 3d4 (3 to 12) - // OR we have 13+ (IE a very high chance of suceeding) in tumble - if(GetHasFeat(FEAT_SPRING_ATTACK) || GetSkillRank(SKILL_TUMBLE) >= 13) - { - fSetMaxWeCanGoTo += IntToFloat(d4(3)); - } - else if(GetHasSkill(SKILL_TUMBLE)) - { - // Else we add some for tumble - bBreak = GetSkillRank(SKILL_TUMBLE) - GlobalOurHitDice; - if(bBreak > FALSE) - { - // * Basis of Skill Rank - Our Hit Dice. 5 tumble on a level 2 makes +3M Range. - fSetMaxWeCanGoTo += IntToFloat(bBreak); - } - } - bBreak = FALSE; - // Start loop from array based on range. - // - Use seen array! - // - Break if we have added enough targets to our array. - nRemainingTargets = FALSE; - nCnt = 1; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - while(GetIsObjectValid(oSetUpTarget) && nRemainingTargets < nMaximum) - { - // If seen, we check range... - fCurrentRange = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - // We start from the closest, so we need to cancle those out which - // are too far away. - // we check if it is in our reach. If so, we add it. - if(fCurrentRange < fSetMaxWeCanGoTo || nRemainingTargets < nMinimum) - { - nRemainingTargets++; - sCnt = IntToString(nRemainingTargets); - SetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + sCnt, oSetUpTarget); - SetLocalFloat(OBJECT_SELF, ARRAY_MELEE_ENEMY + sCnt, fCurrentRange); - } - // Get next nearest SEEN - nCnt++; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + sCnt); - } - // 1a. If not valid, just use nearest seen if valid - if(!nRemainingTargets && GlobalValidNearestSeenEnemy) - { - nRemainingTargets = 1; - SetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + "1", GlobalNearestEnemySeen); - SetLocalFloat(OBJECT_SELF, ARRAY_MELEE_ENEMY + "1", GetDistanceToObject(GlobalNearestEnemySeen)); - } - else - { - // 2. Make sure the nearest HEARD is NOT very close compared to the nearest - // SEEN OR we have no nearest seen. - // Check if we have no seen objects set, or the nearest heard is nearer then the futhest seen by 4M - fCurrentRange = GetDistanceToObject(GlobalNearestEnemyHeard); - if(GlobalValidNearestHeardEnemy && (!nRemainingTargets || - // Range to nearest heard is nearer then the melee enemy - (fCurrentRange > 0.0 && ((fCurrentRange + 4.0) < - // Nearest melee range enemy we've set to seen - GetLocalFloat(OBJECT_SELF, ARRAY_MELEE_ENEMY + "1"))))) - { - // - We half the amount we need for this range check - // Maximum - nMaximum /= 2; - if(nMaximum < 1) nMaximum = 1; - // Minimum - nMinimum /= 2; - if(nMinimum < 1) nMinimum = 1; - // Start loop from array based on range. Overrides exsisting targets - // - Use heard enemy array. - nCnt = 1; - nRemainingTargets = FALSE; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + sCnt); - while(GetIsObjectValid(oSetUpTarget) && nRemainingTargets < nMaximum) - { - // If seen, we check range... - fCurrentRange = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + sCnt); - // We start from the closest, so we need to cancle those out which - // are too far away. - if(fCurrentRange < fSetMaxWeCanGoTo || nRemainingTargets < nMinimum) - { - nRemainingTargets++; - sCnt = IntToString(nRemainingTargets); - SetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + sCnt, oSetUpTarget); - SetLocalFloat(OBJECT_SELF, ARRAY_MELEE_ENEMY + sCnt, fCurrentRange); - } - // Get next HEARD - nCnt++; - sCnt = IntToString(nCnt); - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + sCnt); - } - } - } - // Now, do we have any Melee Targets? - if(!nRemainingTargets) - { - // If not, what can we use? - // - We use the Inputted target! - // - We use anyone who allies are attacking! - // - We use anyone we hear! - - // Inputted target (EG last attack that GetObjectSeen doesn't return - // for). - oSetUpTarget = oInputBackUpToAttack; - if(!GetIsObjectValid(oSetUpTarget)) - { - // Anyone we hear - oSetUpTarget = GlobalNearestEnemyHeard; - if(!GetIsObjectValid(oSetUpTarget)) - { - // We get who our allies are attacking - nCnt = 1; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget) && bBreak != TRUE) - { - // Get the allies attack target. If valid, attack it! - oTempLoopObject = GetAttackTarget(oSetUpTarget); - if(AI_GetTargetSanityCheck(oTempLoopObject)) - { - oSetUpTarget = oTempLoopObject; - bBreak = TRUE; - } - else - { - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ALLIES_RANGE + IntToString(nCnt)); - } - } - // Don't attack anyone we got in the loop, of course. - if(GetIsFriend(oSetUpTarget) || GetFactionEqual(oSetUpTarget)) - { - oSetUpTarget = OBJECT_INVALID; - } - } - } - // Do we have a target from those backups above? - // - If so, we ActionAttack it so we move near it, as it is not in - // our LOS, or isn't in our seen range in our LOS. - if(GetIsObjectValid(oSetUpTarget)) - { - // 41: [DCR:Targeting] No seen in LOS, Attempting to MOVE to something [Target]" + GetName(oSetUpTarget) - DebugActionSpeakByInt(41, oSetUpTarget); - DeleteAIObject(AI_LAST_MELEE_TARGET); - DeleteAIObject(AI_LAST_SPELL_TARGET); - DeleteAIObject(AI_LAST_RANGED_TARGET); - AI_EquipBestShield(); // in case of an ambush, be ready - ActionMoveToLocation(GetLocation(oSetUpTarget), TRUE); - return TRUE; - } - // If it doesn't have anything we can see/move to/attack/search - // near, then we make sure have make sure we have no target - // (GlobalAnyValidTargetObject) and break the function, so we can stop. - // "else" - GlobalAnyValidTargetObject = FALSE; - return FALSE; - } - // If only one, choose it - else if(nRemainingTargets == 1) - { - GlobalMeleeTarget = GetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + "1"); - } - else //if(nRemainingTargets > 1) - { - // If we have any set targets (heard/seen ones) then we - // will reduce the amount by AC, HP (current Percent/max/current) - // and HD and BAB - - // We only use range as a default. The rest are done in order if they - // are set! :-D - - // We check for PC targets - // DODODODO - - // Target: - // AC - Used only for phisical attacks (TARGETING_AC) - // Phisical Protections - Used for both spells and melee (TARGETING_PHISICALS) - // Base Attack Bonus - Used for both spells and melee (TARGETING_BAB) - // Hit Dice - Used for both spells and melee (TARGETING_HITDICE) - // HP Percent - Used for both spells and melee (TARGETING_HP_PERCENT) - // HP Current - Used for both spells and melee (TARGETING_HP_CURRENT) - // HP Maximum - Used for both spells and melee (TARGETING_HP_MAXIMUM) - - // 0. Sneak attack check - if(GetHasFeat(FEAT_SNEAK_ATTACK)) - { - // We normally get the nearest enemy who is not attacking us, and - // actually stop! - AI_TargetingArrayIntegerStore(9, ARRAY_MELEE_ENEMY); - - // Get the closest who isn't attacking us. - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + "1"); - if(GetAttackTarget(oSetUpTarget) != OBJECT_SELF) - { - GlobalMeleeTarget = oSetUpTarget; - nRemainingTargets = FALSE; - } - // If we have trouble using that one, IE they are attacking us, we - // just use normal methods. - } - // 1. AC - nMinimum = GetAIInteger(TARGETING_AC + MINIMUM); - // Do we do AC? And over one target... - // - nCnt2 is the total target stored in the last array. - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_AC); - nMaximum = GetAIInteger(TARGETING_AC + MAXIMUM); - - // We then set the array up in a new temp array. 1 = AC. - AI_TargetingArrayIntegerStore(1, ARRAY_MELEE_ENEMY); - - // We loop through all the targets in the temp array (we also - // delete the temp array targets!) and set what ones we want to target - // based on AC. - // - Continue until nMinimum is reached. - // - Never go over nMaximum - // - After nMinimum we make sure the AC differences is not a major one of - // over 5. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, 5, nMinimum, nMaximum); - } - // Most others are similar (and all integer values so easy to check) - // 2. Phisical protections. - nMinimum = GetAIInteger(TARGETING_PHISICALS + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_PHISICALS); - nMaximum = GetAIInteger(TARGETING_PHISICALS + MAXIMUM); - // We then set the array up in a new temp array. 3 = phisicals. - AI_TargetingArrayIntegerStore(3, ARRAY_MELEE_ENEMY); - // We loop as AC, basically. As it is stored based on the amount - // of DR offered, we set the limit to 6, so if everyone had - // 0 DR, and 1 had 5, it'd add the 5 for the hell of it. If everyone - // had 20, and one had 25 it'd take the 25 too, but not a 30. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, 6, nMinimum, nMaximum); - } - // 4. BAB - nMinimum = GetAIInteger(TARGETING_BAB + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_BAB); - nMaximum = GetAIInteger(TARGETING_BAB + MAXIMUM); - // We then set the array up in a new temp array. 4 = BAB - AI_TargetingArrayIntegerStore(4, ARRAY_MELEE_ENEMY); - // We loop as AC, basically. As it is BAB, IE how much chance - // they'll hit us (they might all hit on a 20, but it also shows - // who are the best fighters!). Set to 5, like AC. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, 5, nMinimum, nMaximum); - } - // 5. Hit Dice - nMinimum = GetAIInteger(TARGETING_HITDICE + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HITDICE); - nMaximum = GetAIInteger(TARGETING_HITDICE + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(5, ARRAY_MELEE_ENEMY); - // We loop as AC. Hit Dice is even easier. We set the limit to - // a max of 4. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, 4, nMinimum, nMaximum); - } - // 6. Percent HP - nMinimum = GetAIInteger(TARGETING_HP_PERCENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_PERCENT); - nMaximum = GetAIInteger(TARGETING_HP_PERCENT + MAXIMUM); - // We then set the array up in a new temp array. 6 = % - AI_TargetingArrayIntegerStore(6, ARRAY_MELEE_ENEMY); - // We loop as AC. Current Hit Points are easy, and are done - // by %ages. We set the % to 15 difference max. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, 15, nMinimum, nMaximum); - } - // 7. Current HP - nMinimum = GetAIInteger(TARGETING_HP_CURRENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_CURRENT); - nMaximum = GetAIInteger(TARGETING_HP_CURRENT + MAXIMUM); - // We then set the array up in a new temp array. 7 = current HP - AI_TargetingArrayIntegerStore(7, ARRAY_MELEE_ENEMY); - // We loop as AC. Current Hit points? Well, we set this limit to - // Our Hit Dice * 2. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, GlobalOurHitDice * 2, nMinimum, nMaximum); - } - // 8. Maximum HP - nMinimum = GetAIInteger(TARGETING_HP_MAXIMUM + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_MAXIMUM); - nMaximum = GetAIInteger(TARGETING_HP_MAXIMUM + MAXIMUM); - // We then set the array up in a new temp array. 8 = maximum - AI_TargetingArrayIntegerStore(8, ARRAY_MELEE_ENEMY); - // We loop as AC. Max hit Hit points? Well, we set this limit to - // Our Hit Dice * 3. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_MELEE_ENEMY, nTypeOfTarget, GlobalOurHitDice * 3, nMinimum, nMaximum); - } - // WHEW! - // Now we should have 1 or more chosen targets in ARRAY_MELEE_ARRAY. - // iRemaining Targets is the array size...we mearly choose a random - // one, or the first one if there is only one :-D - - // If only one, choose it - if(nRemainingTargets == 1) - { - GlobalMeleeTarget = GetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + "1"); - } - // Check for 2+, if 0, we haven't got one to set! - else if(nRemainingTargets >= 2) - { - // Else Roll dice - nCnt = Random(nRemainingTargets) + 1; - // Set random target - GlobalMeleeTarget = GetLocalObject(OBJECT_SELF, ARRAY_MELEE_ENEMY + IntToString(nCnt)); - } - } - } - // Else, it is oLastTarget that will be our target, if a sane target! - else if(AI_GetTargetSanityCheck(oLastTarget)) - { - // Only set this if oLastTarget is valid. It might not be. Thanks Chris (1.4 fix) - GlobalMeleeTarget = oLastTarget; - } - - // If it is a new target, reset attacking counter to 0 - if(GlobalMeleeTarget != oLastTarget) - { - DeleteAIInteger(AI_MELEE_TURNS_ATTACKING); - } - -/*::////////////////////////////////////////////// - Ranged targeting - - This uses more stuff then melee targeting - for a start, range is optional! - - By default, it sets up all seen targets to the array, else all heard. -//::////////////////////////////////////////////*/ - - // Do we want to change melee targets? - oLastTarget = GetAIObject(AI_LAST_RANGED_TARGET); - - // bValid is the counter for attacking target X... - bBreak = GetAIInteger(AI_RANGED_TURNS_ATTACKING); - bBreak++; - SetAIInteger(AI_RANGED_TURNS_ATTACKING, bBreak); - // We set this to 0 if we our oLastTarget != GlobalMeleeTarget below changing. - - // Check % - // We use the same temp reset from before, because phisical attacking - // would be range or melee ;-) - - // - No valid override target, we have got a ranged weapon... - if(!GetIsObjectValid(GlobalRangedTarget) && GetIsObjectValid(GetAIObject(AI_WEAPON_RANGED)) && - // 1. If the last target isn't a sane target... - (!AI_GetTargetSanityCheck(oLastTarget) || - // 2. ...Or must pass a % roll to change (or check for new) targets... - d100() <= GetBoundriedAIInteger(AI_RANGED_LAST_TO_NEW_TARGET_CHANCE, 20, 100) || - // 3. ...OR last target attacked for X rounds we limit ourselves to. - bBreak >= nMaxTurnsAttackingX)) - { - // 1. Set up all seen, else all heard, to the range array. - nCnt = 1; - nRemainingTargets = 0; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - nRemainingTargets++; - SetLocalObject(OBJECT_SELF, ARRAY_RANGED_ENEMY + IntToString(nRemainingTargets), oSetUpTarget); - // Get Next seen - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - // If we don't have any seen, used heard. - if(!nRemainingTargets) - { - nCnt = 1; - nRemainingTargets = 0; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - nRemainingTargets++; - SetLocalObject(OBJECT_SELF, ARRAY_RANGED_ENEMY + IntToString(nRemainingTargets), oSetUpTarget); - // Get Next seen - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt)); - } - } - // If not valid, set to melee target at the end - - // Do we have exactly 1 target? (nRemainingTargets == 1) - if(nRemainingTargets == 1) - { - // Then we make this our target and end it. - GlobalRangedTarget = GetLocalObject(OBJECT_SELF, ARRAY_RANGED_ENEMY + "1"); - } - // Else we set up using range ETC, if we have more then 1. - else if(nRemainingTargets) - { - // Range - they are already in range order. As it is used for - // spells, it uses the same function. - // Range - Used only for ranged phisical attacks and spell attacks (TARGETING_RANGE) - // - Melee - Range is used to see what it can reach, and the MAX and MIN are taken to account - // AC - Used only for phisical attacks (TARGETING_AC) - // Saving Throws - Used only for spell attacks (TARGETING_SAVES) - // Phisical Protections - Used for both spells and phisical attacks (TARGETING_PHISICALS) - // Base Attack Bonus - Used for both spells and phisical attacks (TARGETING_BAB) - // Hit Dice - Used for both spells and phisical attacks (TARGETING_HITDICE) - // HP Percent - Used for both spells and phisical attacks (TARGETING_HP_PERCENT) - // HP Current - Used for both spells and phisical attacks (TARGETING_HP_CURRENT) - // HP Maximum - Used for both spells and phisical attacks (TARGETING_HP_MAXIMUM) - // 0. Sneak attack check - if(GetHasFeat(FEAT_SNEAK_ATTACK)) - { - // We normally get the nearest enemy who is not attacking us, and - // actually stop! - AI_TargetingArrayIntegerStore(9, ARRAY_RANGED_ENEMY); - - // Get the closest who isn't attacking us. - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_TEMP_ARRAY + "1"); - if(GetAttackTarget(oSetUpTarget) != OBJECT_SELF) - { - GlobalMeleeTarget = oSetUpTarget; - nRemainingTargets = FALSE; - } - // If we have trouble using that one, IE they are attacking us, we - // just use normal methods. - - // Delete temp array - AI_TargetingArrayDelete(ARRAY_TEMP_ARRAY); - } - nMinimum = GetAIInteger(TARGETING_RANGE + MINIMUM); - // 1. Do we do range? - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_RANGE); - nMaximum = GetAIInteger(TARGETING_RANGE + MAXIMUM); - - // We then set the array up in a new temp array. - AI_TargetingArrayDistanceStore(ARRAY_RANGED_ENEMY, ARRAY_TEMP_ARRAY); - // We loop range. Maximum one can be from another when got to the - // minimum is 5.0 M - nRemainingTargets = AI_TargetingArrayLimitTargetsFloat(ARRAY_RANGED_ENEMY, nTypeOfTarget, 5.0, nMinimum, nMaximum); - } - // 2. AC - nMinimum = GetAIInteger(TARGETING_AC + MINIMUM); - // Do we do AC? And over one target... - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_AC); - nMaximum = GetAIInteger(TARGETING_AC + MAXIMUM); - - // We then set the array up in a new temp array. 1 = AC. - AI_TargetingArrayIntegerStore(1, ARRAY_RANGED_ENEMY); - - // We loop through all the targets in the temp array (we also - // delete the temp array targets!) and set what ones we want to target - // based on AC. - // - Continue until nMinimum is reached. - // - Never go over nMaximum - // - After nMinimum we make sure the AC differences is not a major one of - // over 5. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, 5, nMinimum, nMaximum); - } - // Most others are similar (and all integer values so easy to check) - // 3. Phisical protections. - nMinimum = GetAIInteger(TARGETING_PHISICALS + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_PHISICALS); - nMaximum = GetAIInteger(TARGETING_PHISICALS + MAXIMUM); - // We then set the array up in a new temp array. 3 = phisicals. - AI_TargetingArrayIntegerStore(3, ARRAY_RANGED_ENEMY); - // We loop as AC, basically. As it is stored based on the amount - // of DR offered, limit is 0, not 6. Can't be any different. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, 0, nMinimum, nMaximum); - } - // 4. BAB - nMinimum = GetAIInteger(TARGETING_BAB + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_BAB); - nMaximum = GetAIInteger(TARGETING_BAB + MAXIMUM); - // We then set the array up in a new temp array. 4 = BAB - AI_TargetingArrayIntegerStore(4, ARRAY_RANGED_ENEMY); - // We loop as AC, basically. As it is BAB, IE how much chance - // they'll hit us (they might all hit on a 20, but it also shows - // who are the best fighters!). Set to 5, like AC. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, 5, nMinimum, nMaximum); - } - // 5. Hit Dice - nMinimum = GetAIInteger(TARGETING_HITDICE + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HITDICE); - nMaximum = GetAIInteger(TARGETING_HITDICE + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(5, ARRAY_RANGED_ENEMY); - // We loop as AC. Hit Dice is even easier. We set the limit to - // a max of 4. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, 4, nMinimum, nMaximum); - } - // 6. Percent HP - nMinimum = GetAIInteger(TARGETING_HP_PERCENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_PERCENT); - nMaximum = GetAIInteger(TARGETING_HP_PERCENT + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(6, ARRAY_RANGED_ENEMY); - // We loop as AC. Current Hit Points are easy, and are done - // by %ages. We set the % to 15 difference max. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, 15, nMinimum, nMaximum); - } - // 7. Current HP - nMinimum = GetAIInteger(TARGETING_HP_CURRENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_CURRENT); - nMaximum = GetAIInteger(TARGETING_HP_CURRENT + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(7, ARRAY_RANGED_ENEMY); - // We loop as AC. Current Hit points? Well, we set this limit to - // Our Hit Dice * 2. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, GlobalOurHitDice * 2, nMinimum, nMaximum); - } - // 8. Maximum HP - nMinimum = GetAIInteger(TARGETING_HP_MAXIMUM + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_MAXIMUM); - nMaximum = GetAIInteger(TARGETING_HP_MAXIMUM + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(8, ARRAY_RANGED_ENEMY); - // We loop as AC. Max hit Hit points? Well, we set this limit to - // Our Hit Dice * 3. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_RANGED_ENEMY, nTypeOfTarget, GlobalOurHitDice * 3, nMinimum, nMaximum); - } - // End narrowing down on ARRAY_RANGED_ENEMY - - // If only one, choose it - if(nRemainingTargets == 1) - { - GlobalRangedTarget = GetLocalObject(OBJECT_SELF, ARRAY_RANGED_ENEMY + "1"); - } - // Check for 2+, if 0, we haven't got one to set! - else if(nRemainingTargets >= 2) - { - // Else Roll dice - nCnt = Random(nRemainingTargets) + 1; - // Set random target - GlobalRangedTarget = GetLocalObject(OBJECT_SELF, ARRAY_RANGED_ENEMY + IntToString(nCnt)); - } - } - } - // Else, it is oLastTarget that will be our target - else if(AI_GetTargetSanityCheck(oLastTarget)) - { - // Only set this if oLastTarget is valid. It might not be. Thanks Chris (1.4 fix) - GlobalRangedTarget = oLastTarget; - } - - // If not valid, set to melee target (Can happen if we have no ranged weapon) - if(!AI_GetTargetSanityCheck(GlobalRangedTarget)) - { - GlobalRangedTarget = GlobalMeleeTarget; - } - - // If it is a new target, reset attacking counter to 0 - if(GlobalRangedTarget != oLastTarget) - { - DeleteAIInteger(AI_RANGED_TURNS_ATTACKING); - } - -/*::////////////////////////////////////////////// - Spell targeting - - Spell targeting is similar to ranged targeting. It is only reset if - iResetTargets is true. - - We never actually set a target if they are totally immune to our spells, uses - AI_SpellResistanceImmune for the checks. -//::////////////////////////////////////////////*/ - - // Do we want to change melee targets? - oLastTarget = GetAIObject(AI_LAST_SPELL_TARGET); - - // bValid is the counter for attacking target X... - bBreak = GetAIInteger(AI_SPELL_TURNS_ATTACKING); - bBreak++; - SetAIInteger(AI_SPELL_TURNS_ATTACKING, bBreak); - // We set this to 0 if we our oLastTarget != GlobalMeleeTarget below changing. - - // - No valid override target - if(!GetIsObjectValid(GlobalRangedTarget) && - // 1a. If the last target isn't a sane target... - (!AI_GetTargetSanityCheck(oLastTarget) || - // 1b. The last target has an immune level of 9 (we reset targets each possible time - // then) - GetLocalInt(oLastTarget, AI_SPELL_IMMUNE_LEVEL) >= 9 || - // 2. ...Or must pass a % roll to change (or check for new) targets... - d100() <= GetBoundriedAIInteger(AI_SPELL_LAST_TO_NEW_TARGET_CHANCE, 20, 100) || - // 3. ...OR last target attacked for X rounds we limit ourselves to. - bBreak >= nMaxTurnsAttackingX)) - { - // 1. Set up all seen, else all heard, to the range array. - nCnt = 1; - nRemainingTargets = 0; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - // Totally immune to our spells - ignore! - if(!AI_SpellResistanceImmune(oSetUpTarget) && - GetLocalInt(GlobalSpellTarget, AI_SPELL_IMMUNE_LEVEL) < 9) - { - nRemainingTargets++; - SetLocalObject(OBJECT_SELF, ARRAY_SPELL_ENEMY + IntToString(nRemainingTargets), oSetUpTarget); - } - // Get Next seen - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - // If we don't have any seen, used heard. - if(!nRemainingTargets) - { - nCnt = 1; - nRemainingTargets = 0; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt)); - while(GetIsObjectValid(oSetUpTarget)) - { - // Totally immune to our spells - ignore! - if(!AI_SpellResistanceImmune(oSetUpTarget) && - GetLocalInt(GlobalSpellTarget, AI_SPELL_IMMUNE_LEVEL) < 9) - { - nRemainingTargets++; - SetLocalObject(OBJECT_SELF, ARRAY_SPELL_ENEMY + IntToString(nRemainingTargets), oSetUpTarget); - } - // Get Next seen - nCnt++; - oSetUpTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_HEARD + IntToString(nCnt)); - } - } - // If not valid, its invalid! As this is the last thing, return -1. - // This CAN happen! - // - If we have all targets naturally immune to spells via. spell reistance. - // we can set GlobalNormalSpellsNoEffectLevel to 10, below, to stop all spells - // - After this lot of things, we do check for validness and set to melee target if no one else - - // MELEE Targets get checked for LOS, so they should always move - // to people we should attack ABOVE - // Do we have exactly 1 target? (nRemainingTargets == 1) - if(nRemainingTargets == 1) - { - // Then we make this our target and end it. - GlobalSpellTarget = GetLocalObject(OBJECT_SELF, ARRAY_SPELL_ENEMY + "1"); - } - // Else we set up using range ETC, if we have more then 1. - else if(nRemainingTargets > 1) - { - // ARRAY_SPELL_ENEMY - // Similar to Ranged attacking for range setting :-D - - // Range - they are already in range order. As it is used for - // spells, it uses the same function. - - // PC, Mantals. - // Range - Used only for ranged phisical attacks and spell attacks (TARGETING_RANGE) - // - Melee - Range is used to see what it can reach, and the MAX and MIN are taken to account - // AC - Used only for phisical attacks (TARGETING_AC) - // Saving Throws - Used only for spell attacks (TARGETING_SAVES) - // Phisical Protections - Used for both spells and phisical attacks (TARGETING_PHISICALS) - // Base Attack Bonus - Used for both spells and phisical attacks (TARGETING_BAB) - // Hit Dice - Used for both spells and phisical attacks (TARGETING_HITDICE) - // HP Percent - Used for both spells and phisical attacks (TARGETING_HP_PERCENT) - // HP Current - Used for both spells and phisical attacks (TARGETING_HP_CURRENT) - // HP Maximum - Used for both spells and phisical attacks (TARGETING_HP_MAXIMUM) - - // -1. Is it a PC... - // - Type 10 - nMinimum = GetAIInteger(TARGETING_ISPC + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_ISPC); - nMaximum = GetAIInteger(TARGETING_ISPC + MAXIMUM); - // We then set the array up in a new temp array. 10 = PC. - AI_TargetingArrayIntegerStore(10, ARRAY_SPELL_ENEMY); - // We loop and set up, with no difference in PC status, IE we should always choose those who are PCs. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 0, nMinimum, nMaximum); - } - // 0. Mantals - // - Type 10 - nMinimum = GetAIInteger(TARGETING_ISPC + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_ISPC); - nMaximum = GetAIInteger(TARGETING_ISPC + MAXIMUM); - // We then set the array up in a new temp array. 10 = PC. - AI_TargetingArrayIntegerStore(10, ARRAY_SPELL_ENEMY); - // We loop and set up, with no difference in PC status, IE we should always choose those who are PCs. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 0, nMinimum, nMaximum); - } - nMinimum = GetAIInteger(TARGETING_RANGE + MINIMUM); - // 1. Do we do range? - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_RANGE); - nMaximum = GetAIInteger(TARGETING_RANGE + MAXIMUM); - - // We then set the array up in a new temp array - AI_TargetingArrayDistanceStore(ARRAY_SPELL_ENEMY, ARRAY_TEMP_ARRAY); - // We loop range. Maximum one can be from another when got to the - // minimum is 5.0 M - nRemainingTargets = AI_TargetingArrayLimitTargetsFloat(ARRAY_SPELL_ENEMY, nTypeOfTarget, 5.0, nMinimum, nMaximum); - } - // 2. Saving Throws - nMinimum = GetAIInteger(TARGETING_SAVES + MINIMUM); - // Do we do saves? And over one target... - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_SAVES); - nMaximum = GetAIInteger(TARGETING_SAVES + MAXIMUM); - - // We then set the array up in a new temp array. 2 = total saves. - AI_TargetingArrayIntegerStore(2, ARRAY_SPELL_ENEMY); - - // Saves are basically a spells' AC, or at least may hamper - // spells' power. - // - difference of 4 - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 4, nMinimum, nMaximum); - } - // Most others are similar (and all integer values so easy to check) - // 3. Phisical protections. - nMinimum = GetAIInteger(TARGETING_PHISICALS + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_PHISICALS); - nMaximum = GetAIInteger(TARGETING_PHISICALS + MAXIMUM); - // We then set the array up in a new temp array. 3 = phisicals. - AI_TargetingArrayIntegerStore(3, ARRAY_SPELL_ENEMY); - // We loop as AC, basically. As it is stored based on the amount - // of DR offered, limit is 0, not 6. Can't be any different. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 0, nMinimum, nMaximum); - } - // 4. BAB - nMinimum = GetAIInteger(TARGETING_BAB + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_BAB); - nMaximum = GetAIInteger(TARGETING_BAB + MAXIMUM); - // We then set the array up in a new temp array. 4 = BAB - AI_TargetingArrayIntegerStore(4, ARRAY_SPELL_ENEMY); - // We loop as AC, basically. As it is BAB, IE how much chance - // they'll hit us (they might all hit on a 20, but it also shows - // who are the best fighters!). Set to 5, like AC. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 5, nMinimum, nMaximum); - } - // 5. Hit Dice - nMinimum = GetAIInteger(TARGETING_HITDICE + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HITDICE); - nMaximum = GetAIInteger(TARGETING_HITDICE + MAXIMUM); - // We then set the array up in a new temp array. 5 = Hit dice - AI_TargetingArrayIntegerStore(5, ARRAY_SPELL_ENEMY); - // We loop as AC. Hit Dice is even easier. We set the limit to - // a max of 4. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 4, nMinimum, nMaximum); - } - // 6. Percent HP - nMinimum = GetAIInteger(TARGETING_HP_PERCENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_PERCENT); - nMaximum = GetAIInteger(TARGETING_HP_PERCENT + MAXIMUM); - // We then set the array up in a new temp array. 6 = % HP - AI_TargetingArrayIntegerStore(6, ARRAY_SPELL_ENEMY); - // We loop as AC. Current Hit Points are easy, and are done - // by %ages. We set the % to 15 difference max. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, 15, nMinimum, nMaximum); - } - // 7. Current HP - nMinimum = GetAIInteger(TARGETING_HP_CURRENT + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_CURRENT); - nMaximum = GetAIInteger(TARGETING_HP_CURRENT + MAXIMUM); - // We then set the array up in a new temp array. 7 = Current - AI_TargetingArrayIntegerStore(7, ARRAY_SPELL_ENEMY); - // We loop as AC. Current Hit points? Well, we set this limit to - // Our Hit Dice * 2. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, GlobalOurHitDice * 2, nMinimum, nMaximum); - } - // 8. Maximum HP - nMinimum = GetAIInteger(TARGETING_HP_MAXIMUM + MINIMUM); - if(nMinimum && nRemainingTargets >= 2) - { - // If so, is it lowest or highest? - nTypeOfTarget = GetAIInteger(TARGETING_HP_MAXIMUM); - nMaximum = GetAIInteger(TARGETING_HP_MAXIMUM + MAXIMUM); - // We then set the array up in a new temp array. 8 = Maximum - AI_TargetingArrayIntegerStore(8, ARRAY_SPELL_ENEMY); - // We loop as AC. Max hit Hit points? Well, we set this limit to - // Our Hit Dice * 3. - nRemainingTargets = AI_TargetingArrayLimitTargets(ARRAY_SPELL_ENEMY, nTypeOfTarget, GlobalOurHitDice * 3, nMinimum, nMaximum); - } - // End narrowing down on ARRAY_SPELL_ENEMY - - // If only one, choose it - if(nRemainingTargets == 1) - { - GlobalSpellTarget = GetLocalObject(OBJECT_SELF, ARRAY_SPELL_ENEMY + "1"); - } - // Check for 2+, if 0, we haven't got one to set! - else if(nRemainingTargets >= 2) - { - // Else Roll dice - nCnt = Random(nRemainingTargets - 1) + 1; - // Set random target - GlobalSpellTarget = GetLocalObject(OBJECT_SELF, ARRAY_SPELL_ENEMY + IntToString(nCnt)); - } - } - } - // Else, it is oLastTarget that will be our target - else if(AI_GetTargetSanityCheck(oLastTarget)) - { - // Only set this if oLastTarget is valid. It might not be. Thanks Chris (1.4 fix) - GlobalSpellTarget = oLastTarget; - } - - // If not (sane) valid, set to melee target - if(!AI_GetTargetSanityCheck(GlobalSpellTarget)) - { - GlobalSpellTarget = GlobalMeleeTarget; - } - - // If it is a new target, reset attacking counter to 0 - if(GlobalSpellTarget != oLastTarget) - { - DeleteAIInteger(AI_SPELL_TURNS_ATTACKING); - } - - // Set the final objects we chose - SetAIObject(AI_LAST_MELEE_TARGET, GlobalMeleeTarget); - SetAIObject(AI_LAST_SPELL_TARGET, GlobalSpellTarget); - SetAIObject(AI_LAST_RANGED_TARGET, GlobalRangedTarget); - - // Set Global* things for melee target - GlobalRangeToMeleeTarget = GetDistanceToObject(GlobalMeleeTarget); - GlobalMeleeTargetAC = GetAC(GlobalMeleeTarget); - // Generic check. - // - Set to TRUE, we should always have GlobalMeleeTarget as valid - GlobalAnyValidTargetObject = TRUE;//GetIsObjectValid(GlobalMeleeTarget); - - // Sort immunities - AI_SortSpellImmunities(); - - // Set Global* things for spell target - //GlobalNormalSpellsNoEffectLevel - // - The level of spells which are not affected - IE, if set to 3, then - // spell levels 0, 1, 2, 3 will NOT be cast. Abilites are still used! - - // REMEMBER: - // - We still can cast summons, and friendly spells! - // - AOE spells may still affect someone in range - // - Breaches can breach natural spell resistance. - - // If they are spell resistance immune, we do not cast any normal spells - // against them, except if we are a mage class - // * We only obviously get a spell resistance immune person if we - // have no one who is not immune via. SR. If they are immune, we just set - // to not use spells. - if(AI_SpellResistanceImmune(GlobalSpellTarget)) - { - // Note: We set the breach level to max, 5, so that we use breaches - // to bring down the SR of an enemy! - // * This 5 number is checked just below, for when GlobalDispelTarget is set. - // To do this, we will breach this target - GlobalDispelTargetHighestBreach = 5; - - // Class checks. If not a mage caster, we will not use spells - if(GlobalOurChosenClass != CLASS_TYPE_WIZARD && - GlobalOurChosenClass != CLASS_TYPE_SORCERER && - GlobalOurChosenClass != CLASS_TYPE_FEY) - { - // 10 means we do not want to cast any normal spells - GlobalNormalSpellsNoEffectLevel = 10; - } - else - { - // We will set this to 5, level 5 spells and under stopped, if - // we are a mage. This is done because SR isn't absolute, and also - // that some spells might get through... - GlobalNormalSpellsNoEffectLevel = 5; - } - } - - // Set the value to 10 if we have a 90% or greater chance of failing spells - // due to any armor, or any spell failure stuff. - if(GetArcaneSpellFailure(OBJECT_SELF) >= 90 && - GlobalNormalSpellsNoEffectLevel < 9) - { - // Always set to 10 if it is an effect - // * Never cast normal spells (monster abilties are fine!) - if(AI_GetAIHaveEffect(GlobalEffectSpellFailure)) - { - GlobalNormalSpellsNoEffectLevel = 10; - } - // - If we have auto-still, Leave it as it is if we can still all spells automatically - else if(!GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_3) && - !GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_2) && - !GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_1)) - { - // Else do not cast as in armor - GlobalNormalSpellsNoEffectLevel = 10; - } - } - - // We may set GlobalNormalSpellsNoEffectLevel to 1-4 if the enemy has some - // extra spell immunities. - if(GlobalNormalSpellsNoEffectLevel < 9 && - // Global setting needed - (GlobalIntelligence >= 9 || - GetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER))) - { - // This check now includes natural effect level - nValue = AI_GetSpellLevelEffect(GlobalSpellTarget); - if(GlobalNormalSpellsNoEffectLevel < nValue) - { - GlobalNormalSpellsNoEffectLevel = nValue; - } - } - - // Important variables regarding GlobalSpellTarget - GlobalSpellTargetWill = GetWillSavingThrow(GlobalSpellTarget); - GlobalSpellTargetFort = GetFortitudeSavingThrow(GlobalSpellTarget); - GlobalSpellTargetReflex = GetReflexSavingThrow(GlobalSpellTarget); - GlobalSpellTargetHitDice = GetHitDice(GlobalSpellTarget); - GlobalSpellTargetCurrentHitPoints = GetCurrentHitPoints(GlobalSpellTarget); - // This is one of the most important. - GlobalSeenSpell = GetObjectSeen(GlobalSpellTarget); - GlobalSpellTargetRace = MyPRCGetRacialType(GlobalSpellTarget); - // Range - GlobalSpellTargetRange = GetDistanceToObject(GlobalSpellTarget); - - // Set dispel target. - // 1.4 - if GlobalDispelTargetHighestBreach is already 5, we want to - // target the SR immune-to-spells person we are targeting. - if(GlobalDispelTargetHighestBreach == 5) - { - // Obviously valid. We only use SR Spell Breach reducing spells, unless - // they have Spell Resistance cast on them - GlobalDispelTarget = GlobalSpellTarget; - - // If they have spell resistance, we will attempt to dispel it normally, - // because it gives a massive boost to SR (11 + Caster level) and should - // make the target targetable for spells like normal. - if(GetHasSpellEffect(SPELL_SPELL_RESISTANCE, GlobalDispelTarget)) - { - GlobalDispelTargetHighestDispel = 5; - } - } - else - { - // Should dispel something normally. - - // * 1.4 - This now checks for if they uncommandable etc. - if(GetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_MAGES_MORE, AI_COMBAT_MASTER)) - { - // Sorcerors, to mages, to clerics, to druids. - GlobalDispelTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_SORCERER, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - // Checks for each: If the target is insane to attack, or uncommandable, ignore - if(!AI_GetTargetSanityCheck(GlobalDispelTarget) || - AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalDispelTarget)) - { - GlobalDispelTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_WIZARD, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - if(!AI_GetTargetSanityCheck(GlobalDispelTarget) || - AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalDispelTarget)) - { - GlobalDispelTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_CLERIC, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - if(!AI_GetTargetSanityCheck(GlobalDispelTarget) || - AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalDispelTarget)) - { - GlobalDispelTarget = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_DRUID, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - } - } - } - // None valid? set to spell target. Even fighters can use potions! - if(!AI_GetTargetSanityCheck(GlobalDispelTarget) || - AI_GetAIHaveEffect(GlobalEffectUncommandable, GlobalDispelTarget)) - { - GlobalDispelTarget = GlobalSpellTarget; - } - } - else - { - // Default to spell target if we don't target wizard classes specifically - GlobalDispelTarget = GlobalSpellTarget; - } - // If it *is* a good choice, we then set up dispelable enchantments. - // If it isn't, we don't, and thusly the global variable for dispel level is - // never set. - // * Already done sanity check - if(GetIsObjectValid(GlobalDispelTarget)) - { - // Set enchantments - AI_SetDispelableEnchantments(); - } - } - // Delete everything - AI_TargetingArrayDelete(ARRAY_TEMP_ENEMIES); - AI_TargetingArrayDelete(ARRAY_TEMP_ALLIES); - AI_TargetingArrayDelete(ARRAY_TEMP_ARRAY); - AI_TargetingArrayDelete(ARRAY_MELEE_ENEMY); - AI_TargetingArrayDelete(ARRAY_RANGED_ENEMY); - AI_TargetingArrayDelete(ARRAY_SPELL_ENEMY); - - DebugActionSpeak("*** TARGETING. Input Backup: " + GetName(oInputBackUpToAttack) + - "| MELEE: " + GetName(GlobalMeleeTarget) + "| M.VALID: " + IntToString(AI_GetTargetSanityCheck(GlobalMeleeTarget)) + "| M.SEEN: " + IntToString(GetObjectSeen(GlobalMeleeTarget)) + "| M.HEARD: " + IntToString(GetObjectHeard(GlobalMeleeTarget)) + - "| RANGED: " + GetName(GlobalRangedTarget) + "| R.VALID: " + IntToString(AI_GetTargetSanityCheck(GlobalRangedTarget)) + "| R.SEEN: " + IntToString(GetObjectSeen(GlobalRangedTarget)) + "| R.HEARD: " + IntToString(GetObjectHeard(GlobalRangedTarget)) + - "| SPELL: " + GetName(GlobalSpellTarget) + "| S.VALID: " + IntToString(AI_GetTargetSanityCheck(GlobalSpellTarget)) + "| S.SEEN: " + IntToString(GetObjectSeen(GlobalSpellTarget)) + "| S.HEARD: " + IntToString(GetObjectHeard(GlobalSpellTarget)) + - "| NEAR HEARD: " + GetName(GlobalNearestEnemyHeard) + "| VALID: " + IntToString(AI_GetTargetSanityCheck(GlobalNearestEnemyHeard)) + "| VALID2 " + IntToString(GlobalValidNearestHeardEnemy) + - "| NEAR SEEN: " + GetName(GlobalNearestEnemySeen) + "| VALID: " + IntToString(AI_GetTargetSanityCheck(GlobalNearestEnemySeen)) + "| VALID2 " + IntToString(GlobalValidNearestSeenEnemy)); - - // FALSE lets us continue with the script. - // - GlobalAnyValidTargetObject is set to TRUE if we want to attack anything. - return FALSE; -}// END ALL TARGETING - - -/*:://///////////////////////////////////////////// -//:: Name AttemptHostileSkills -//:://///////////////////////////////////////////// - This will use empathy, taunt, and if set, pickpocketing. Most are random, and - checks are made.Heal is done in healing functions.Done against best melee target, - or closest seen/heard. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -// Uses iSkill on GlobalMeleeTarget -// - Fired from AI_AttemptHostileSkills. -void AI_ActionUseSkillOnMeleeTarget(int iSkill) -{ - // 42: "[DCR:Skill] Using agressive skill (+Attack). [Skill] " + IntToString(iSkill) + " [Enemy]" + GetName(GlobalMeleeTarget) - DebugActionSpeakByInt(42, GlobalMeleeTarget, iSkill); - // We turn off hiding/searching - AI_ActionTurnOffHiding(); - // Simple most damaging - // - Equip shield first - AI_EquipBestShield(); - ActionEquipMostDamagingMelee(GlobalMeleeTarget); - ActionUseSkill(iSkill, GlobalMeleeTarget); - ActionWait(2.0); - ActionAttack(GlobalMeleeTarget); -} -int AI_AttemptHostileSkills() -{ - if(GlobalRangeToMeleeTarget < 4.0 && - !GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER) && - !SRA)// Spell ranged attacking = AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST - { - // Handles it better like this... - int iEmpathyDC, iRace; - // Either: Not turned off, and intelligence >= 3, OR forced, and has it. - if((!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER) && - GlobalIntelligence >= 3) || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER)) - { - //SpeakString("Seting for NO: " + IntToString(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER)) + " YES: " + IntToString(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER))); - // Need appropriate level of skill, checked On Spawn, or overriden... - AI_ActionUseSkillOnMeleeTarget(SKILL_PICK_POCKET); - return TRUE; - } - // If we have 50% in taunt (a decent amount), and concentration ETC are OK...do it! - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER) && - !GetLocalTimer(AI_TIMER_TAUNT)) - { - if(GlobalIntelligence >= 2 || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER)) - { - // Random determine if we use it... - if(GetSkillRank(SKILL_TAUNT) + Random(10) >= - GetSkillRank(SKILL_CONCENTRATION, GlobalMeleeTarget) + Random(10)) - { - // If randomly used, we set a timer for longer, and attack with it. - SetLocalTimer(AI_TIMER_TAUNT, 24.0); - // * Don't speak when silenced or deaf, 1.4 change. - if(!AI_GetAIHaveEffect(GlobalEffectDeaf) && !AI_GetAIHaveEffect(GlobalEffectSilenced)) - { - SpeakArrayString(AI_TALK_ON_TAUNT); - } - AI_ActionUseSkillOnMeleeTarget(SKILL_TAUNT); - return TRUE; - } - else // 2 rounds until next check... - { - SetLocalTimer(AI_TIMER_TAUNT, 12.0); - } - } - } - // Animal empathy. Int 3 - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER) && - !GetLocalTimer(AI_TIMER_EMPATHY)) - { - if(GlobalIntelligence >= 3 || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER)) - { - iEmpathyDC = 20; - iRace = MyPRCGetRacialType(GlobalMeleeTarget); - // we add 4 (to make DC 24 + HD) if a special animal. R_T_ANIMAL is DC 20 - if(iRace == RACIAL_TYPE_BEAST || iRace == RACIAL_TYPE_MAGICAL_BEAST) - { - iEmpathyDC += 4; - } - else if(iRace != RACIAL_TYPE_ANIMAL) - { - // Else, if we are not a beast, magical beast, nor animal, - // we don't use it! - SetLocalTimer(AI_TIMER_EMPATHY, 18.0); - // - Last skill we can use, so just return FALSE. - return FALSE; - } - // We check our skill against it... - if((GetSkillRank(SKILL_ANIMAL_EMPATHY) + 10) >= (GetHitDice(GlobalMeleeTarget) + 20)) - { - // If randomly used, we set a timer for longer, and attack with it. - SetLocalTimer(AI_TIMER_EMPATHY, 24.0); - AI_ActionUseSkillOnMeleeTarget(SKILL_ANIMAL_EMPATHY); - return TRUE; - } - else // 2 rounds until next check... - { - SetLocalTimer(AI_TIMER_EMPATHY, 12.0); - } - } - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name CastCombatHostileSpells -//:://///////////////////////////////////////////// - This will cast all buffs needed, or wanted, before actual combat. - EG bulls strength for HTH, Cats grace for ranged and so on. Rages - here, else it may run out if we use spells, and other lower spells as well. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ -int AI_AttemptFeatCombatHostile() -{ - // Get our right hand (primary) weapon - object oPrimaryWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND); - - // Of course, we use, or attempt to use, our Divine Domain Powers, if - // we have them! They are spells, of no talent (or no talent I want to check) - if(!AI_GetAIHaveSpellsEffect(GlobalHasDomainSpells)) - { - if(AI_ActionCastSpell(SPELLABILITY_BATTLE_MASTERY)) return TRUE; // STRENGTH domain - if(AI_ActionCastSpell(SPELLABILITY_DIVINE_STRENGTH)) return TRUE; // STRENGTH domain - if(AI_ActionCastSpell(SPELLABILITY_BATTLE_MASTERY)) return TRUE; // WAR domain - if(AI_ActionCastSpell(SPELLABILITY_DIVINE_TRICKERY)) return TRUE; // TRICKERY domain - } - // Special power. Not, I think, a domain one. - if(AI_ActionCastSpell(SPELLABILITY_ROGUES_CUNNING)) return TRUE; - - // These are good-ass strength spells. They are basically - // powerful combat-orientated, strenth-inducing ones :-D - // Divine Power: Category 10, benifical Enhance self. Lvl 4. - if(AI_ActionCastSpell(SPELL_DIVINE_POWER, OBJECT_SELF, 14, FALSE)) return TRUE; - - // We may cast cats grace, if they are 6M or over away, we have - // a ranged weapon equipped or we have lowish AC compared to HD. - if(GlobalOurAC < GlobalOurHitDice + 6 + Random(4) || - GlobalRangeToMeleeTarget > 6.0 || - GetWeaponRanged(oPrimaryWeapon)) - { - // Include harper cats grace. - if(!AI_GetAIHaveSpellsEffect(GlobalHasCatsGraceSpell)) - { - // Greater cats grace gives 2d4 + 1 - if(AI_ActionCastSpell(SPELL_GREATER_CATS_GRACE)) return TRUE; - - // Special harper feat version - if(AI_ActionUseSpellLikeFeat(FEAT_HARPER_CATS_GRACE, AI_SPELLABILITY_HARPER_CATS_GRACE)) return TRUE; - - // Cats Grace. Level 2 (Mage/Bard/Ranger). + d4() + 1 dexterity. - if(AI_ActionCastSpell(SPELL_CATS_GRACE, OBJECT_SELF, 12, FALSE)) return TRUE; - } - } - // Include blackguard bulls strength. - if(!AI_GetAIHaveSpellsEffect(GlobalHasBullsStrengthSpell)) - { - // Greater version gives 2d4 + 1. - if(AI_ActionCastSpell(SPELL_GREATER_BULLS_STRENGTH)) return TRUE; - - // Blackguard version - if(AI_ActionUseSpellLikeFeat(FEAT_BULLS_STRENGTH, SPELLABILITY_BG_BULLS_STRENGTH)) return TRUE; - - // Bulls Strength. Level 2 (Mage/Cleric/Bard/Paladin/Druid). + d4() + 1 strength. - if(AI_ActionCastSpell(SPELL_BULLS_STRENGTH, OBJECT_SELF, 12, FALSE)) return TRUE; - } - - // Other helping spells, lower ranks. If we can't hit much, we cast this. - // - Some help more then others. - // - We ignore some if in HTH and have low HD compared to spell. - if((GlobalOurHitDice < 15 || GlobalMeleeAttackers < 1) && - // We only add 15, as we don't apply strength ETC. at the mo. - (GlobalOurBaseAttackBonus - 15 < GlobalMeleeTargetAC) && - (!AI_GetAIHaveSpellsEffect(GlobalHasAidingSpell))) - { - // Prayer. Level 3 (Paladin/Cleric). +1 Attack, damage, saves to all allies in 10M Including self. - if(AI_ActionCastSpell(SPELL_PRAYER, OBJECT_SELF, 13, FALSE)) return TRUE; - if(GlobalOurHitDice < 14) - { - // Aid. Level 2 (Cleric/Paladin) 3 (Ranger) +1 Attack Rolls, +1d8 HP - if(AI_ActionCastSpell(SPELL_AID, OBJECT_SELF, 12, FALSE)) return TRUE; - if(GlobalOurHitDice < 12) - { - // Bless. Level 1 (Cleric/Paladin). +1 Saves, +1 Damage, to allies in area. - if(AI_ActionCastSpell(SPELL_BLESS, OBJECT_SELF, 11, FALSE)) return TRUE; - } - } - } - // Attack bonus spells/feats, that directly add to our attack bonus. - - // Divine might adds charisma bonus to Attack. - if(GetHasFeat(FEAT_TURN_UNDEAD)) - { - // +Cha bonus to attack bonus. - if(AI_ActionUseSpellLikeFeat(FEAT_DIVINE_MIGHT, SPELL_DIVINE_MIGHT)) return TRUE; - } - - // We now cast the spells which will affect our weapon (if we have one!) - // Only cast these if we have a valid right hand weapon. - if(GetIsObjectValid(oPrimaryWeapon) && - // Casts on melee weapons only, except if set to always use range - (!GetWeaponRanged(oPrimaryWeapon) || - GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER)) && - // We do it VIA. the medium of one integer. - !AI_GetAIHaveSpellsEffect(GlobalHasWeaponHelpSpell)) - { - // Cast best to worst, only one in affect at once, however. - - // Blackstaff. Great stuff for a STAFF ONLY. - if(GetBaseItemType(oPrimaryWeapon) == BASE_ITEM_QUARTERSTAFF) - { - // Blackstaff. Level 8 (Mage). Adds +4 enhancement bonus, On Hit: Dispel. - if(AI_ActionCastSpell(SPELL_BLACKSTAFF, oPrimaryWeapon, 18, FALSE)) return TRUE; - } - if(!GetItemHasItemProperty(oPrimaryWeapon, ITEM_PROPERTY_ENHANCEMENT_BONUS)) - { - // Greater Magical Weapon - up to +5 - // Greater Magic Weapon. Level 3 (Mage/Bard/Paladin) 4 (Cleric). Grants a +1/3 caster levels (to +5). - if(AI_ActionCastSpell(SPELL_GREATER_MAGIC_WEAPON, oPrimaryWeapon, 14, FALSE)) return TRUE; - } - // Blade Thurst - cast on any weapon. No bother to check type. - // Blade Thurst. Level 3 (Ranger). +3 Damage for a slashing weapon. - if(AI_ActionCastSpell(SPELL_BLADE_THIRST, oPrimaryWeapon, 13, FALSE)) return TRUE; - - // Cannot have On Hit property already - if(!GetItemHasItemProperty(oPrimaryWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES)) - { - // Bless weapon - if(MyPRCGetRacialType(GlobalMeleeTarget) == RACIAL_TYPE_UNDEAD) - { - // Bless weapon. Level 1 (Paladin). +1 Attack Bonus, +2d6 Damage to melee weapon VS undead - if(AI_ActionCastSpell(SPELL_BLESS_WEAPON, oPrimaryWeapon, 11, FALSE)) return TRUE; - } - - // Dark Fire. Level 3 (Cleric). 1d6 fire damage +1/level to a maximum of +10. - if(AI_ActionCastSpell(SPELL_DARKFIRE, oPrimaryWeapon, 13, FALSE)) return TRUE; - - // Flame Weapon. Level 2 (Mage). 1d4 fire damage +1/level to a maximum of +10. - if(AI_ActionCastSpell(SPELL_FLAME_WEAPON, oPrimaryWeapon, 12, FALSE)) return TRUE; - } - - // Not if we are already keen :-) - if(!GetItemHasItemProperty(oPrimaryWeapon, ITEM_PROPERTY_KEEN)) - { - // Keen Edge. Level 1 (Bard/Mage/Paladin). Adds the Keen property to a weapon - if(AI_ActionCastSpell(SPELL_BLADE_THIRST, oPrimaryWeapon, 11, FALSE)) return TRUE; - } - - // Magic weapon - +1 - if(!GetItemHasItemProperty(oPrimaryWeapon, ITEM_PROPERTY_ENHANCEMENT_BONUS)) - { - // Magic Weapon. Level 1 (Bard/Cleric/Paladin/Ranger/Mage). +1 Enchantment to melee weapon. - if(AI_ActionCastSpell(SPELL_MAGIC_WEAPON, oPrimaryWeapon, 11, FALSE)) return TRUE; - } - } - // We also will throw grenades here, if we are at a cirtain HD - 5 or under, - // because we may have ignored them in the spells part. - - // Try grenades - we always throw these. They are about level 1 standard of DC's - // and effects. Not too bad, when NPC's get a chance to use them! :-) - if(GlobalOurHitDice <= 5 || - // Will throw at range if under 10 HD - (GlobalRangeToMeleeTarget > 5.0 && GlobalOurHitDice < 10)) - { - if(AI_AttemptGrenadeThrowing(GlobalMeleeTarget)) return TRUE; - } - - // Here, we use all potions if set too... -/* if(GetSpawnInCondition(AI_FLAG_COMBAT_USE_ALL_POTIONS, AI_COMBAT_MASTER)) - { - int nUsed = FALSE; - // Check protection potion - if(PotionPro > FALSE && !GetHasSpellEffect(PotionPro)) - { - nUsed = PotionPro; - ActionUseTalentOnObject(tPotionPro, OBJECT_SELF); - } - // Check enhancement potion - else if(PotionEnh > FALSE && !GetHasSpellEffect(PotionEnh)) - { - nUsed = PotionEnh; - ActionUseTalentOnObject(tPotionEnh, OBJECT_SELF); - } - // Check conditional potion - else if(PotionCon > FALSE && !GetHasSpellEffect(PotionCon)) - { - nUsed = PotionCon; - ActionUseTalentOnObject(tPotionCon, OBJECT_SELF); - } - if(nUsed > FALSE) - { - // 43 "[DCR:Pre-Melee Spells] All Potions Using. [Spell ID] " + IntToString(nUsed) - DebugActionSpeakByInt(43, OBJECT_INVALID, nUsed); - return TRUE; - } - }*/ - - // Rage - check effects via the set effects.. - if(!AI_GetAIHaveSpellsEffect(GlobalHasRageSpells)) - { - // Rage: either: - // +6, to STR, CON, +4 will. -2 AC. - // or +4, to STR, CON, +2 will. -2 AC. - if(AI_ActionUseSpellLikeFeat(FEAT_BARBARIAN_RAGE, SPELLABILITY_BARBARIAN_RAGE)) return TRUE; - - // Blood frenzy. Level 2 (druid) as rage, for the most part. +2, to STR, CON, Will, -1 AC though. - if(AI_ActionCastSpell(SPELL_BLOOD_FRENZY, OBJECT_SELF, 12)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_RAGE_5)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_RAGE_4)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_FEROCITY_3)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_INTENSITY_3)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_RAGE_3)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_INTENSITY_2)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_FEROCITY_2)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_INTENSITY_1)) return TRUE; - if(AI_ActionCastSpell(SPELLABILITY_FEROCITY_1)) return TRUE; - } - // Cast expeditious retreat if we want to get into combat quicker - if(GlobalRangeToMeleeTarget >= 20.0 && - !GetWeaponRanged(oPrimaryWeapon) && - !AI_GetAIHaveEffect(GlobalEffectHaste) && - !GetHasSpellEffect(SPELL_EXPEDITIOUS_RETREAT)) - { - // Expeditious Retreat. Level 1 (Bard/Mage). +150% movement speed. - if(AI_ActionCastSpell(SPELL_EXPEDITIOUS_RETREAT, OBJECT_SELF, 11, FALSE)) return TRUE; - } - // Cast true strike if we are RIGHT near the melee target, or are using - // a ranged weapon - if((GlobalRangeToMeleeTarget < 3.0 || - GetWeaponRanged(oPrimaryWeapon)) && - !GetHasSpellEffect(SPELL_TRUE_STRIKE)) - { - // True Strike. Level 1 (Mage). +20 attack bonus for 9 seconds (IE about 1, or 2, attacks) - if(AI_ActionCastSpell(SPELL_TRUE_STRIKE, OBJECT_SELF, 11, FALSE)) - { - // 44: "[DCR:Pre-Melee Spells] True Strike Emptive attack [Target] " + GetName(GlobalMeleeTarget) - DebugActionSpeakByInt(44, GlobalMeleeTarget); - // Add attack to end of action queue. Should do this next round - // anyway - if(GlobalRangeToMeleeTarget <= 4.0) - { - ActionEquipMostDamagingMelee(GlobalMeleeTarget); - } - else - { - ActionEquipMostDamagingRanged(GlobalMeleeTarget); - } - ActionAttack(GlobalMeleeTarget); - return TRUE; - } - } - return FALSE; -} -/*:://///////////////////////////////////////////// -//:: Name PolyMorph -//:://///////////////////////////////////////////// - If we are not affected by polymorph, going down from - best to worst, we will polymorph. Use after combat buffs, - after spells (although because some are random, this - may fire when they still have some) and before we attack. -//:://///////////////////////////////////////////// -//:: Created By: Jasperre -//::////////////////////////////////////////////*/ - -// This will cheat-cast nSpell at oTarget. Note that we will know if we have it -// by checking what appearance we have. -void AI_ActionCastShifterSpell(int nSpell, object oTarget = OBJECT_SELF) -{ - // Cheat cast the spell. We know we must have it. - ActionCastSpellAtObject(nSpell, oTarget, METAMAGIC_NONE, TRUE); -} -// This willcast nFirst -> nFirst + nAmount polymorph spell. It will check -// if we have nMaster (Either by feat or spell, depending on bFeat). -// TRUE if we polymorph. -// * Only decrements if bRemove is TRUE -int AI_ActionPolymorph(int nMaster, int nFirstSpell, int nAmount, int bFeat = FALSE, int bRemove = TRUE) -{ - if((bFeat && GetHasFeat(nMaster)) || - (!bFeat && GetHasSpell(nMaster))) - { - // Randomise - // EG: Got from 300 to 303, so nAmount is 3 and we input 300 as the start one, - // meaning we add 0 (to get 300) 1 (to get 301) or 2 (to get 302, all 3 options covered) - int nCast = nFirstSpell + Random(nAmount); - - // Debug - // 11: "[DCR:Casting] SubSpecialSpell. [ID] " + IntToString(iInput) + " [Target] " + GetName(oInput) + " [Location] " + sInput; break; - DebugActionSpeakByInt(11, OBJECT_SELF, nCast); - - // If a spell, we concentration check it :-) - if(!bFeat) - { - AI_AttemptConcentrationCheck(GlobalSpellTarget); - } - - // Cast it - ActionCastSpellAtObject(nCast, OBJECT_SELF, METAMAGIC_NONE, TRUE); - - if(bRemove) - { - // Decrement one or the other - if(bFeat) - { - // Feat - DecrementRemainingFeatUses(OBJECT_SELF, nMaster); - } - else - { - // Spell - DecrementRemainingSpellUses(OBJECT_SELF, nMaster); - } - } - // Add Action Attack melee target :-D - ActionAttack(GlobalMeleeTarget); - return TRUE; - } - return FALSE; -} -// Will polymorph Self if not already so. Will return TRUE if it casts best on self. -int AI_AttemptPolyMorph() -{ - if(!GetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER) && - // We don't polymorph as an archer. - !GetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER)) - { - // Spells that are tensers transformation and polymorth here. - // Will cast 100% on all shapechanges. Need to make it check for any spells. - // Check values needed - if(!AI_GetAIHaveEffect(GlobalEffectPolymorph)) - { - // Epic shapechanging feats - // - Dragon - just different breaths. - // 707 Greater_Wild_Shape_Red_dragon - // 708 Greater_Wild_Shape_Blue_dragon - // 709 Greater_Wild_Shape_Green_dragon - if(AI_ActionPolymorph(FEAT_EPIC_WILD_SHAPE_DRAGON, 707, 3, TRUE)) return TRUE; - // Construct feat - // 738 Construct_Shape_StoneGolem - // 739 Construct_Shape_DemonFleshGolem - // 740 Construct_Shape_IronGolem - if(AI_ActionPolymorph(FEAT_EPIC_CONSTRUCT_SHAPE, 738, 3, TRUE)) return TRUE; - // Outsider shape - // 733 Outsider_Shape_Azer - // 734 Outsider_Shape_Rakshasa - // 735 Outsider_Shape_DeathSlaad - if(AI_ActionPolymorph(FEAT_EPIC_OUTSIDER_SHAPE, 733, 3, TRUE)) return TRUE; - // Undead - any of them - // 704 Undead_Shape_risen_lord - // 705 Undead_Shape_Vampire - // 706 Undead_Shape_Spectre - if(AI_ActionPolymorph(FEAT_EPIC_WILD_SHAPE_UNDEAD, 704, 3, TRUE)) return TRUE; - // Shapechange - // 392 Shapechange_RED_DRAGON - // 393 Shapechange_FIRE_GIANT - // 394 Shapechange_BALOR - // 395 Shapechange_DEATH_SLAAD - // 396 Shapechange_IRON_GOLEM - if(AI_ActionPolymorph(SPELL_SHAPECHANGE, 392, 5)) return TRUE; - // Druid feat. Elements. - // 397 Elemental_Shape_FIRE - // 398 Elemental_Shape_WATER - // 399 Elemental_Shape_EARTH - // 400 Elemental_Shape_AIR - if(AI_ActionPolymorph(FEAT_EPIC_DRUID_INFINITE_ELEMENTAL_SHAPE, 397, 4, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_ELEMENTAL_SHAPE, 397, 4, TRUE)) return TRUE; - // Wildshape 4 is next best - // - Infinite and normal shapes - // - Not in any order (doh!) - // 671 Greater_Wild_Shape_Beholder - // 679 Greater_Wild_Shape_Medusa - // 691 Greater_Wild_Shape_Mindflayer - // 694 Greater_Wild_Shape_DireTiger - // Random choose one - int nSpell = 671; - switch(d4()) - { - case 1: nSpell = 671; break; - case 2: nSpell = 679; break; - case 3: nSpell = 691; break; - case 4: nSpell = 694; break; - } - if(AI_ActionPolymorph(FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_4, nSpell, FALSE, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_GREATER_WILDSHAPE_4, nSpell, TRUE)) return TRUE; - // Humanoid shape - // 682 Humanoid_Shape_Drow - // 683 Humanoid_Shape_Lizardfolk - // 684 Humanoid_Shape_KoboldAssa - if(AI_ActionPolymorph(FEAT_EPIC_SHIFTER_INFINITE_HUMANOID_SHAPE, 682, 3, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_HUMANOID_SHAPE, 682, 3, TRUE)) return TRUE; - // 3 - Infinite and normal shapes - // 3 - Not in any order (doh!) - // 670 Greater_Wild_Shape_Basilisk - // 673 Greater_Wild_Shape_Drider - // 674 Greater_Wild_Shape_Manticore - // Random choose one - nSpell = 670; - switch(d3()) - { - case 1: nSpell = 670; break; - case 2: nSpell = 673; break; - case 3: nSpell = 674; break; - } - if(AI_ActionPolymorph(FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_3, nSpell, FALSE, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_GREATER_WILDSHAPE_3, nSpell, TRUE)) return TRUE; - // 2 - Infinite and normal shapes - // 2 - Not in any order (doh!) - // 672 Greater_Wild_Shape_Harpy - // 678 Greater_Wild_Shape_Gargoyle - // 680 Greater_Wild_Shape_Minotaur - if(AI_ActionPolymorph(FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_2, nSpell, FALSE, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_GREATER_WILDSHAPE_2, nSpell, TRUE)) return TRUE; - // 1 - Infinite and normal shapes - In order - // 658 Greater_Wild_Shape_Wyrmling_Red - // 659 Greater_Wild_Shape_Wyrmling_Blue - // 660 Greater_Wild_Shape_Wyrmling_Black - // 661 Greater_Wild_Shape_Wyrmling_White - // 662 Greater_Wild_Shape_Wyrmling_Green - if(AI_ActionPolymorph(FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_1, 658, 5, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_GREATER_WILDSHAPE_1, 658, 5, TRUE)) return TRUE; - - // We can have items for this polymorph spell :-) - if(AI_ActionCastSpell(SPELL_TENSERS_TRANSFORMATION, OBJECT_SELF, 16)) return TRUE; - - // Animal wildshape - // 401 Wild_Shape_BROWN_BEAR - // 402 Wild_Shape_PANTHER - // 403 Wild_Shape_WOLF - // 404 Wild_Shape_BOAR - // 405 Wild_Shape_BADGER - if(AI_ActionPolymorph(FEAT_EPIC_DRUID_INFINITE_WILDSHAPE, 401, 5, TRUE, FALSE)) return TRUE; - if(AI_ActionPolymorph(FEAT_WILD_SHAPE, 401, 5, TRUE)) return TRUE; - - // Shapechange into - Troll, Pixie, Uber Hulk, Giant Spider, Zombie - // 387 Polymorph_GIANT_SPIDER - // 388 Polymorph_TROLL - // 389 Polymorph_UMBER_HULK - // 390 Polymorph_PIXIE - // 391 Polymorph_ZOMBIE - if(AI_ActionPolymorph(SPELL_POLYMORPH_SELF, 387, 5)) return TRUE; - } - else /*Else we have it*/if(d10() <= 6) - { - // The special abilities VIA. Shapechanger! - // - We check our appearance and cast as appropriately. - // - 60% base chance of casting an ability or spell. - - switch(GetAppearanceType(OBJECT_SELF)) - { - case APPEARANCE_TYPE_ELEMENTAL_WATER: - case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: - { - // We can cast Pulse Drown unlimited times/day. - // Only use if above 50HP, and enemy has less then 20 Fortitude - // and is within 4M - if(GlobalRangeToMeleeTarget < 4.0 && GlobalOurCurrentHP > 50 && - GetFortitudeSavingThrow(GlobalMeleeTarget) < 18) - { - AI_ActionCastShifterSpell(SPELLABILITY_PULSE_DROWN); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_ELEMENTAL_AIR: - case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: - { - // Can use Pulse: Whirlwind unlimited times/day. - // DC 14 or knockdown + some damage. - if(GlobalRangeToMeleeTarget < 4.0 && GetReflexSavingThrow(GlobalMeleeTarget) < 15) - { - AI_ActionCastShifterSpell(SPELLABILITY_PULSE_WHIRLWIND); - return TRUE; - } - return FALSE; - } - break; - // Wyrmling Breath Attacks are in the default dragon behavnOur - // (we check for dragon appearance and check talents) - case APPEARANCE_TYPE_MANTICORE: - { - // Can use Spike Attack (Greater Wild Shape Version) at - // some reflex save or other. - if(GlobalRangeToMeleeTarget < 10.0 && - GetReflexSavingThrow(GlobalMeleeTarget) < (18+ d6())) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_GWILDSHAPE_SPIKES, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - // Drow/Drider : Don't bother with darkness. - case APPEARANCE_TYPE_HARPY:// Harpy! 491 - { - // Harpysong - charm enemies. Will saving throw. - if(GlobalRangeToMeleeTarget < 4.0 && - GetWillSavingThrow(GlobalMeleeTarget) < (14 + d4())) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_HARPYSONG); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_BASILISK: - case APPEARANCE_TYPE_MEDUSA: - { - // Limited petrify gaze attack - // Pretty cool. - if(GetLocalInt(OBJECT_SELF,"X2_GWILDSHP_LIMIT_" + IntToString(AI_SPELLABILITY_GWILDSHAPE_STONEGAZE)) && - GlobalRangeToMeleeTarget < 4.0 && - GetFortitudeSavingThrow(GlobalMeleeTarget) < (14 + d4())) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_GWILDSHAPE_STONEGAZE, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_MINDFLAYER: // Mind Flayer 413 - { - // Psionic Inertial Barrier ability - unlimited uses. - if(!GetHasSpellEffect(AI_SPELLABILITY_PSIONIC_INERTIAL_BARRIER)) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_PSIONIC_INERTIAL_BARRIER); - return TRUE; - } - // Else, we have Mind Blast. Limited uses, but stuns! - else if(!GetHasSpellEffect(AI_SPELLABILITY_GWILDSHAPE_MINDBLAST, GlobalMeleeTarget) && - GetLocalInt(OBJECT_SELF,"X2_GWILDSHP_LIMIT_" + IntToString(AI_SPELLABILITY_GWILDSHAPE_MINDBLAST)) && - GlobalRangeToMeleeTarget < 8.0) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_GWILDSHAPE_MINDBLAST); - return TRUE; - } - return FALSE; - } - break; - // Vampires have domination gaze (limited uses) - case APPEARANCE_TYPE_VAMPIRE_FEMALE: // Vampires - case APPEARANCE_TYPE_VAMPIRE_MALE: // Vampires - { - // Limited Domination Gazes. - if(GetLocalInt(OBJECT_SELF, "X2_GWILDSHP_LIMIT_" + IntToString(AI_SPELLABILITY_VAMPIRE_DOMINATION_GAZE)) && - !GetHasSpellEffect(AI_SPELLABILITY_VAMPIRE_DOMINATION_GAZE, GlobalMeleeTarget) && - GetWillSavingThrow(GlobalMeleeTarget) < (14 + d4()) && - // This is a simple check for "have we got a dominated guy already" - !AI_GetSpellTargetImmunity(GlobalImmunityDomination)) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_VAMPIRE_DOMINATION_GAZE, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_SPECTRE: - { - // Unlimited invisibility, and unlimited "spectre attack". - // 60% chance of using the spectre attack. - if(d10() <= 6 && GetFortitudeSavingThrow(GlobalMeleeTarget) < (14 + d10()) && - !GetIsImmune(GlobalMeleeTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL)) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_SHIFTER_SPECTRE_ATTACK, GlobalMeleeTarget); - return TRUE; - } - // Else invisiblity - if(!AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_VAMPIRE_INVISIBILITY); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_WILL_O_WISP: - { - // Unlimited invisibility. Uses the base 60% chance above to - // cast this. - if(!AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - AI_ActionCastShifterSpell(SPELL_INVISIBILITY); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_AZER_MALE:// Azer man - 428 - case APPEARANCE_TYPE_AZER_FEMALE:// Azer female - 429 - { - // Unlimited fire attacks. - // Burning hands and azer blast. - // 80% chance of azer blast - if(GetReflexSavingThrow(GlobalMeleeTarget) < (14 + d6()) && - d10() <= 8) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_AZER_FIRE_BLAST, GlobalMeleeTarget); - return TRUE; - } - // Else burning hands might be attempted (also randomly) - if(GetReflexSavingThrow(GlobalMeleeTarget) < (12 + d4())) - { - AI_ActionCastShifterSpell(SPELL_BURNING_HANDS, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_SLAAD_DEATH: - { - // Unlimited spittle attacks. Just need the base 60% chance above. - AI_ActionCastShifterSpell(AI_SPELLABILITY_SLAAD_CHAOS_SPITTLE, GlobalMeleeTarget); - return TRUE; - } - break; - case APPEARANCE_TYPE_RAKSHASA_TIGER_FEMALE: - case APPEARANCE_TYPE_RAKSHASA_TIGER_MALE: - { - // Unlimited spells - 3. - // - Dispel Magic - // - Ice Storm - // - Mestils Acid Breath. - // Randomise each one. - - // Dispel magic against the global dispel target. - if(d10() <= 6 && GlobalDispelTargetHighestDispel >= 1) - { - AI_ActionCastShifterSpell(SPELL_DISPEL_MAGIC, GlobalDispelTarget); - return TRUE; - } - // Ice storm, woo. - else if(d10() <= 6) - { - AI_ActionCastShifterSpell(SPELL_ICE_STORM, GlobalMeleeTarget); - return TRUE; - } - // Mestils Acid Breath. - else - { - AI_ActionCastShifterSpell(SPELL_MESTILS_ACID_BREATH, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_GOLEM_IRON: - { - // Unlimited spells Iron Golem Breath. - if(GetFortitudeSavingThrow(GlobalMeleeTarget) < 20) - { - AI_ActionCastShifterSpell(SPELLABILITY_GOLEM_BREATH_GAS, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_GOLEM_STONE: - { - // Unlimited spells: Throw rocks - if(GetReflexSavingThrow(GlobalMeleeTarget) < 20 + d6()) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_GIANT_HURL_ROCK, GlobalMeleeTarget); - return TRUE; - } - return FALSE; - } - break; - case APPEARANCE_TYPE_KOBOLD_A:// Kobold (assassin)302 - { - // Unlimited invisibility - if(!AI_GetAIHaveEffect(GlobalEffectInvisible)) - { - AI_ActionCastShifterSpell(AI_SPELLABILITY_VAMPIRE_INVISIBILITY); - return TRUE; - } - return FALSE; - } - break; - } - } - } - return FALSE; -} -// Returns TRUE if we counterspell GlobalCounterspellTarget, only does it -// if we have Dispels, and if set to want to be in a group, we are in one :-) -int AI_AttemptCounterSpell() -{ - // Check for 5+ allies if counter spell in group. If <= 4, return FALSE - if(GetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP, AI_COMBAT_MASTER) && - GlobalTotalAllies <= 4) - { - return FALSE; - } - // Need a dispel spell - if(!(GetHasSpell(SPELL_MORDENKAINENS_DISJUNCTION) || - GetHasSpell(SPELL_GREATER_DISPELLING) || - GetHasSpell(SPELL_DISPEL_MAGIC) || - GetHasSpell(SPELL_LESSER_DISPEL))) - { - return FALSE; - } - object oLoopTarget, oCounterspellTarget; - int nCnt, nCasterLevels, nHighestLevels; - float fDistance; - // Try and get a Arcane caster to counter - if(GetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE, AI_COMBAT_MASTER)) - { - // Loop seen enemies - must be within 20M and valid - nCnt = 1; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oLoopTarget) && fDistance <= 20.0) - { - // Check caster levels - nCasterLevels = GetLevelByClass(CLASS_TYPE_WIZARD, oLoopTarget) + - GetLevelByClass(CLASS_TYPE_SORCERER, oLoopTarget) + - GetLevelByClass(CLASS_TYPE_BARD, oLoopTarget); - // Check if higher. - if(nCasterLevels > nHighestLevels) - { - nHighestLevels = nCasterLevels; - oCounterspellTarget = oLoopTarget; - } - // Get next target - nCnt++; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - } - // If not valid, might check divine - if(!GetIsObjectValid(oCounterspellTarget) && - nHighestLevels >= GlobalOurHitDice / 3 && - GetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE, AI_COMBAT_MASTER)) - { - // Loop seen enemies - must be within 20M and valid - nHighestLevels = FALSE; - nCnt = 1; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - while(GetIsObjectValid(oLoopTarget) && fDistance <= 20.0) - { - // Check caster levels - nCasterLevels = GetLevelByClass(CLASS_TYPE_CLERIC, oLoopTarget) + - GetLevelByClass(CLASS_TYPE_DRUID, oLoopTarget); - // Check if higher. - if(nCasterLevels > nHighestLevels) - { - nHighestLevels = nCasterLevels; - oCounterspellTarget = oLoopTarget; - } - // Get next target - nCnt++; - oLoopTarget = GetLocalObject(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - fDistance = GetLocalFloat(OBJECT_SELF, ARRAY_ENEMY_RANGE_SEEN + IntToString(nCnt)); - } - } - // Check if valid - if(GetIsObjectValid(oCounterspellTarget)) - { - // 45: "[DCR:CounterSpell] Counterspelling. [Target] " + GetName(oCounterspellTarget) - DebugActionSpeakByInt(45, oCounterspellTarget); - AI_SetMeleeMode(ACTION_MODE_COUNTERSPELL); - ActionCounterSpell(oCounterspellTarget); - return TRUE; - } - return FALSE; -} -// This will, in most occasion, ClearAllActions. -// If it does NOT, it returns FALSE, if we are doing something more important, -// and we perform that action again (or carry on doing it). -int AI_StopWhatWeAreDoing() -{ - // - New wrappered function - // * Includes fleeing and things. - if(GetIsPerformingSpecialAction()) - { - return FALSE; - } - // See if we need ClearAllActions(TRUE) for HIPS - if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT) && - GetStealthMode(OBJECT_SELF) == STEALTH_MODE_DISABLED && - !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER)) - { - // Check for nearest person with trueseeing (which pierces hiding) - if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_TRUE_SEEING, OBJECT_SELF, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY))) - { - ClearAllActions(TRUE); - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE); - return TRUE; - } - } - // Else we return TRUE, meaning we have cleared all actions - ClearAllActions(); - return TRUE; -} - -/************************ [AI_DetermineCombatRound] **************************** - This will do an action - EG: ActionAttack, against oIntruder, or against - the best (or random) target in range. - - At the end of combat, it heals up and searches for more enemies before - resuming normal activities. -************************* [History] ******************************************** - 1.0 - Started - 1.2 - Fixed minor bugs - 1.3 - Global targets added, cleaned up as Global* constants are used. -************************* [Workings] ******************************************* - It will start by checking the creatures effects, if they cannot move, nothing - is done. Daze, however, forces them to move away from last attacker. - - We then make sure we are not in an AOE spell, and not fleeing, if we are in - either, we react accordingly. - - After that, it sets up Global* targets, SpellTarget, RangedTarget, MeleeTarget, - and the integers such as GlobalAverageEnemyHD. - - If none are valid, it will search, but if we know there is an enemy around, - we move to them. - - If there is a valid target, at least one object Seen or Heard in our LOS, then - we perform a set of checks, and choose an action - normally using Class - abilities - such as Turn Undead, and Bard Songs, then spells, and finally - using Combat spells, and attacking the target using feats. Skills are also - used after spells. - - Dragons also run Wing Buffet, as well as using Breath attacks. -************************* [Arguments] ****************************************** - Arguments: oIntruder -************************* [AI_DetermineCombatRound] ***************************/ -void AI_DetermineCombatRound(object oIntruder = OBJECT_INVALID) -{ - // 46: "[DRC] START [Intruder]" + GetName(oIntruder) - DebugActionSpeakByInt(46, oIntruder); - - // Useful in the IsUncommandable check - we don't loop effects more than once. - AI_SetUpUsEffects(); - - // New check - If they are commandable, and no stupid ones. - if(AI_GetAIHaveEffect(GlobalEffectUncommandable) || - GetHasFeatEffect(FEAT_IMPROVED_KNOCKDOWN) || - GetHasFeatEffect(FEAT_KNOCKDOWN) || - GetAIOff()) - { - DeleteAIObject(AI_LAST_MELEE_TARGET); - DeleteAIObject(AI_LAST_SPELL_TARGET); - DeleteAIObject(AI_LAST_RANGED_TARGET); - // 47: "[DCR] [PREMITURE EXIT] Cannot Do Anything." - DebugActionSpeakByInt(47); - return; - } - // 1.30 - daze is now as 3E rules, you can move around walking, but no - // attacking, casting or anything else :-( - else if(AI_GetAIHaveEffect(GlobalEffectDazed)) - { - // 48: "[DCR] [PREMITURE EXIT] Dazed move away." - DebugActionSpeakByInt(48); - // Equip best shield for most AC - AI_EquipBestShield(); - // Move away from the nearest heard enemy - GlobalNearestEnemyHeard = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(GetIsObjectValid(GlobalNearestEnemyHeard)) - { - ActionMoveAwayFromObject(GlobalNearestEnemyHeard, TRUE); - } - else - { - ActionMoveAwayFromLocation(GetLocation(OBJECT_SELF), TRUE); - } - return; - } - // Tempory integer - int nTempInt; - - // We stop - ClearAllActions normally - // NOTE: This returns FALSE if we don't stop actions - and want to carry on - // doing the thing before! like fleeing! (or we do it in the Stop thing). - if(!AI_StopWhatWeAreDoing()) - { - // 49: "[DCR] [PREMITURE EXIT] Fleeing or otherwise" - DebugActionSpeakByInt(49); - return; - } - - // If oIntruder is valid, we will face them (this helps stops sneak - // attacks if we then cast something on ourselves, ETC). - if(GetIsObjectValid(oIntruder)) - { - // Face the intruder. - SetFacingPoint(GetPosition(oIntruder)); - } - - // Then we check all objects. we are going to perform a normal, or fleeing - // action this round, or action call. - - // Sets up us! - AI_SetUpUs(); - - // We set up 2 other targets...for testing against ETC. - // 1.4 - Simple loop here, we need to check AI_GetTargetSanityCheck(). - nTempInt = 1; - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, nTempInt); - while(GetIsObjectValid(oEnemy) && - !GetIsObjectValid(GlobalNearestEnemyHeard) && - !GetIsObjectValid(GlobalNearestEnemySeen)) - { - // Make a sanity check to use oEnemy at all. - if(AI_GetTargetSanityCheck(oEnemy)) - { - if(!GetIsObjectValid(GlobalNearestEnemyHeard) && GetObjectHeard(oEnemy)) - { - GlobalNearestEnemyHeard = oEnemy; - } - if(!GetIsObjectValid(GlobalNearestEnemySeen) && GetObjectSeen(oEnemy)) - { - GlobalNearestEnemySeen = oEnemy; - } - } - nTempInt++; - oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, nTempInt); - } - // Valid? - GlobalValidNearestSeenEnemy = GetIsObjectValid(GlobalNearestEnemySeen); - GlobalValidNearestHeardEnemy = GetIsObjectValid(GlobalNearestEnemyHeard); - - // Speakstring arrays - // * Don't speak when under silence or deafness. - if(GlobalValidNearestHeardEnemy && - !AI_GetAIHaveEffect(GlobalEffectSilenced) && !AI_GetAIHaveEffect(GlobalEffectDeaf)) - { - // Add in range checking here - if(GetDistanceToObject(GlobalNearestEnemyHeard) < GetDistanceToObject(GlobalNearestEnemySeen)) - { - GlobalRangeToNearestEnemy = GetDistanceToObject(GlobalNearestEnemyHeard); - } - else - { - GlobalRangeToNearestEnemy = GetDistanceToObject(GlobalNearestEnemySeen); - } - - nTempInt = GetHitDice(GlobalNearestEnemyHeard); - // THEM_OVER_US - They have 5+ levels over us. - if(nTempInt - 5 >= GlobalOurHitDice) - { - SpeakArrayString(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, TRUE); - } - // US_OVER_THEM - We have 5+ levels over them. - else if(GlobalOurHitDice - 5 >= nTempInt) - { - SpeakArrayString(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, TRUE); - } - // EQUAL - Thier HD is within 4HD of us (EG: Us 10, them 10) - else //if(iTempInt - 4 <= GlobalOurHitDice && iTempInt + 4 >= GlobalOurHitDice) - { - SpeakArrayString(AI_TALK_ON_COMBAT_ROUND_EQUAL, TRUE); - } - } - else - { - GlobalRangeToNearestEnemy = 0.0; - } - - // We may Dispel AOE's, move out of it, or ignore AOE's, EG Darkness. - // Dragons may use this (though small chance) - // Done before other things - best get out of some bad spells else they kill us! - // - Returns TRUE if we did anything that would mean we don't want to do - // another action - if(AI_AttemptSpecialChecks()){return;} - - // If this is set to FALSE, we do not set up normal targets. - nTempInt = TRUE; - - // Check for our nearest heard enemy... - if(!GlobalValidNearestHeardEnemy) - { - // If we do not have a valid nearest heard enemy - but have got a seen - // enemy with etherealness - we attack that ethereal creature *now* - oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); - if(!GetIgnoreNoFriend(oEnemy) && !GetIsEthereal(oEnemy)) - { - // We attack just this enemy. We specially set variables usually - // set in AI_SetUpAllObjects(). - GlobalMeleeTarget = oEnemy; - GlobalSpellTarget = oEnemy; - GlobalRangedTarget = oEnemy; - - // Make sure we cannot see oEnemy - GlobalSeenSpell = FALSE; - - nTempInt = FALSE; - } - else - { - // Else...normal behaviour with no enemy found - } - } - - // If nTempInt was set to FALSE above, we do not set targets normally. - if(nTempInt == TRUE) - { - // Sets up who to attack. - // - Uses oIntruder (to attack or move near) if anything. - // - We return TRUE if it ActionAttack's, or moves to an enemy - basically - // that we cannot do an action, but shouldn't search. False if normal. - // - We do this after AOE checking and special spells. - if(AI_SetUpAllObjects(oIntruder)){return;} - } - - // We then check if we have anyone to attack :-) This is a global integer. - if(GlobalAnyValidTargetObject) - { - // We do our auras. Quicken casted. - AI_ActionAbilityAura(); - - // We may flee from massive odds, or if we panic...or commoner fleeing - if(AI_AttemptMoraleFlee()){return;} - - // Beholder and Mindflayer special AI - switch(GetAIInteger(AI_SPECIAL_AI)) - { - case AI_SPECIAL_AI_BEHOLDER: - { - // Beholder attacks. Should always return TRUE. Uses eye rays, - // casts spells, and teleports/flee's. - if(AI_AttemptBeholderCombat()){return;} - } - break; - case AI_SPECIAL_AI_MINDFLAYER: - { - // Special mindflayer things. This can fall through. - if(AI_AttemptMindflayerCombat()){return;} - } - break; - } - - // We will attempt to heal ourselves first as a prioritory. - // Dragons may use this. - if(AI_AttemptHealingSelf()){return;} - // We will attempt to heal a previously set ally, with spells. - // Dragons use this, not always (and like to save spells for themselves). - if(AI_AttemptHealingAlly()){return;} - // We will cure, normally our conditions, or an allies. Things like - // blindness always, with other things later. - // Dragons use this, mostly with themselves. - if(AI_AttemptCureCondition()){return;} - - // This is a good thing to use first. Dragons may use this. - if(AI_AttemptFeatBardSong()){return;} - // We may summon our monster. Always first, because its our's and personal. Dragons may use this (though small chance) - if(AI_AttemptFeatSummonFamiliar()){return;} - // Turning, any sort of unturned and non-resistant creatures. - // Used about every 3 rounds. Dragons may use this. - if(AI_AttemptFeatTurning()){return;} - - // Special Dragon things now, else other monsters. - if(AI_GetIsDragon()) - { - // We may attempt a high level spells, wing buffet, and - // always attack with this. - if(AI_AttemptDragonCombat()){return;} - } - else - { - // We may move back as an archer, or even always do if set to. Normally - // only if we have help do we retreat out of AOO range. - // Will, if we can, cast invisibility first, or move back if we have it. - if(AI_AttemptArcherRetreat()){return;} - - // This may knockout dying PC's or coup de grace sleeping PC's nearby. - if(AI_AttemptGoForTheKill()){return;} - - // Spells attempt - if(AI_AttemptAllSpells()){return;} - - // We will attempt pickpocket/taunt/animal empathy after spells, before polymorph - if(AI_AttemptHostileSkills()){return;} - - // Attempt to cast all the buffing spells for melee - EG: Divine power, - // magical weapons, and ability enchanters. - if(AI_AttemptFeatCombatHostile()){return;} - - // We polymorph before attacking, if set so we can. - if(AI_AttemptPolyMorph()){return;} - - // This is called to attack, and should always attack something really. - if(AI_AttemptMeleeAttackWrapper()){return;} - } - } - // Else behavnOur - we don't have a target. Any healing, extra or anything - // here. Then searching, and finally walking waypoints. - else - { - // We will attempt to heal ourselves first as a prioritory. - // Dragons may use this. - if(AI_AttemptHealingSelf()){return;} - // We will attempt to heal a previously set ally, with spells. - // Dragons use this, not always (and like to save spells for themselves). - if(AI_AttemptHealingAlly()){return;} - // We will cure, normally our conditions, or an allies. Things like - // blindness always, with other things later. - // Dragons use this, mostly with themselves. - if(AI_AttemptCureCondition()){return;} - } -// This is a call to the function which determines which way point to go back to. -// This will only run if it cannot heal self, is not in an AOE spell, and no target. - // 50: "[DRC] END - DELETE PAST TARGETS" - DebugActionSpeakByInt(50); - // Delete any last melee targets. - DeleteAIObject(AI_LAST_MELEE_TARGET); - DeleteAIObject(AI_LAST_SPELL_TARGET); - DeleteAIObject(AI_LAST_RANGED_TARGET); - DeleteLocalObject(OBJECT_SELF, "NW_GENERIC_LAST_ATTACK_TARGET"); - - // 1.4 changes: Search. - - // Search is initilised by just making sure we have a cirtain special - // action set to be done (IE: AI_SPECIAL_ACTIONS_SEARCH_AROUND) - // * The amount of rounds to search is set to AI_SEARCH_ROUNDS_REMAINING, and - // is decreased each round. If a new combat round occurs (usually does!) - // then, of course, this will be reset. - // * We search for nIntelligence rounds + 2. - - // If a Search will occur around a set object, we set it to AI_SEARCH_TARGET, - // and will move to that persons location first. - // * oTarget should be perhaps our last killed person, or somesuch. - SetAIInteger(AI_SEARCH_ROUNDS_REMAINING, GlobalIntelligence + 2); - SetAIObject(AI_SEARCH_TARGET, oIntruder); - SetCurrentAction(AI_SPECIAL_ACTIONS_SEARCH_AROUND); -} - - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_heartbeat.nss b/_module/nss/j_inc_heartbeat.nss deleted file mode 100644 index af2b9864..00000000 --- a/_module/nss/j_inc_heartbeat.nss +++ /dev/null @@ -1,605 +0,0 @@ -/*/////////////////////// [Include - Heartbeat] //////////////////////////////// - Filename: J_INC_Heartbeat -///////////////////////// [Include - Heartbeat] //////////////////////////////// - This contains any heartbeat function calls. - - Note that the heartbeat uses ExecuteScript for larget behaviours that are - better split up so the heartbeat is as tiny as possible. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - After Beta - Added - 1.4 - TO DO - - Add in some function (see rest script) that resets if we are not in - combat - - Some more of the things we should do even if interrupted not the - heartbeat. - - - Have moved "after combat searching" into here. It isn't long - but - it is more reliable. The special action is cancled if there is combat - going on, of course. -///////////////////////// [Workings] /////////////////////////////////////////// - This is included in nw_c2_default1 and J_AI_OnHeartbeat. - - Contains things like in J_INC_OTHER_AI, but only for the heartbeat event. - Keeps it cleaner to read. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Heartbeat] //////////////////////////////*/ - -#include "J_INC_CONSTANTS" - -// Bioware walk waypoints condition name -const string sWalkwayVarname = "NW_WALK_CONDITION"; -// Walk waypoint constant set in the SoU waypoint include -const int NW_WALK_FLAG_CONSTANT = 0x00000002; - -// Checks: -// * No valid location -// * Petrified, paralised, ETC. -// Note: If sleep is found, it may apply Zzzz randomly, as well as stopping. -int JumpOutOfHeartBeat(); - -// This checks fleeing, door bashing and so on, to stop the heartbeat -// and perform the override special action, rather then run normal behaviour. -int PerformSpecialAction(); - -// Get whether the condition is set -// * Bioware SoU Waypoint call. -int GetWalkCondition(int nCondition, object oCreature=OBJECT_SELF); - -// Cast fleeing spells. -// - Invisiblity (best) -// - Haste/Expeditious Retreat -void ActionCastFleeingSpells(); -// Cast fleeing spells. -// - Invisiblity (best) -// - Haste/Expeditious Retreat -void ActionCastMoveToCombatSpells(); - -// Attempt to cast nSpell. TRUE if true. -// Searching and fleeing spells use this. -int HeartbeatSpellCast(int nSpell); - -// Used in Search(). This apply Trueseeing, See invisibility, or Invisiblity purge -// if we have neither of the 3 on us. -void SearchSpells(); - -// Returns TRUE if any of the animation settings are on. -int GetHasValidAnimations(); - -// Checks: -// * No valid location -// * Petrified, paralised, ETC. -// Note: If sleep is found, it may apply Zzzz randomly, as well as stopping. -int JumpOutOfHeartBeat() -{ - // What to return - int bReturn = FALSE; - // Checks: - // * No valid location - // * Petrified, paralised, ETC. - // Note: If sleep is found, it may apply Zzzz randomly, as well as stopping. - - // Effect checking - effect eCheck = GetFirstEffect(OBJECT_SELF); - int nEffectType; - while(GetIsEffectValid(eCheck) && bReturn == FALSE) - { - nEffectType = GetEffectType(eCheck); - // Sleep is special - if(nEffectType == EFFECT_TYPE_SLEEP) - { - bReturn = 2;// This immediantly breaks. - } - // ALL these stop heartbeat. - else if(nEffectType == EFFECT_TYPE_PARALYZE || nEffectType == EFFECT_TYPE_STUNNED || - nEffectType == EFFECT_TYPE_FRIGHTENED || /* Removed sleep above */ - nEffectType == EFFECT_TYPE_TURNED || nEffectType == EFFECT_TYPE_PETRIFY || - nEffectType == EFFECT_TYPE_DAZED || nEffectType == EFFECT_TYPE_TIMESTOP || - nEffectType == EFFECT_TYPE_DISAPPEARAPPEAR || nEffectType == EFFECT_TYPE_CHARMED || - nEffectType == EFFECT_TYPE_DOMINATED || nEffectType == EFFECT_TYPE_CONFUSED) - { - bReturn = 1;// 1 = No Zzz. We continue to check for Zzz as well. - } - eCheck = GetNextEffect(OBJECT_SELF); - } - // Do we fire the heartbeat event? - if(bReturn != FALSE) - { - // If it is sleep... Zzzzz sometimes. - if(bReturn == 2 && d6() == 1) - { - ApplyEffectToObject(DURATION_TYPE_INSTANT, - EffectVisualEffect(VFX_IMP_SLEEP), - OBJECT_SELF); - } - // Fire event 1001 - FireUserEvent(AI_FLAG_UDE_HEARTBEAT_EVENT, EVENT_HEARTBEAT_EVENT); - } - return bReturn; -} - -// This checks fleeing, door bashing and so on, to stop the heartbeat -// and perform the override special action, rather then run normal behaviour. -int PerformSpecialAction() -{ - int nAction = GetCurrentSetAction(); - object oTarget = GetAttackTarget(); - object oRunTarget; - switch(nAction) - { - // - Leader has made me a runner. I must run to a nearby group calling - // for help to get more men - case AI_SPECIAL_ACTIONS_ME_RUNNER: - { - oRunTarget = GetAIObject(AI_RUNNER_TARGET); - if(GetIsObjectValid(oRunTarget)) - { - if(GetObjectSeen(oRunTarget)) - { - // Stop thinking we are a runner if we can see the run target - ResetCurrentAction(); - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - return FALSE; - } - else - { - // Else run to them - if(GetObjectHeard(oRunTarget)) - { - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - } - ClearAllActions(); - ActionMoveToObject(oRunTarget, TRUE); - return TRUE; - } - } - } - break; - // - I am fleeing. - case AI_SPECIAL_ACTIONS_FLEE: - { - oRunTarget = GetAIObject(AI_FLEE_TO); - if(GetIsObjectValid(oRunTarget)) - { - // If they are a leader, and seen, and they are running, we - // obviously follow only. - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER, oRunTarget) || - GetLocalInt(oRunTarget, AI_CURRENT_ACTION) == AI_SPECIAL_ACTIONS_FLEE) - { - ClearAllActions(); - // New - cast fleeing spells. Important (and only used - // at higher intelligence) things like Expeditious retreat. - // - Only used once - one invisibility or haste. Deleted above. - ActionCastFleeingSpells(); - ActionForceFollowObject(oRunTarget, 3.0); - } - else if(GetObjectSeen(oRunTarget)) - { - // If we see the flee target, reset targets - ResetCurrentAction(); - - // We will delete the local int (set to TRUE) which we - // stopped fleeing spells from being used - DeleteAIInteger(AI_HEARTBEAT_FLEE_SPELLS); - // Speak to allies to come :-) - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - - // Also reset visual effect - RemoveFleeingVisual(); - - // And attack/heal self - ClearAllActions(); - DetermineCombatRound(); - // Return TRUE, we attacked - return TRUE; - } - else - { - // Else flee! - if(GetObjectHeard(oRunTarget)) - { - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - } - ClearAllActions(); - // New - cast fleeing spells. Important (and only used - // at higher intelligence) things like Expeditious retreat. - // - Only used once - one invisibility or haste. Deleted above. - ActionCastFleeingSpells(); - ActionMoveToObject(oRunTarget, TRUE); - return TRUE; - } - } - else - { - // Check if we have bad intellgence, if we have, we will run away - // from the nearest enemy we can see or hear. - if(GetAIInteger(AI_INTELLIGENCE) <= 3) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetLastHostileActor(); - if(!GetIsObjectValid(oRunTarget) || GetIsDead(oRunTarget)) - { - // If we do not have anyone to run from, stop - ResetCurrentAction(); - // Speak to allies to come :-) - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - // Also reset visual effect - RemoveFleeingVisual(); - // And attack/heal self - ClearAllActions(); - DetermineCombatRound(); - // Return TRUE, we attacked - return TRUE; - } - } - } - // Run from enemy (1.4: Was oTarget, now oRunTarget) - ClearAllActions(); - ActionMoveAwayFromObject(oRunTarget, TRUE, 50.0); - return TRUE; - } - // If we see the flee target, reset targets - ResetCurrentAction(); - // Speak to allies to come :-) - AISpeakString(AI_SHOUT_HELP_MY_FRIEND); - // Also reset visual effect - RemoveFleeingVisual(); - // And attack/heal self - ClearAllActions(); - DetermineCombatRound(); - // Return TRUE, we attacked/healed - return TRUE; - } - } - break; - // If this is set, we are usually in combat - and must move out of an AOE. - case AI_SPECIAL_ACTIONS_MOVE_OUT_OF_AOE: - { - // We must be X distance away from a cirtain AOE, if we are not, we - // move. - oRunTarget = GetAIObject(AI_AOE_FLEE_FROM); - - // If not valid, or already far enough away, delete special action - // and return false. - if(!GetIsObjectValid(oRunTarget) || - GetLocalFloat(OBJECT_SELF, AI_AOE_FLEE_FROM_RANGE) < GetDistanceToObject(oRunTarget)) - { - ResetCurrentAction(); - return FALSE; - } - else - { - // Valid and still in range - // - Run away - ClearAllActions(); - ActionMoveAwayFromLocation(GetLocation(oRunTarget), TRUE, GetLocalFloat(OBJECT_SELF, AI_AOE_FLEE_FROM_RANGE)); - return TRUE; - } - } - break; - // If this is the one, we will search around for enemies - usually done - // at the end of a combat round, it is more reliable here. - case AI_SPECIAL_ACTIONS_SEARCH_AROUND: - { - // If we are in combat, delete this special thing, and return FALSE - if(GetIsObjectValid(GetAttemptedSpellTarget()) || - GetIsObjectValid(GetAttemptedAttackTarget()) || - GetIsObjectValid(GetAttackTarget())) - { - // Reset, and return FALSE. - ResetCurrentAction(); - return FALSE; - } - // Added this so special actions do not get ignored (EG: healkitting) - // It will not do anything, but no heartbeat will be performed. These - // kind of actions happen at the end of combat (healing self of damage ETC) - // So, basically, will keep in mind it's still searching, but will leave - // it until no busy actions are being done. - else if(GetIsBusyWithAction()) - { - return TRUE; - } - - // We search for a cirtain number of rounds, set in the generic AI - // file, when we first start searching, or restart even. The generic - // AI will not actually do search actions, and if it finds no enemy, - // will probably just increase the integer to do more search rounds. - // * Will be intelligence + 2 to start. - int nRoundsRemaining = GetAIInteger(AI_SEARCH_ROUNDS_REMAINING); - // Decrease rounds remaining - nRoundsRemaining--; - // Set new one onto us to use next time - SetAIInteger(AI_SEARCH_ROUNDS_REMAINING, nRoundsRemaining); - // * Note: If nRoundsRemaining is 0 at the end of this function, we - // will remove this action as the current special one. - - // Get the target to move to/around - // * Can be invalid, but usually the creature we just killed or noticed - // lying on the ground. - object oTarget = GetAIObject(AI_SEARCH_TARGET); - - // Stop now (Small amounts of movement each time seem more cautious) - ClearAllActions(); - - // Check some spells. Cast one if we have no true seeing ETC. - SearchSpells(); - - // Stealth/search. - int bStealth = GetStealthMode(OBJECT_SELF); - int bSearch = GetDetectMode(OBJECT_SELF); - - // We perfere to hide again if we search if set to...sneaky! - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER)) - { - if(bStealth != STEALTH_MODE_ACTIVATED) - { - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE); - } - } - else - { - // If we are hiding, stop to search (we shouldn't be - who knows?) - if(bStealth == STEALTH_MODE_ACTIVATED) - { - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, FALSE); - } - // And search! - if(bSearch != DETECT_MODE_ACTIVE && !GetHasFeat(FEAT_KEEN_SENSE)) - { - SetActionMode(OBJECT_SELF, ACTION_MODE_DETECT, TRUE); - } - } - - // We check around the target, if there is one. - if(GetIsObjectValid(oTarget)) - { - // Move to the location of oTarget - ActionMoveToLocation(GetLocation(oTarget)); - - // If it is a chest ETC. We close it. - if(GetIsOpen(oTarget)) - { - if(GetObjectType(oTarget) == OBJECT_TYPE_DOOR) - { - ActionCloseDoor(oTarget); - } - else - { - // Close it - ActionDoCommand(DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE)); - } - } - } - // We will get nearest enemy at the very least - else - { - // Use nearest heard - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, - OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD); - if(GetIsObjectValid(oEnemy)) - { - // Move to location - ActionMoveToLocation(GetLocation(oEnemy)); - } - } - // Note: Here, we will return to spawn location after moving to the - // object, if it is a valid setting, else we do the normal randomwalk - if(GetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER)) - { - ActionMoveToLocation(GetAILocation(AI_RETURN_TO_POINT)); - } - else - { - // 72: "[Search] Searching, No one to attack. [Rounds Remaining] " + IntToString(nRoundsRemaining) + ". [Possible target] " + GetName(oTarget) - DebugActionSpeakByInt(72, oTarget, nRoundsRemaining); - // Randomly walk. - ActionRandomWalk(); - } - // If we have 0 rounds left of searching time, we turn of this special - // action, walk waypoints, and probably rest. - if(nRoundsRemaining == 0) - { - // Rest after combat? - if(GetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER)) - { - // 71: "[Search] Resting" - DebugActionSpeakByInt(71); - // Yes - we use ActionRest(). It can possibly still fail if - // enemies are still around! - ActionRest(); - ActionWait(1.0); - } - else - { - // Else, just execute Walk Waypoints - ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF); - } - // Delete this special action - ResetCurrentAction(); - } - // If we havn't bailed out early and returned FALSE (do normal hb) we - // will return TRUE, we have something to do at least. - return TRUE; - } - break; - // Move to combat - we buff (and only buff again after 1 minute of running) - // and either follow the person who wants us to help them, or we will run to the - // location set. - // * Set only by "AI_HELP_MY_FRIEND_CONSTANT" at the moment. - case AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT: - { - // We get a location to move to first - location lTarget = GetAILocation(AI_MOVE_TO_COMBAT_LOCATION); - object oObject = GetAreaFromLocation(lTarget); - - // Check if the location is valid - if(GetIsObjectValid(oObject) && GetArea(OBJECT_SELF) == oObject) - { - // Just move, rapidly, to lTarget. - ClearAllActions(); - - // Buff up an action - ActionCastMoveToCombatSpells(); - - // Move (fast) to that location - ActionMoveToLocation(lTarget, TRUE); - // If we see/hear combat, we'll attack - return TRUE; - } - else - { - // Get who we should "follow" or move to. - oObject = GetAIObject(AI_MOVE_TO_COMBAT_OBJECT); - - if(GetIsObjectValid(oObject)) - { - // Just move, rapidly, to oTarget. It isn't "real" following, - // but paced. Means it looks OK. Need to test - but should be OK. - ClearAllActions(); - - // Buff up an action - ActionCastMoveToCombatSpells(); - - // Move (fast) to that location - ActionMoveToObject(oTarget, TRUE); - // If we see/hear combat, we'll attack - return TRUE; - } - else - { - // Remove the special action and return FALSE - ResetCurrentAction(); - return FALSE; - } - } - } - break; - } - // Return false to carry on a normal heartbeat - return FALSE; -} - -// Get whether the condition is set -// * Bioware SoU Waypoint call. -int GetWalkCondition(int nCondition, object oCreature=OBJECT_SELF) -{ - return (GetLocalInt(oCreature, sWalkwayVarname) & nCondition); -} - -// Cast fleeing spells. -// - Invisiblity (best) -// - Haste/Expeditious Retreat -void ActionCastFleeingSpells() -{ - // Not got local - if(GetAIInteger(AI_HEARTBEAT_FLEE_SPELLS)) return; - // Set local - SetAIInteger(AI_HEARTBEAT_FLEE_SPELLS, TRUE); - - // Invisibilities - if(HeartbeatSpellCast(SPELL_IMPROVED_INVISIBILITY)) return; - if(HeartbeatSpellCast(SPELL_INVISIBILITY)) return; - - // Haste - if(HeartbeatSpellCast(SPELL_MASS_HASTE)) return; - if(HeartbeatSpellCast(SPELL_HASTE)) return; - if(HeartbeatSpellCast(SPELL_EXPEDITIOUS_RETREAT)) return; -} -// Cast fleeing spells. -// - Invisiblity (best) -// - Haste/Expeditious Retreat -void ActionCastMoveToCombatSpells() -{ - // Timer to stop too many spells at once - if(GetLocalTimer(AI_TIMER_MOVE_TO_COMBAT_BUFF)) return; - - // We first will cast a preperation spell before jumping in! - // This is used once per minute. - SetLocalTimer(AI_TIMER_MOVE_TO_COMBAT_BUFF, 60.0); - - // We possibly cast a few spell first - stoneskin range, see - // invisible range, and invisibility range. - // Protection things - // * Cast 1 spell! - if(HeartbeatSpellCast(SPELL_PREMONITION)) return; - if(HeartbeatSpellCast(SPELL_GREATER_STONESKIN)) return; - if(HeartbeatSpellCast(SPELL_STONESKIN)) return; - // Invisibility range - if(HeartbeatSpellCast(SPELL_ETHEREALNESS)) return; - if(HeartbeatSpellCast(SPELL_IMPROVED_INVISIBILITY)) return; - if(HeartbeatSpellCast(SPELL_INVISIBILITY_SPHERE)) return; - if(HeartbeatSpellCast(SPELL_INVISIBILITY)) return; - // See invisible things - if(HeartbeatSpellCast(SPELL_TRUE_SEEING)) return; - if(HeartbeatSpellCast(SPELL_SEE_INVISIBILITY)) return; - - // Stealth! Only if we are good at it, of course. - - // Spawn in conditions for it - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER)) - { - // Need skill or force on - if((GetSkillRank(SKILL_HIDE) - 4 >= GetHitDice(OBJECT_SELF)) || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER)) - { - // Use hide - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE); - return; - } - } -} -// Used in Search(). This apply Trueseeing, See invisibility, or Invisiblity purge -// if we have neither of the 3 on us. -void SearchSpells() -{ - effect eCheck = GetFirstEffect(OBJECT_SELF); - int nEffectType, bBreak; - while(GetIsEffectValid(eCheck) && bBreak == FALSE) - { - nEffectType = GetEffectType(eCheck); - if(nEffectType == EFFECT_TYPE_TRUESEEING || - nEffectType == EFFECT_TYPE_SEEINVISIBLE) - { - bBreak = TRUE; - } - eCheck = GetNextEffect(OBJECT_SELF); - } - // We have effects, stop. - if(bBreak == TRUE || GetHasSpellEffect(SPELL_INVISIBILITY_PURGE)) - { - return; - } - // Else we apply the best spell we have. - if(HeartbeatSpellCast(SPELL_TRUE_SEEING)) return; - if(HeartbeatSpellCast(SPELL_SEE_INVISIBILITY)) return; - if(HeartbeatSpellCast(SPELL_INVISIBILITY_PURGE)) return; -} -// Attempt to cast nSpell. TRUE if true. -int HeartbeatSpellCast(int nSpell) -{ - // 1.4: added check to see if has effect already - if(GetHasSpell(nSpell) && !GetHasSpellEffect(nSpell, OBJECT_SELF)) - { - ActionCastSpellAtObject(nSpell, OBJECT_SELF); - return TRUE; - } - return FALSE; -} - -// Returns TRUE if any of the animation settings are on. -int GetHasValidAnimations() -{ - int nCheck = GetLocalInt(OBJECT_SELF, NW_GENERIC_MASTER); - if((nCheck & NW_FLAG_AMBIENT_ANIMATIONS) || - (nCheck & NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) || - (nCheck & NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)) - { - return TRUE; - } - return FALSE; -} diff --git a/_module/nss/j_inc_npc_attack.nss b/_module/nss/j_inc_npc_attack.nss deleted file mode 100644 index 572a5c8e..00000000 --- a/_module/nss/j_inc_npc_attack.nss +++ /dev/null @@ -1,447 +0,0 @@ -/*/////////////////////// [Include - NPC (Combat) Attack] ////////////////////// - Filename: J_INC_NPC_Attack -///////////////////////// [Include - NPC (Combat) Attack] ////////////////////// - What does this do? - - It is a wrapper/include for getting a creature to attack target X, or do - Y. I use this for conversations, triggers, the lot, as a simple wrapper - that will execute my AI. - - There are several functions here to do things, that may be useful wrappers. - - And it also keeps Combat files SMALL! I uses Execute Script to fire the - combat file, not include it here. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - 1.4 - TO DO: - - Bugfix a few things (copy/paste errors) - - Add example script to use (User defined events) -///////////////////////// [Workings] /////////////////////////////////////////// - Include this in any conversation file or whatever, and mearly read the - descriptions of the different functions, and it will do what it says :-) -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - NPC (Combat) Attack] ////////////////////*/ - -// Include the constants for the combat, spawn integers ETC. -#include "J_INC_CONSTANTS" - -// Hostile amount -const int HOSTILE = -100;// Reputation to change to -const int TYPE_ALL_PCS = 1;// is all PC's in the world. -const int TYPE_ALL_AREA = 2;// is all PC's in the specific area. -const int TYPE_IN_RANGE = 3;// is all PC's within fRange. - -// A slightly modified way to determine a combat round. -// * oTarget - The target to attack -// * sShout - The string to silently speak to get allies to come and help -void DetermineSpeakCombatRound(object oTarget = OBJECT_INVALID, string sShout = ""); - -// A slightly modified way to determine a combat round. -// * oTarget - The target to attack -// * oAttacker - The NPC who you want to determine a combat round, on oTarget -void DetermineSpeakCombatRoundNotMe(object oTarget, object oAttacker); - -// This is the main wrapper to get an NPC to attack in conversation. -// * fDelay - The delay AFTER adjusting reputation, that we attack and shout -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// Example, how to keep flags already set: -// HostileAttackPCSpeaker(0.0, GetPlotFlag(), GetImmortal()); -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackPCSpeaker(float fDelay = 0.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE); - -// This will make our faction hostile to the target, and attack them. -// * oTarget - The target object to attack -// * fDelay - The delay AFTER adjusting reputation, that we attack and shout -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// Example, how to keep flags already set: -// HostileAttackObject(oPC, 0.0, GetPlotFlag(), GetImmortal()); -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackObject(object oTarget, float fDelay = 0.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE); - -// This will make our faction hostile to the target, and shout. -// * oTarget - The target object to shout about. -// Use: Placeables, disturbers and so on. -// Note: Placeables are normally defaulted hostile faction! Must change it to work -void ShoutAbout(object oTarget); - -// This will make our faction hostile to ALL(!) PC's...in the area or game or range -// * nType - TYPE_ALL_PCS (1) is all PC's in the world. -// - TYPE_ALL_AREA (2) is all PC's in the specific area. -// - TYPE_IN_RANGE (3) is all PC's within fRange. -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackAllPCs(int nType = 1, float fRange = 40.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE); - -// This will thier most damaging weapon, and wait to disarm it. -// * fDuration - Delay until the weapon is withdrawn. -// * bRanged - if TRUE, it will equip a ranged weapon as a prioritory (EquipRanged call) -void EquipWeaponsDuration(float fDuration, int bRanged = FALSE); -// Disarms the persons right-hand-weapon -void RemoveWeapons(); - -// Plays talks like "ATTACK!" and "Group Near Me" etc. -// * nLowest, nHighest - the High/Lowest value to use. -// 0 = ATTACK, 1 = TAUNT, 2-4 = BATTLE(1-3), 5 = ENEMIES, 6 = GROUP, 7 = HELP. -void PlaySomeTaunt(int nLowest = 0, int nHighest = 7); - -// Gets all allies of ourselves to attack oTarget -// * oTarget - The target to attack. -void AlliesAttack(object oTarget); - -// Returns the nearest PC object -object GetNearestPCCreature(); -// Returns the nearest enemy (but doesn't determine if it can see/hear it) -object GetNearestEnemyCreature(); -// Returns the nearest friend -object GetNearestFriendCreature(); - - -// A slightly modified way to determine a combat round. -// * oTarget - The target to attack -// * sShout - The string to silently speak to get allies to come and help -void DetermineSpeakCombatRound(object oTarget, string sShout) -{ - // Shout - if(sShout != "") AISpeakString(sShout); - - // Check for custom AI script, else fire default. - string sAI = GetCustomAIFileName(); - // Fire default AI script - if(sAI == "") - { - // Sanity check - to not fire this off multiple times, we make sure temp - // object is not the same as oTarget (and valid) - if(!GetIsObjectValid(oTarget) || (GetIsObjectValid(oTarget) && - !GetLocalTimer(AI_DEFAULT_AI_COOLDOWN))) - { - SetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET, oTarget); - ExecuteScript(COMBAT_FILE, OBJECT_SELF); - SetLocalTimer(AI_DEFAULT_AI_COOLDOWN, 0.1); - } - } - // Fire custom AI script - else - { - SetLocalObject(OBJECT_SELF, AI_TEMP_SET_TARGET, oTarget); - ExecuteScript(sAI, OBJECT_SELF); - } -} - -// A slightly modified way to determine a combat round. -// * oTarget - The target to attack -// * oAttacker - The NPC who you want to determine a combat round, on oTarget -void DetermineSpeakCombatRoundNotMe(object oTarget, object oAttacker) -{ - // Check for custom AI script, else fire default. - string sAI = GetLocalString(oAttacker, AI_CUSTOM_AI_SCRIPT); - // Fire default AI script - if(sAI == "") - { - // Sanity check - to not fire this off multiple times, we make sure temp - // object is not the same as oTarget (and valid) - if(!GetIsObjectValid(oTarget) || (GetIsObjectValid(oTarget) && - !GetLocalTimer(AI_DEFAULT_AI_COOLDOWN))) - { - SetLocalObject(oAttacker, AI_TEMP_SET_TARGET, oTarget); - ExecuteScript(COMBAT_FILE, oAttacker); - SetLocalTimer(AI_DEFAULT_AI_COOLDOWN, 0.1); - } - } - // Fire custom AI script - else - { - SetLocalObject(oAttacker, AI_TEMP_SET_TARGET, oTarget); - ExecuteScript(sAI, oAttacker); - } -} -// This is the main wrapper to get an NPC to attack in conversation. -// * fDelay - The delay AFTER adjusting reputation, that we attack and shout -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// Example, how to keep flags already set: -// HostileAttackPCSpeaker(0.0, GetPlotFlag(), GetImmortal()); -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackPCSpeaker(float fDelay = 0.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE) -{ - // Get the PC - object oPC = GetPCSpeaker(); - - // Error checking - if(!GetIsObjectValid(oPC) || GetIsDM(oPC)) return; - - // Change our flags for plot and immortal (usually turns them off) - SetPlotFlag(OBJECT_SELF, bPlot); - SetImmortal(OBJECT_SELF, bImmortal); - - // We make them hostile to our faction - AdjustReputation(oPC, OBJECT_SELF, HOSTILE); - - // Attack them - SetLocalObject(OBJECT_SELF, AI_TO_ATTACK, oPC); - if(fDelay > 0.0) - { - // Round start... - DelayCommand(fDelay, DetermineSpeakCombatRound(oPC, AI_SHOUT_I_WAS_ATTACKED)); - if(bAllAllies) DelayCommand(fDelay, AlliesAttack(oPC)); - } - else - { - // Round start... - DetermineSpeakCombatRound(oPC, AI_SHOUT_I_WAS_ATTACKED); - if(bAllAllies) AlliesAttack(oPC); - } -} - -// This will make our faction hostile to the target, and attack them. -// * oTarget - The target object to attack -// * fDelay - The delay AFTER adjusting reputation, that we attack and shout -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// Example, how to keep flags already set: -// HostileAttackObject(oPC, 0.0, GetPlotFlag(), GetImmortal()); -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackObject(object oTarget, float fDelay = 0.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE) -{ - // Error checking - if(!GetIsObjectValid(oTarget) || GetIsDM(oTarget)) return; - - // Change our flags for plot and immortal (usually turns them off) - SetPlotFlag(OBJECT_SELF, bPlot); - SetImmortal(OBJECT_SELF, bImmortal); - - // We make them hostile to our faction - AdjustReputation(oTarget, OBJECT_SELF, HOSTILE); - - // Attack them - SetLocalObject(OBJECT_SELF, AI_TO_ATTACK, oTarget); - - if(fDelay > 0.0) - { - // Round start... - DelayCommand(fDelay, DetermineSpeakCombatRound(oTarget, AI_SHOUT_I_WAS_ATTACKED)); - } - else - { - // Round start... - DetermineSpeakCombatRound(oTarget, AI_SHOUT_I_WAS_ATTACKED); - } -} - -// This will make our faction hostile to the target, and shout. -// * oTarget - The target object to shout about. -// Use: Placeables, disturbers and so on. -void ShoutAbout(object oTarget) -{ - // We make them hostile to our faction - AdjustReputation(oTarget, OBJECT_SELF, HOSTILE); - // And shout for others to attack - AISpeakString(AI_SHOUT_CALL_TO_ARMS); -} - -// This will make our faction hostile to ALL(!) PC's...in the area or game or range -// * nType - TYPE_ALL_PCS (1) is all PC's in the world. -// - TYPE_ALL_AREA (2) is all PC's in the specific area. -// - TYPE_IN_RANGE (3) is all PC's within fRange. -// * bPlot - The plot flag to set US to (Usually FALSE). -// * bImmortal - The immortal flag US to set to (Usually FALSE). -// * bAllAllies - This will determine combat rounds against the target, that are in 50.0M. False = Don't -void HostileAttackAllPCs(int nType = 1, float fRange = 40.0, int bPlot = FALSE, int bImmortal = FALSE, int bAllAllies = TRUE) -{ - object oPC, oToAttack; - int bShout, nCnt; - float fNearestEnemy = 10000.0; - object oArea = GetArea(OBJECT_SELF); - switch(nType) - { - case TYPE_ALL_PCS:// s all PC's in the world. - { - oPC = GetFirstPC(); - while(GetIsObjectValid(oPC)) - { - if(!GetIsDM(oPC) && - GetIsObjectValid(GetArea(oPC))) - { - AdjustReputation(oPC, OBJECT_SELF, HOSTILE); - if(GetArea(oPC) == oArea) - { - if(GetDistanceToObject(oPC) <= fNearestEnemy) - { - oToAttack = oPC; - } - } - bShout = TRUE; - } - oPC = GetNextPC(); - } - } - break; - case TYPE_ALL_AREA:// is all PC's in the specific area. - { - nCnt = 1; - oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, nCnt); - while(GetIsObjectValid(oPC)) - { - // Attack it! (if not a DM!) - if(!GetIsDM(oPC)) - { - AdjustReputation(oPC, OBJECT_SELF, HOSTILE); - if(GetArea(oPC) == oArea) - { - if(GetDistanceToObject(oPC) <= fNearestEnemy) - { - oToAttack = oPC; - } - } - bShout = TRUE; - } - // Next one - nCnt++; - oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, nCnt); - } - } - break; - case TYPE_IN_RANGE:// is all PC's within fRange. - { - nCnt = 1; - oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, nCnt); - while(GetIsObjectValid(oPC) && GetDistanceToObject(oPC) <= fRange) - { - // Attack it! (if not a DM!) - if(!GetIsDM(oPC)) - { - AdjustReputation(oPC, OBJECT_SELF, HOSTILE); - if(GetArea(oPC) == oArea) - { - if(GetDistanceToObject(oPC) <= fNearestEnemy) - { - oToAttack = oPC; - } - } - bShout = TRUE; - } - // Next one - nCnt++; - oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, nCnt); - } - } - break; - } - // Attack nearest one (if valid) - if(GetIsObjectValid(oToAttack)) - { - // Change our flags for plot and immortal (usually turns them off) - SetPlotFlag(OBJECT_SELF, bPlot); - SetImmortal(OBJECT_SELF, bImmortal); - - DetermineSpeakCombatRound(oToAttack); - if(bAllAllies) AlliesAttack(oToAttack); - } - // Check if we shout - if(bShout) AISpeakString(AI_SHOUT_CALL_TO_ARMS); -} -// This will thier most damaging weapon, and wait to disarm it. -// * fDuration - Delay until the weapon is withdrawn. -// * bRanged - if TRUE, it will equip a ranged weapon as a prioritory (EquipRanged call) -void EquipWeaponsDuration(float fDuration, int bRanged = FALSE) -{ - if(bRanged) - { - // Equip any most damaging (don't use oVersus, incase it doesn't arm anything) - ActionEquipMostDamagingRanged(); - } - else - { - // Equip any most damaging (don't use oVersus, incase it doesn't arm anything) - ActionEquipMostDamagingMelee(); - } - // Delay the un-equip - DelayCommand(fDuration, RemoveWeapons()); -} -// Disarms the persons right-hand-weapon -void RemoveWeapons() -{ - // cannot be in combat, duh! - if(GetIsInCombat() || GetIsObjectValid(GetAttackTarget())) - return; - // Get the weapon, make sure it is valid, and... - object oUnequip = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND); - if(GetIsObjectValid(oUnequip)) - { - // ...unequip it. - ClearAllActions(); - ActionUnequipItem(oUnequip); - } -} -/*:://///////////////////////////////////////////// -//:: PlaySomeTaunt -//:://///////////////////////////////////////////// - Plays talks like "ATTACK!" and "Group Near Me" etc. - * iLowest, iHighest - the High/Lowest value to use. - 0 = ATTACK, 1 = TAUNT, 2-4 = BATTLE(1-3), 5 = ENEMIES, 6 = GROUP, 7 = HELP. -//:://///////////////////////////////////////////// -//:: Created by : Jasperre -//:://///////////////////////////////////////////*/ -void PlaySomeTaunt(int nLowest, int nHighest) -{ - int nRandom = Random(nHighest) + nLowest; - int nVoice = VOICE_CHAT_ATTACK; - switch (nRandom) - { - case 0: nVoice = VOICE_CHAT_ATTACK; break; - case 1: nVoice = VOICE_CHAT_TAUNT; break; - case 2: nVoice = VOICE_CHAT_BATTLECRY1; break; - case 3: nVoice = VOICE_CHAT_BATTLECRY2; break; - case 4: nVoice = VOICE_CHAT_BATTLECRY3; break; - case 5: nVoice = VOICE_CHAT_ENEMIES; break; - case 6: nVoice = VOICE_CHAT_GROUP; break; - case 7: nVoice = VOICE_CHAT_HELP; break; - default: nVoice = VOICE_CHAT_ATTACK; break; - } - PlayVoiceChat(nVoice); -} - -// Gets all allies of ourselves to attack oTarget -// * oTarget - The target to attack. -void AlliesAttack(object oTarget) -{ - if(!GetIsObjectValid(oTarget)) return; - int nCnt = 1; - object oAlly = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, nCnt, CREATURE_TYPE_IS_ALIVE, TRUE); - while(GetIsObjectValid(oAlly) && GetDistanceToObject(oAlly) <= 50.0) - { - // A slightly modified way to determine a combat round. - // * oTarget - The target to attack - // * oAttacker - The NPC who you want to determine a combat round, on oTarget - DetermineSpeakCombatRoundNotMe(oTarget, oAlly); - nCnt++; - oAlly = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, nCnt, CREATURE_TYPE_IS_ALIVE, TRUE); - } -} - -// Returns the nearest PC object -object GetNearestPCCreature() -{ - return GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); -} -// Returns the nearest enemy (but doesn't determine if it can see/hear it) -object GetNearestEnemyCreature() -{ - return GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); -} -// Returns the nearest friend -object GetNearestFriendCreature() -{ - return GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND); -} - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_other_ai.nss b/_module/nss/j_inc_other_ai.nss deleted file mode 100644 index 3a53669f..00000000 --- a/_module/nss/j_inc_other_ai.nss +++ /dev/null @@ -1,723 +0,0 @@ -/*/////////////////////// [Include - Other AI Functions] /////////////////////// - Filename: J_INC_Other_AI -///////////////////////// [Include - Other AI Functions] /////////////////////// - This contains fuctions and calls for these scripts: - nw_c2_default2 - Percieve - nw_c2_default3 - On Combat round End (For DetermineCombatRound() only) - nw_c2_default4 - Conversation (shout) - nw_c2_default5 - Phisical attacked - nw_c2_default6 - Damaged - nw_c2_default8 - Disturbed - nw_c2_defaultb - Spell cast at - - Ones that don't use this use different or no includes. - - HOPEFULLY it will make them faster, if they don't run combat. - - They use Execute Script to initiate combat. (With the override ones - initiating the override version, the normal initiateing the normal). -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added to speed up compilings and gather non-combat, or other workings - in one place. - 1.4 - TO DO: - - -///////////////////////// [Workings] /////////////////////////////////////////// - This is included in other AI files. - - They then use these functions in them scripts. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Other AI Functions] /////////////////////*/ - -// All constants. -#include "J_INC_CONSTANTS" - -// Responds to it (like makinging the callers attacker thier target) -// Called in OnConversation, and thats it. Use "ShouterFriend" To stop repeated GetIsFriend calls. -void RespondToShout(object oShouter, int nShoutIndex); -// Gets any possible target which is attacking oShouter (and isn't an ally) -// or who oShouter is attacking. oShouter should be a ally. -object GetIntruderFromShout(object oShouter); - -// Shouts, or really brings all people in 60.0M(by default) to the "shouter" -void ShoutBossShout(object oEnemy); -// This sets a morale penalty, to the exsisting one, if there is one. -// It will reduce itself after fDuration (or if we die, ETC, it is deleted). -// It is deleted at the end of combat as well. -void SetMoralePenalty(int nPenalty, float fDuration = 0.0); -// Removes nPenalty amount if it can. -void RemoveMoralePenalty(int nPenalty); -// At 5+ intelligence, we fire off any dispells at oPlaceables location -void SearchDispells(object oPlaceable); - -// This MAY make us set a local timer to turn off hiding. -// Turn of hiding, a timer to activate Hiding in the main file. This is -// done in each of the events, with the opposition checking seen/heard. -void TurnOffHiding(object oIntruder); -// Used when we percieve a new enemy and are not in combat. Hides the creature -// appropriatly with spawn settings and ability. -// - At least it will clear all actions if it doesn't set hiding on -void HideOrClear(); - -// This MIGHT move to oEnemy -// - Checks special actions, such as fleeing, and may run instead! -void ActionMoveToEnemy(object oEnemy); - -// Returns TRUE if we have under 0 morale, set to flee. -// - They then run! (Badly) -int PerceptionFleeFrom(object oEnemy); - -// This wrappers commonly used code for a "Call to arms" type response. -// * We know of no enemy, so we will move to oAlly, who either called to -// us, or, well, we know of. -// * Calls out AI_SHOUT_CALL_TO_ARMS too. -void CallToArmsResponse(object oAlly); -// This wrappers commonly used code for a "I was attacked" type response. -// * We know there will be an enemy - or should be - and if we find one to attack -// (using GetIntruderFromShout()) - we attack it (and call another I was attacked) -// else, this will run CallToArmsResponse(oAlly); -// * Calls out AI_SHOUT_I_WAS_ATTACKED, or AI_SHOUT_CALL_TO_ARMS too. -void IWasAttackedResponse(object oAlly); - -/*:://///////////////////////////////////////////// -//:: Name: ShoutBossShout -//:://///////////////////////////////////////////// - This is used in the OnPercieve, and if we are set to, - we will "shout" and bring lots of allies a running -//:://///////////////////////////////////////////*/ -void ShoutBossShout(object oEnemy) -{ - // 1.4 - Added a 5 minute cooldown timer for this. Thusly, if the boss lingers, - // so will the big shout they do. - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER) && - !GetLocalTimer(AI_TIMER_BOSS_SHOUT_COOLDOWN)) - { - // Get the range (and default to 60.0 M) - float fRange = IntToFloat(GetBoundriedAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60, 370)); - // We loop through nearest not-seen, not-heard allies and get them - // to attack the person. - int nCnt = 1; - // Not seen, not heard... - object oAlly = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, nCnt, CREATURE_TYPE_IS_ALIVE, TRUE, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - // Get who thier target is. - object oThierTarget; - while(GetIsObjectValid(oAlly) && GetDistanceToObject(oAlly) <= fRange) - { - oThierTarget = GetLocalObject(oAlly, AI_TO_ATTACK); - // If they are not attacking the enemy, we assing them to attack. - if(oThierTarget != oEnemy) - { - // Can't be in combat. - if(!GetIsInCombat(oAlly)) - { - // Set them to move to this - SetLocalObject(oAlly, AI_TO_ATTACK, oEnemy); - // Make them attack the person - SetLocalObject(oAlly, AI_TEMP_SET_TARGET, oEnemy); - ExecuteScript(COMBAT_FILE, oAlly); - } - } - nCnt++; - oAlly = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, - OBJECT_SELF, nCnt, CREATURE_TYPE_IS_ALIVE, TRUE, - CREATURE_TYPE_PERCEPTION, PERCEPTION_NOT_SEEN_AND_NOT_HEARD); - } - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Speak a string associated with this action being carried out - SpeakArrayString(AI_TALK_ON_LEADER_BOSS_SHOUT); - } - // Remove it for 5 minutes. - SetLocalTimer(AI_TIMER_BOSS_SHOUT_COOLDOWN, 300.0); - } -} -// This MAY make us set a local timer to turn off hiding. -// Turn of hiding, a timer to activate Hiding in the main file. This is -// done in each of the events, with the opposition checking seen/heard. -void TurnOffHiding(object oIntruder) -{ - if(!GetLocalTimer(AI_TIMER_TURN_OFF_HIDE) && - // Are we actually seen/heard or is it just an AOE? - (GetObjectSeen(OBJECT_SELF, oIntruder) || - GetObjectHeard(OBJECT_SELF, oIntruder))) - { - SetLocalTimer(AI_TIMER_TURN_OFF_HIDE, 18.0); - } -} - -// Used when we percieve a new enemy and are not in combat. Hides the creature -// appropriatly with spawn settings and ability. -// - At least it will clear all actions if it doesn't set hiding on -void HideOrClear() -{ - // Spawn in conditions for it - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER) && - GetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH) == FALSE) - { - // Need skill or force on - int nRank = GetSkillRank(SKILL_HIDE); - if((nRank - 4 >= GetHitDice(OBJECT_SELF) && nRank >= 7) || - GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER)) - { - // Use hide - ClearAllActions(TRUE); - SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE); - // Stop - return; - } - } - // Else clear all actions normally. - ClearAllActions(); -} - -/*:://///////////////////////////////////////////// -//:: Respond To Shouts -//:: Copyright (c) 2001 Bioware Corp. -//:://///////////////////////////////////////////// - Useage: - -//NOTE ABOUT BLOCKERS - - int NW_GENERIC_SHOUT_BLOCKER = 2; - - It should be noted that the Generic Script for On Dialogue attempts to get a local - set on the shouter by itself. This object represents the LastOpenedBy object. It - is this object that becomes the oIntruder within this function. - -//NOTE ABOUT INTRUDERS - - These are the enemy that attacked the shouter. - -//NOTE ABOUT EVERYTHING ELSE - - I_WAS_ATTACKED = 1; - - If not in combat, attack the attackee of the shouter. Basically the best - way to get people to come and help us, if we know of an attacker! - * Call this after we call DetermineCombatRound() to make sure that any - responses know of the attackers. It doesn't matter in actual fact, but - useful anyway. - - CALL_TO_ARMS = 3; - - If not in combat, determine combat round. By default, it should check any - allies it can see/hear for thier targets and help them too. - * Better if we do not know of a target (and thusly our allies wouldn't know - of them as well) so the allies will move to us. - - HELP_MY_FRIEND = 4; - - This is a runner thing. Said when the runner sees the target to run to. - Gets a local location, and sets off people to run to it. - If no valid area for the location, no moving :-P - - We also shout this if we are fleeing. It will set the person to buff too. - - LEADER_FLEE_NOW = 5 - - We flee to a pre-set object or follow the leader (who should be fleeing). - - LEADER_ATTACK_TARGET = 6 - - We attack the intruder next round, by setting it as a local object to - override other choices. - - I_WAS_KILLED = 7 - - If lots are killed in one go - ouch! morale penalty each time someone dies. - - I_WAS_OPENED = 8 - - Chests/Doors which say this get the AI onto the tails of those who opened it, OR - they get searched! :-) -//:://///////////////////////////////////////////// -// Modified almost completely: Jasperre -//:://///////////////////////////////////////////*/ -// Gets any possible target which is attacking oShouter (and isn't an ally) -// or who oShouter is attacking. oShouter should be a ally. -object GetIntruderFromShout(object oShouter) -{ - // First, get who they specifically want to attack (IE: Input target the shout - // is usually for) - object oIntruder = GetLocalObject(oShouter, AI_OBJECT + AI_ATTACK_SPECIFIC_OBJECT); - if(GetIgnoreNoFriend(oIntruder) || (!GetObjectSeen(oShouter) && !GetObjectHeard(oShouter))) - { - // Or, we look for the last melee target (which, at least, will be set) - oIntruder = GetLocalObject(oShouter, AI_OBJECT + AI_LAST_MELEE_TARGET); - if(GetIgnoreNoFriend(oIntruder) || (!GetObjectSeen(oShouter) && !GetObjectHeard(oShouter))) - { - // Current actual attack target of the shouter - oIntruder = GetAttackTarget(oShouter); - if(GetIgnoreNoFriend(oIntruder) || (!GetObjectSeen(oShouter) && !GetObjectHeard(oShouter))) - { - // Last hostile actor of the shouter - oIntruder = GetLastHostileActor(oShouter); - if(GetIgnoreNoFriend(oIntruder) || (!GetObjectSeen(oShouter) && !GetObjectHeard(oShouter))) - { - return OBJECT_INVALID; - } - } - } - } - return oIntruder; -} -// Responds to it (like makinging the callers attacker thier target) -// Called in OnConversation, and thats it. Use "ShouterFriend" To stop repeated GetIsFriend calls. -void RespondToShout(object oShouter, int nShoutIndex) -{ - // We use oIntruder to set who to attack. - object oIntruder; - // Check nShoutIndex against known constants - switch(nShoutIndex) - { - // Note: Not checked in sequential order (especially as they are constants). - // Instead, it is "Ones which if we are in combat, we still check" first. - - // Attack a specific object which the leader shouted about. - case AI_SHOUT_LEADER_ATTACK_TARGET_CONSTANT: - { - // If a leader, we set it as a local object, nothing more - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER, oShouter)) - { - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - oIntruder = GetLocalObject(oShouter, AI_ATTACK_SPECIFIC_OBJECT); - if(GetObjectSeen(oIntruder)) - { - // Set local object to use in next DetermineCombatRound. - // We do not interrupt current acition (EG: Life saving stoneskins!) to re-direct. - SetAIObject(AI_ATTACK_SPECIFIC_OBJECT, oIntruder); - // 6 second delay. - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - } - } - return; - } - break; - // Leader flee now - mass retreat to those who hear it. - case AI_SHOUT_LEADER_FLEE_NOW_CONSTANT: - { - // If a leader, we set it as a local object, nothing more - if(GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER, oShouter)) - { - // Get who we are going to run too - oIntruder = GetLocalObject(oShouter, AI_FLEE_TO); - - // RUN! If intruder set is over 5.0M or no valid intruder - ClearAllActions(); - - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - // Set to run - SetCurrentAction(AI_SPECIAL_ACTIONS_FLEE); - // Turn on fleeing visual effect - ApplyFleeingVisual(); - - // Ignore talk for 12 seconds - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 12.0); - - // If valid, we run to the intruder - if(GetIsObjectValid(oIntruder)) - { - SetAIObject(AI_FLEE_TO, oIntruder); - ActionMoveToObject(oIntruder); - } - else // Else, we will just follow our leader! - { - SetAIObject(AI_FLEE_TO, oShouter); - ActionForceFollowObject(oShouter, 3.0); - } - } - return; - } - break; - - // All others (IE: We need to not be in combat for these) - // Anything that requires "DetermineCombatRound()" is here. - - // If the shout is number 8, it is "I was opened" and so can only be a - // placeable or door. - case AI_SHOUT_I_WAS_OPENED_CONSTANT: - { - // If we are already attacking, we ignore this shout. - if(CannotPerformCombatRound()) return; - - // We need somewhat complexe here - to get thier opener. - int nType = GetObjectType(oShouter); - // Check object type. If not a placeable nor door - stop script. - if(nType == OBJECT_TYPE_PLACEABLE || - nType == OBJECT_TYPE_DOOR) - { - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - // Now, we assign the placeable/door to set thier opener. - // We do this by just executing a script that does it. - ExecuteScript(FILE_SET_OPENER, oShouter); - // We can immediantly get this would-be attacker! - oIntruder = GetLocalObject(oShouter, AI_PLACEABLE_LAST_OPENED_BY); - if(GetIsObjectValid(oIntruder)) - { - // Attack - ClearAllActions(); - DetermineCombatRound(oShouter); - } - else - { - // Move to the object who shouted in detect mode - SetActionMode(OBJECT_SELF, ACTION_MODE_DETECT, TRUE); - ActionMoveToObject(oShouter, TRUE); - } - } - return; - } - break; - - // Call to arms requires nothing special. It is only called if - // There is no target the shouter has to attack specifically, rather then - // "I_WAS_ATTACKED" which would have. - case AI_SHOUT_CALL_TO_ARMS_CONSTANT: - { - // If we are already attacking, we ignore this shout. - if(CannotPerformCombatRound()) return; - - // Ignore for 6 seconds - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - // do standard Call to Arms response - IE: Move to oShouter - CallToArmsResponse(oShouter); - return; - } - break; - // "Help my friend" is when a runner is running off (sorta fleeing) to - // get help. This will move to the location set on them to reinforce. - case AI_SHOUT_HELP_MY_FRIEND_CONSTANT: - { - // If we are already attacking, we ignore this shout. - if(CannotPerformCombatRound()) return; - - // Ignore things for 6 seconds - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - - // We move to where the runner/shouter wants us. - location lMoveTo = GetLocalLocation(oShouter, AI_LOCATION + AI_HELP_MY_FRIEND_LOCATION); - - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - // If the location is valid - if(GetIsObjectValid(GetAreaFromLocation(lMoveTo))) - { - // New special action, but one that is overrided by combat - SetCurrentAction(AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT); - SetAIObject(AI_MOVE_TO_COMBAT_OBJECT, oShouter); - SetAILocation(AI_MOVE_TO_COMBAT_LOCATION, lMoveTo); - - // Move to the location of the fight, attack. - ClearAllActions(); - // Move to the fights location - ActionMoveToLocation(lMoveTo, TRUE); - // When we see someone fighting, we'll DCR - return; - } - else - { - // Else, if we do not know of the friends attackers, or the location - // they are at, we will follow them without casting any preperation - // spells. - ClearAllActions(); - ActionForceFollowObject(oShouter, 3.0); - // When we see an enemy, we'll attack! - return; - } - return; - } - break; - - // "I was attacked" is called when a creature is hurt or sees an enemy, - // and starts to attack them. This means they know who the enemy is - - // and thusly we can get it from them (Ususally GetLastHostileActor() - // "I was killed" is the same, but applies a morale penalty too - case AI_SHOUT_I_WAS_ATTACKED_CONSTANT: - case AI_SHOUT_I_WAS_KILLED_CONSTANT: - { - // If it was "I was killed", we apply a short morale penatly - // Penalty is "Hit dice / 4 + 1" (so always 1 minimum) for 18 seconds. - if(nShoutIndex == AI_SHOUT_I_WAS_KILLED_CONSTANT) - { - SetMoralePenalty(GetHitDice(oShouter)/4 + 1, 18.0); - } - - // If we are already attacking, we ignore this shout. - if(CannotPerformCombatRound()) return; - - // 70. "[Shout] Reacting To Shout. [ShoutNo.] " + IntToString(iInput) + " [Shouter] " + GetName(oInput) - DebugActionSpeakByInt(70, oShouter, nShoutIndex); - - // Ignore for 6 seconds - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - - // Respond to oShouter's request for help - find thier target, and - // attack! - IWasAttackedResponse(oShouter); - return; - } - break; - } -} -// At 5+ intelligence, we fire off any dispells at oPlaceables location -void SearchDispells(object oPlaceable) -{ - // No dispelling at low intelligence. - if(GetBoundriedAIInteger(AI_INTELLIGENCE) < 5) return; - location lPlace = GetLocation(oPlaceable); - // Move closer if not seen. - if(!GetObjectSeen(oPlaceable)) - { - // Move nearer - 6 M is out of the dispell range - ActionMoveToObject(oPlaceable, TRUE, 6.0); - } - // Dispell if we have any - at the location of oPlaceable. - if(GetHasSpell(SPELL_LESSER_DISPEL)) - { - ActionCastSpellAtLocation(SPELL_LESSER_DISPEL, lPlace); - } - else if(GetHasSpell(SPELL_DISPEL_MAGIC)) - { - ActionCastSpellAtLocation(SPELL_DISPEL_MAGIC, lPlace); - } - else if(GetHasSpell(SPELL_GREATER_DISPELLING)) - { - ActionCastSpellAtLocation(SPELL_GREATER_DISPELLING, lPlace); - } - else if(GetHasSpell(SPELL_MORDENKAINENS_DISJUNCTION)) - { - ActionCastSpellAtLocation(SPELL_MORDENKAINENS_DISJUNCTION, lPlace); - } -} - -// This sets a morale penalty, to the exsisting one, if there is one. -// It will reduce itself (by the penalty) after fDuration (or if we die, ETC, it is deleted). -// It is deleted at the end of combat as well. -void SetMoralePenalty(int nPenalty, float fDuration = 0.0) -{ - int nNewPenalty = GetAIInteger(AI_MORALE_PENALTY) + nPenalty; - SetAIInteger(AI_MORALE_PENALTY, nNewPenalty); - DelayCommand(fDuration, RemoveMoralePenalty(nPenalty)); -} -// Removes nPenalty amount if it can. -void RemoveMoralePenalty(int nPenalty) -{ - int nNewPenalty = GetAIInteger(AI_MORALE_PENALTY) - nPenalty; - if(nNewPenalty > 0 && !GetIsDead(OBJECT_SELF)) - { - SetAIInteger(AI_MORALE_PENALTY, nNewPenalty); - } - else - { - DeleteAIInteger(AI_MORALE_PENALTY); - } -} - -// This MIGHT move to oEnemy -// - Checks special actions, such as fleeing, and may run instead! -void ActionMoveToEnemy(object oEnemy) -{ - // Make sure that we are not fleeing badly (-1 morale from all enemies) - if(GetIsEnemy(oEnemy)) - { - // -1 morale, flee - if(PerceptionFleeFrom(oEnemy)) return; - } - if(GetIsPerformingSpecialAction()) - { - // Stop if we have an action we don't want to override - return; - } - // End default is move to the enemy - ClearAllActions(); - ActionMoveToObject(oEnemy, TRUE); - // combat round to heal/search/whatever - if(!GetFactionEqual(oEnemy)) - { - ActionDoCommand(DetermineCombatRound(oEnemy)); - } -} - -// Returns TRUE if we have under 0 morale, set to flee. -// - They then run! (Badly) -int PerceptionFleeFrom(object oEnemy) -{ - object oRunTarget = oEnemy; - if(GetAIInteger(AI_INTELLIGENCE) < FALSE) - { - // Valid run from target - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oRunTarget)) - { - oRunTarget = GetLastHostileActor(); - if(!GetIsObjectValid(oRunTarget) || GetIsDead(oRunTarget)) - { - // Stop - nothing to flee from! - return FALSE; - } - } - } - } - // Run from enemy - ClearAllActions(); - ActionMoveAwayFromObject(oRunTarget, TRUE, 50.0); - return TRUE; - } - // 0 or more morale. - return FALSE; -} -// This wrappers commonly used code for a "Call to arms" type response. -// * We know of no enemy, so we will move to oAlly, who either called to -// us, or, well, we know of. -// * Calls out AI_SHOUT_CALL_TO_ARMS too. -void CallToArmsResponse(object oAlly) -{ - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // If we are over 2 meters away from oShouter, we move to them using - // the special action - if(GetDistanceToObject(oAlly) > 2.0 || !GetObjectSeen(oAlly)) - { - // New special action, but one that is overrided by combat - location lAlly = GetLocation(oAlly); - SetCurrentAction(AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT); - SetAIObject(AI_MOVE_TO_COMBAT_OBJECT, oAlly); - SetAILocation(AI_MOVE_TO_COMBAT_LOCATION, lAlly); - - // Move to the location of the fight, attack. - ClearAllActions(); - // Move to the fights location - ActionMoveToLocation(lAlly, TRUE); - // When we see someone fighting, we'll DCR - return; - } - else - { - // Determine it anyway - we will search around oShouter - // if nothing is found...but we are near to the shouter - DetermineCombatRound(oAlly); - return; - } -} -// This wrappers commonly used code for a "I was attacked" type response. -// * We know there will be an enemy - or should be - and if we find one to attack -// (using GetIntruderFromShout()) - we attack it (and call another I was attacked) -// else, this will run CallToArmsResponse(oAlly); -// * Calls out AI_SHOUT_I_WAS_ATTACKED, or AI_SHOUT_CALL_TO_ARMS too. -void IWasAttackedResponse(object oAlly) -{ - // Get the indruder. This is either who oShouter is currently attacking, - // or the last attacker of them. - object oIntruder = GetIntruderFromShout(oAlly); - - // If valid, of course attack! - if(GetIsObjectValid(oIntruder)) - { - // 1.4 Note: - // * It used to check "Are they seen". Basically, this is redudant - // with the checks used in DetermineCombatRound(). It will do the - // searching using oIntruder whatever. - - // Stop, and attack - ClearAllActions(); - DetermineCombatRound(oIntruder); - - // Shout I was attacked - we've set our intruder now - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - return; - } - // If invalid, we act as if it was "Call to arms" type thing. - // Call to arms is better to use normally, of course. - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // We see if they are attacking anything: - oIntruder = GetAttackTarget(oAlly); - if(!GetIsObjectValid(oIntruder)) - { - oIntruder = GetLocalObject(oAlly, AI_OBJECT + AI_LAST_MELEE_TARGET); - } - - // If valid, we will move to a point bisecting the intruder and oAlly, or - // move to oAlly. Should get interrupted once we see the attack target. - // * NEED TO TEST - if(GetIsObjectValid(oIntruder)) - { - // New special action, but one that is overrided by combat - vector vTarget = GetPosition(oIntruder); - vector vSource = GetPosition(OBJECT_SELF); - vector vDirection = vTarget - vSource; - float fDistance = VectorMagnitude(vDirection) / 2.0; - vector vPoint = VectorNormalize(vDirection) * fDistance + vSource; - location lTarget = Location(GetArea(OBJECT_SELF), vPoint, DIRECTION_NORTH); - - SetCurrentAction(AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT); - SetAIObject(AI_MOVE_TO_COMBAT_OBJECT, oAlly); - SetAILocation(AI_MOVE_TO_COMBAT_LOCATION, lTarget); - - // Move to the location of the fight, attack. - ClearAllActions(); - // Move to the fights location - ActionMoveToLocation(lTarget, TRUE); - // When we see someone fighting, we'll DCR - return; - } - // If we are over 2 meters away from oShouter, we move to them using - // the special action - else if(GetDistanceToObject(oAlly) > 2.0 || !GetObjectSeen(oAlly)) - { - // New special action, but one that is overrided by combat - location lAlly = GetLocation(oAlly); - SetCurrentAction(AI_SPECIAL_ACTIONS_MOVE_TO_COMBAT); - SetAIObject(AI_MOVE_TO_COMBAT_OBJECT, oAlly); - SetAILocation(AI_MOVE_TO_COMBAT_LOCATION, lAlly); - - // Move to the location of the fight, attack. - ClearAllActions(); - // Move to the fights location - ActionMoveToLocation(lAlly, TRUE); - // When we see someone fighting, we'll DCR - return; - } - else - { - // Determine it anyway - we will search around oShouter - // if nothing is found...but we are near to the shouter - DetermineCombatRound(oAlly); - return; - } - } -} - - - - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_seteffects.nss b/_module/nss/j_inc_seteffects.nss deleted file mode 100644 index 0d741ce8..00000000 --- a/_module/nss/j_inc_seteffects.nss +++ /dev/null @@ -1,479 +0,0 @@ -/*/////////////////////// [Include - Set Effects] ////////////////////////////// - Filename: J_INC_SetEffects -///////////////////////// [Include - Set Effects] ////////////////////////////// - This can be executed on a PC or NPC, and sets what thier current effects - are - the hostile ones. - - It is executed on a PC every 6 seconds in combat, delayed by a timer, - by other NPCs who want to target them. - - It is meant to be more efficient then doing countless checks against other - NPCs and PCs for what effects they already have on them. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added - 1.4 - Changed so fear and stun was seperate. - Uncommandable still is now for any uncommandable effects. - - - TO DO - - Make the ability decrease into "light" "major" and so on, about 4 - ratings, each set as more decreases are present. -///////////////////////// [Workings] /////////////////////////////////////////// - ExecuteScript - might not work faster. If so, it is easy to add into the - generic AI and have oTarget to set to. - - It searches the code and sets 3 custom integers, but only once (so not - during the loop) -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Set Effects] ////////////////////////////*/ - -#include "J_INC_CONSTANTS" -#include "prc_inc_racial" - -//void main (){} - -// List (use Global to not conflict with the nwscript.nss!) -const int GlobalEffectUncommandable = 0x00000001;// Stun. Sleep. Fear. Turning. Paralsis. Petrify. -const int GlobalEffectSilenced = 0x00000002;// Eeek! -const int GlobalEffectSlowed = 0x00000004;// Stop with haste. -const int GlobalEffectUltravision = 0x00000008; -const int GlobalEffectSeeInvisible = 0x00000010; // NOT Inc. Trueseeing -const int GlobalEffectTrueSeeing = 0x00000020; -const int GlobalEffectTimestop = 0x00000040; -const int GlobalEffectInvisible = 0x00000080; -const int GlobalEffectDeaf = 0x00000100;// Ack! -const int GlobalEffectHaste = 0x00000200; -const int GlobalEffectPolymorph = 0x00000400;// Only attack -const int GlobalEffectBlindness = 0x00000800;// Oh no! Cannot see others to cast spells. -const int GlobalEffectDisease = 0x00001000; -const int GlobalEffectPoison = 0x00002000; -const int GlobalEffectCurse = 0x00004000; -const int GlobalEffectNegativeLevel = 0x00008000; -const int GlobalEffectEntangle = 0x00010000; -const int GlobalEffectMovementSpeedDecrease = 0x00020000; -const int GlobalEffectDarkness = 0x00040000;// Noo! Need ultravision! -const int GlobalEffectDazed = 0x00080000;// Special: 1.30 patch, we can move! -const int GlobalEffectEthereal = 0x00100000; -const int GlobalEffectPetrify = 0x00200000; -const int GlobalEffectParalyze = 0x00400000;// Divided from Uncommandable for healing of -const int GlobalEffectSpellFailure = 0x00800000;// Makes sure spells are not cast under high failure. -const int GlobalEffectDamageShield = 0x01000000;// All damage shields -const int GlobalEffectFear = 0x02000000;// 1.4. Remove fear + G.Rest. Removes. -const int GlobalEffectStun = 0x04000000;// 1.4. G.Rest. Removes. -//int GlobalEffectAbilityDecrease = 0; // In combat include - -// These are Globals for spell effects, to not csat them on us again, and to -// speed things up... -// These are *good* spells. This effect is only set up on us. -const int GlobalHasStoneSkinProtections = 0x00000001; -const int GlobalHasElementalProtections = 0x00000002; -const int GlobalHasVisageProtections = 0x00000004; -const int GlobalHasMantalProtections = 0x00000008; -const int GlobalHasGlobeProtections = 0x00000010; -const int GlobalHasMindResistanceProtections = 0x00000020; -const int GlobalHasAidingSpell = 0x00000040; -const int GlobalHasRangedConsealment = 0x00000080; -const int GlobalHasRageSpells = 0x00000100; -const int GlobalHasBullsStrengthSpell = 0x00000200; -const int GlobalHasCatsGraceSpell = 0x00000400; -const int GlobalHasClairaudienceSpell = 0x00000800; -const int GlobalHasDeathWardSpell = 0x00001000; -const int GlobalHasDivinePowerSpell = 0x00002000; -const int GlobalHasEaglesSpledorSpell = 0x00004000; -const int GlobalHasEnduranceSpell = 0x00008000; -const int GlobalHasFoxesCunningSpell = 0x00010000; -const int GlobalHasProtectionEvilSpell = 0x00020000; -const int GlobalHasProtectionGoodSpell = 0x00040000; -const int GlobalHasLightSpell = 0x00080000; -const int GlobalHasConsealmentSpells = 0x00100000;// Displacement -const int GlobalHasProtectionSpellsSpell = 0x00200000; -const int GlobalHasRegenerateSpell = 0x00400000; -const int GlobalHasOwlsWisdomSpell = 0x00800000; -const int GlobalHasSpellResistanceSpell = 0x01000000; -const int GlobalHasSpellWarCrySpell = 0x02000000; -//const int GlobalHasElementalShieldSpell = 0x04000000;// Is general effect -const int GlobalHasDomainSpells = 0x08000000; -const int GlobalHasDeflectionACSpell = 0x10000000; -const int GlobalHasNaturalACSpell = 0x20000000; -const int GlobalHasOtherACSpell = 0x40000000; -const int GlobalHasWeaponHelpSpell = 0x80000000; - -// Other, AOE ones -//const int GlobalHasAreaEffectDamaging = 0x04000000; -//const int GlobalHasAreaEffectImpeding = 0x08000000; - -int TempEffectHex, TempSpellHex; - -// Sets up an effects thing to that -void AI_SetTargetHasEffect(int nEffectHex); -// Sets we have spell iSpellHex's effects. -void AI_SetWeHaveSpellsEffect(int nSpellHex); -// Sets up effects on oTarget -void AI_SetEffectsOnTarget(object oTarget = OBJECT_SELF); - - -// Simple return TRUE if it matches hex. -// - Effects tested on oTarget -int AI_GetAIHaveEffect(int nEffectHex, object oTarget = OBJECT_SELF); -// Simple return TRUE if it matches hex. -// * Can only be used on ourself. -int AI_GetAIHaveSpellsEffect(int nSpellHex); - -// Sets up an effects thing to that -void AI_SetTargetHasEffect(int nEffectHex) -{ - TempEffectHex = TempEffectHex | nEffectHex; -} -// Sets we have spell iSpellHex's effects. -void AI_SetWeHaveSpellsEffect(int nSpellHex) -{ - TempSpellHex = TempSpellHex | nSpellHex; -} - -// Simple return TRUE if it matches hex. -// - Effects tested on oTarget -int AI_GetAIHaveEffect(int nEffectHex, object oTarget = OBJECT_SELF) -{ - return (GetLocalInt(oTarget, AI_EFFECT_HEX) & nEffectHex); - -} -// Simple return TRUE if it matches hex. -// * Can only be used on ourself. -int AI_GetAIHaveSpellsEffect(int nSpellHex) -{ - return (GetLocalInt(OBJECT_SELF, AI_SPELL_HEX) & nSpellHex); -} - -// Sets up effects on oTarget -void AI_SetEffectsOnTarget(object oTarget = OBJECT_SELF) -{ - TempEffectHex = FALSE; - TempSpellHex = FALSE; - // Checks our effects once. - effect eCheck = GetFirstEffect(oTarget); - int nEffect, nEffectAbilityDecrease, nSpellID; - // EFFECTS: - // For ALL targets (that we will use), we set up effects on a system of Hexes. - // like spawn in things. Replaces GetHasSpellEffect, except genralising - - // IE we will NOT cast more than one of the stoneskin type things at once. - while(GetIsEffectValid(eCheck)) - { - nEffect = GetEffectType(eCheck); - switch(nEffect) - { - case EFFECT_TYPE_INVALIDEFFECT: - case EFFECT_TYPE_VISUALEFFECT: - // Don't check these for spell values. - break; - case EFFECT_TYPE_PARALYZE: // Also makes you uncommandable - { - AI_SetTargetHasEffect(GlobalEffectParalyze); - AI_SetTargetHasEffect(GlobalEffectUncommandable); - } - break; - case EFFECT_TYPE_STUNNED: // Also makes you uncommandable - { - AI_SetTargetHasEffect(GlobalEffectStun); - AI_SetTargetHasEffect(GlobalEffectUncommandable); - } - break; - case EFFECT_TYPE_FRIGHTENED: // Also makes you uncommandable - { - AI_SetTargetHasEffect(GlobalEffectFear); - AI_SetTargetHasEffect(GlobalEffectUncommandable); - } - break; - // * Cannot remove these, but make you unable to move. - case EFFECT_TYPE_SLEEP: - case EFFECT_TYPE_TURNED: - case EFFECT_TYPE_DISAPPEARAPPEAR:// Added for dragon flying - case EFFECT_TYPE_CONFUSED:// 1.4 added. wasn't in before - AI_SetTargetHasEffect(GlobalEffectUncommandable); - break; - case EFFECT_TYPE_DAZED: - AI_SetTargetHasEffect(GlobalEffectDazed); - break; - case EFFECT_TYPE_SILENCE: - AI_SetTargetHasEffect(GlobalEffectSilenced); - break; - case EFFECT_TYPE_SLOW: - AI_SetTargetHasEffect(GlobalEffectSlowed); - break; - case EFFECT_TYPE_ULTRAVISION: - AI_SetTargetHasEffect(GlobalEffectUltravision); - break; - case EFFECT_TYPE_SEEINVISIBLE: - AI_SetTargetHasEffect(GlobalEffectSeeInvisible); - break; - // Caused by Beholder things mainly, but this stops any spell being - // cast, not just, for example, arcane spells cast in armor. - case EFFECT_TYPE_SPELL_FAILURE: - AI_SetTargetHasEffect(GlobalEffectSpellFailure); - break; - // Penetrates darkness. - case EFFECT_TYPE_TRUESEEING: - AI_SetTargetHasEffect(GlobalEffectTrueSeeing); - break; - // Timestop - IE don't cast same spell twice. - case EFFECT_TYPE_TIMESTOP: - AI_SetTargetHasEffect(GlobalEffectTimestop); - break; - // Invisibility/Improved (although improved only uses normal in the spell) - // Sneak attack/whatever :-) - // - include the spell EFFECT_TYPE_ETHEREAL. - case EFFECT_TYPE_INVISIBILITY: - case EFFECT_TYPE_IMPROVEDINVISIBILITY: - AI_SetTargetHasEffect(GlobalEffectInvisible); - break; - // Deaf - spell failing of 20%, but still cast. - case EFFECT_TYPE_DEAF: - AI_SetTargetHasEffect(GlobalEffectDeaf); - break; - // Special invis. - case EFFECT_TYPE_ETHEREAL: - AI_SetTargetHasEffect(GlobalEffectEthereal); - break; - // Haste - so don't cast haste again and whatever. - case EFFECT_TYPE_HASTE: - AI_SetTargetHasEffect(GlobalEffectHaste); - break; - // Haste - so don't cast haste again and whatever. - case EFFECT_TYPE_POLYMORPH: - AI_SetTargetHasEffect(GlobalEffectPolymorph); - break; - // Blindness - oh no, can't see, only hear! - case EFFECT_TYPE_BLINDNESS: - AI_SetTargetHasEffect(GlobalEffectBlindness); - break; - // Damage shield = Elemental shield, wounding whispers, Death armor, mestals - // sheth and so on. - case EFFECT_TYPE_ELEMENTALSHIELD: - AI_SetTargetHasEffect(GlobalEffectDamageShield); - break; - // Things we may want to remove VIA cirtain spells, we set here - may as well. - // Same setting as any other. - // IF we can remove it (not confusion ETC of course) then we set it. - case EFFECT_TYPE_DISEASE: - AI_SetTargetHasEffect(GlobalEffectDisease); - break; - case EFFECT_TYPE_POISON: - AI_SetTargetHasEffect(GlobalEffectPoison); - break; - // SoU Petrify - // Note: Also makes them uncommandable - case EFFECT_TYPE_PETRIFY: - { - AI_SetTargetHasEffect(GlobalEffectPetrify); - AI_SetTargetHasEffect(GlobalEffectUncommandable); - } - break; - case EFFECT_TYPE_CURSE: - AI_SetTargetHasEffect(GlobalEffectCurse); - break; - case EFFECT_TYPE_NEGATIVELEVEL: - AI_SetTargetHasEffect(GlobalEffectNegativeLevel); - break; - case EFFECT_TYPE_ABILITY_DECREASE: - case EFFECT_TYPE_AC_DECREASE: - case EFFECT_TYPE_ATTACK_DECREASE: - case EFFECT_TYPE_DAMAGE_DECREASE: - case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: - case EFFECT_TYPE_SAVING_THROW_DECREASE: - case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: - case EFFECT_TYPE_SKILL_DECREASE: - // Special - we add one to this, to determine when to use restoration - nEffectAbilityDecrease++; - break; - case EFFECT_TYPE_ENTANGLE: - AI_SetTargetHasEffect(GlobalEffectEntangle); - break; - case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: - AI_SetTargetHasEffect(GlobalEffectMovementSpeedDecrease); - break; - case EFFECT_TYPE_DARKNESS: - AI_SetTargetHasEffect(GlobalEffectDarkness); - break; - default: - { - // Check spells *we* (1.4 change: now checks OBJECT_SELF) - // have on...so we don't cast over them! - nSpellID = GetEffectSpellId(eCheck); - if(nSpellID != -1 && oTarget == OBJECT_SELF) - { - switch(nSpellID) - { - // All weapon things are on one variable. We cast the best. - case SPELL_MAGIC_WEAPON: - case SPELL_BLESS_WEAPON: - case SPELL_FLAME_WEAPON: - case SPELL_GREATER_MAGIC_WEAPON: - case SPELL_BLACKSTAFF: - case SPELL_BLADE_THIRST: - AI_SetWeHaveSpellsEffect(GlobalHasWeaponHelpSpell); - break; - case SPELL_ENDURE_ELEMENTS: - case SPELL_ENERGY_BUFFER: - case SPELL_RESIST_ELEMENTS: - case SPELL_PROTECTION_FROM_ELEMENTS: - AI_SetWeHaveSpellsEffect(GlobalHasElementalProtections); - break; - case SPELL_BARKSKIN: - case SPELL_STONE_BONES: // +3 to undead - AI_SetWeHaveSpellsEffect(GlobalHasNaturalACSpell); - break; - case SPELL_SHIELD: - case SPELL_DIVINE_SHIELD: - AI_SetWeHaveSpellsEffect(GlobalHasDeflectionACSpell); - break; - case SPELL_EPIC_MAGE_ARMOR:// Epic spell +20 to AC. - case SPELL_MAGE_ARMOR: - AI_SetWeHaveSpellsEffect(GlobalHasOtherACSpell); - break; - case SPELL_ENTROPIC_SHIELD: - AI_SetWeHaveSpellsEffect(GlobalHasRangedConsealment); - break; - case AI_SPELL_EPIC_WARDING: - case SPELL_STONESKIN: - case SPELL_GREATER_STONESKIN: - case SPELL_PREMONITION: - case SPELL_SHADES_STONESKIN: // Stoneskin one: 342 - AI_SetWeHaveSpellsEffect(GlobalHasStoneSkinProtections); - break; - case SPELL_GHOSTLY_VISAGE: - case SPELL_SHADOW_SHIELD: - case SPELL_ETHEREAL_VISAGE: - case SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE: // one: 351 is gostly visage. Speeds up not using number - case SPELL_SHADOW_EVADE: // Shadow dancer - case SPELLABILITY_AS_GHOSTLY_VISAGE: // Assassin - AI_SetWeHaveSpellsEffect(GlobalHasVisageProtections); - break; - case SPELL_GREATER_SPELL_MANTLE: - case SPELL_SPELL_MANTLE: - case SPELL_LESSER_SPELL_MANTLE: - AI_SetWeHaveSpellsEffect(GlobalHasMantalProtections); - break; - case SPELL_MINOR_GLOBE_OF_INVULNERABILITY: - case SPELL_GLOBE_OF_INVULNERABILITY: - case SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE: - AI_SetWeHaveSpellsEffect(GlobalHasGlobeProtections); - break; - case SPELL_AID: - case SPELL_PRAYER: - case SPELL_BLESS: - AI_SetWeHaveSpellsEffect(GlobalHasAidingSpell); - break; - case SPELL_BULLS_STRENGTH: - case SPELL_GREATER_BULLS_STRENGTH: - case SPELLABILITY_BG_BULLS_STRENGTH: // Blackguard - AI_SetWeHaveSpellsEffect(GlobalHasBullsStrengthSpell); - break; - case SPELL_CATS_GRACE: - case SPELL_GREATER_CATS_GRACE: - case AI_SPELLABILITY_HARPER_CATS_GRACE: // Harper - AI_SetWeHaveSpellsEffect(GlobalHasCatsGraceSpell); - break; - case SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE: - AI_SetWeHaveSpellsEffect(GlobalHasClairaudienceSpell); - break; - case SPELL_CLARITY: - case SPELL_LESSER_MIND_BLANK: - case SPELL_MIND_BLANK: - AI_SetWeHaveSpellsEffect(GlobalHasMindResistanceProtections); - break; - case SPELL_DEATH_WARD: - case SPELL_UNDEATHS_ETERNAL_FOE:// Similar to death ward. Got more things. - AI_SetWeHaveSpellsEffect(GlobalHasDeathWardSpell); - break; - case SPELL_DISPLACEMENT:// 50% consealment - AI_SetWeHaveSpellsEffect(GlobalHasConsealmentSpells); - break; - case SPELL_DIVINE_POWER: - AI_SetWeHaveSpellsEffect(GlobalHasDivinePowerSpell); - break; - case SPELL_EAGLE_SPLEDOR: - case SPELL_GREATER_EAGLE_SPLENDOR: - case AI_SPELLABILITY_HARPER_EAGLE_SPLEDOR: // Harper - AI_SetWeHaveSpellsEffect(GlobalHasEaglesSpledorSpell); - break; - case SPELL_ENDURANCE: - case SPELL_GREATER_ENDURANCE: - AI_SetWeHaveSpellsEffect(GlobalHasEnduranceSpell); - break; - case SPELL_FOXS_CUNNING: - case SPELL_GREATER_FOXS_CUNNING: - AI_SetWeHaveSpellsEffect(GlobalHasFoxesCunningSpell); - break; - case SPELL_HOLY_AURA: - case SPELL_MAGIC_CIRCLE_AGAINST_EVIL: - case SPELL_PROTECTION_FROM_EVIL: - AI_SetWeHaveSpellsEffect(GlobalHasProtectionEvilSpell); - break; - case SPELL_UNHOLY_AURA: - case SPELL_MAGIC_CIRCLE_AGAINST_GOOD: - case SPELL_PROTECTION_FROM_GOOD: - AI_SetWeHaveSpellsEffect(GlobalHasProtectionGoodSpell); - break; - case SPELL_LIGHT: - case SPELL_CONTINUAL_FLAME: - AI_SetWeHaveSpellsEffect(GlobalHasLightSpell); - break; - case SPELL_OWLS_WISDOM: - case SPELL_GREATER_OWLS_WISDOM: - case AI_SPELL_OWLS_INSIGHT:// Missed spell - AI_SetWeHaveSpellsEffect(GlobalHasOwlsWisdomSpell); - break; - case SPELL_PROTECTION_FROM_SPELLS: - AI_SetWeHaveSpellsEffect(GlobalHasProtectionSpellsSpell); - break; - case SPELL_REGENERATE: - AI_SetWeHaveSpellsEffect(GlobalHasRegenerateSpell); - break; - case SPELL_SPELL_RESISTANCE: - AI_SetWeHaveSpellsEffect(GlobalHasSpellResistanceSpell); - break; - case SPELL_WAR_CRY: - AI_SetWeHaveSpellsEffect(GlobalHasSpellWarCrySpell); - break; - case SPELLABILITY_DIVINE_PROTECTION: - case SPELLABILITY_DIVINE_STRENGTH: - case SPELLABILITY_DIVINE_TRICKERY: - case SPELLABILITY_BATTLE_MASTERY: - AI_SetWeHaveSpellsEffect(GlobalHasDomainSpells); - break; - case SPELLABILITY_RAGE_3: - case SPELLABILITY_RAGE_4: - case SPELLABILITY_RAGE_5: - case SPELLABILITY_BARBARIAN_RAGE: - case SPELLABILITY_INTENSITY_1: - case SPELLABILITY_INTENSITY_2: - case SPELLABILITY_INTENSITY_3: - case SPELLABILITY_FEROCITY_1: - case SPELLABILITY_FEROCITY_2: - case SPELLABILITY_FEROCITY_3: - case SPELL_BLOOD_FRENZY: - AI_SetWeHaveSpellsEffect(GlobalHasRageSpells); - break; - } - } - } - break; - } - eCheck = GetNextEffect(oTarget); - } - // If undead, set some immunities by default - if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - AI_SetWeHaveSpellsEffect(GlobalHasDeathWardSpell); - } - DeleteLocalInt(oTarget, AI_ABILITY_DECREASE); - DeleteLocalInt(oTarget, AI_EFFECT_HEX); - // Special - only we set spell hexs on ourselves. - if(oTarget == OBJECT_SELF) - { - DeleteLocalInt(oTarget, AI_SPELL_HEX); - SetLocalInt(oTarget, AI_SPELL_HEX, TempSpellHex); - } - // Set final ones from temp integers - SetLocalInt(oTarget, AI_ABILITY_DECREASE, nEffectAbilityDecrease); - SetLocalInt(oTarget, AI_EFFECT_HEX, TempEffectHex); -} diff --git a/_module/nss/j_inc_setweapons.nss b/_module/nss/j_inc_setweapons.nss deleted file mode 100644 index 9e96a4d4..00000000 --- a/_module/nss/j_inc_setweapons.nss +++ /dev/null @@ -1,1975 +0,0 @@ -/*/////////////////////// [Include - Set Weapons] ////////////////////////////// - Filename: J_Inc_Setweapons -///////////////////////// [Include - Set Weapons] ////////////////////////////// - This holds all the stuff for setting up local objects for weapons we have - or have not got - normally the best to worst. -///////////////////////// [History] //////////////////////////////////////////// - 1.0 - Put in include - 1.3 - Fixed minor things, added arrays of weapons (for deul wielding) and - heal kits and stuff added. - Added to OnSpawn. - 1.4 - Removed item checking for wands etc. - TO DO: - - Perhaps remove healing kit code? Check in the general AI at start of combat? - - Perhaps add in the other feats? Maybe not - - Have a setting to allow a cirtain weapon type be favoured/be able to - override the default settings and set a weapon to use, in the spawn - script. - - Redo how potions and item spells are setup! -///////////////////////// [Workings] /////////////////////////////////////////// - This is included in "J_AI_SetWeapons" and executed from other places VIA it. - - This migth change, but not likely. It could be re-included OnSpawn at least - for spawning in. - - Yraen's script really. Modified some things in it though, trying to speed it up - Changed things like if statements to switches, tried (somewhat unsucessfully) to - Add the magical staff (never equips it?) and the values are now much cleaner and - better valued. - - NOTE: - - - Ignores OVERWHELMING CRITICAL - - Ignores DEVASTATING CRITICAL - - Ignores EPIC WEAPON FOCUS - - Ignores EPIC WEAPON SPECIALIZATION - - Ignores WEAPON OF CHOICE - - So if you really want the item to be used, just use one weapon. - - This is because epic feats, 5 lots, xAmount of checks, is many too many for - it to be worth it. Maybe less then 1% would ever come up true, out of the - many GetHasFeat() checks. - - The lower level ones are taken into account, however! And these are much - more common. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A -///////////////////////// [Include - Set Weapons] ////////////////////////////*/ - -#include "J_INC_CONSTANTS" - -/*****Structure******/ - -// Things we use throughout, saves time (and Get's) putting them here. -// These are boolean proficiencies. They either have them...or not! -// After those, are other variables like size, strength, and value of the current item. -int bProfWizard, bProfDruid, bProfMonk, bProfElf, bProfRogue, bProfSimple, - bProfMartial, bProfExotic, bProfShield, bProfTwoWeapons, nCreatureSize, - nCreatureStrength, nCurrentItemValue, bCurrentItemIsMighty, bCurrentItemIsUnlimited, - nCurrentItemSize, nCurrentItemDamage, nCurrentItemType, bGotArrows, bGotBolts, - bGotBullets; - -// String for setting a value integer to an item -const string SETWEP_VALUE = "VALUE"; -const string SETWEP_DISTANCE = "DISTANCE"; -const string SETWEP_IS_UNLIMITED = "SETWEP_IS_UNLIMITED"; -const string SETWEP_SHIELD = "SHIELD"; - -// Constants for weapon size. -const int WEAPON_SIZE_INVALID = 0; -const int WEAPON_SIZE_TINY = 1; -const int WEAPON_SIZE_SMALL = 2; -const int WEAPON_SIZE_MEDIUM = 3; -const int WEAPON_SIZE_LARGE = 4; - -//int CREATURE_SIZE_INVALID = 0; -//int CREATURE_SIZE_TINY = 1; -//int CREATURE_SIZE_SMALL = 2; -//int CREATURE_SIZE_MEDIUM = 3; -//int CREATURE_SIZE_LARGE = 4; -//int CREATURE_SIZE_HUGE = 5; - -/**** MAIN CALLS ****/ -// Start of the whole thing... -// - Runs through ALL inventory items, and the weapon/ammo slots, to -// set what weapons are best to use, backup ones, shields and so forth! -void SetWeapons(object oTarget = OBJECT_SELF); -// Goes through and sets a value and then a weopen to all weopen items -void SortInventory(object oTarget); -// This returns the size of oItem -int GetWeaponSize(object oItem = OBJECT_INVALID); -// reset healing kits only on oTarget. -void ResetHealingKits(object oTarget); - -/**** SETTING ****/ -// Ranged weopen is set - final one to use. -void SetRangedWeapon(object oTarget); -// Sets the primary weopen to use. -void SetPrimaryWeapon(object oTarget, object oItem = OBJECT_INVALID); -// sets the Two Handed Weopen to use. -void SetTwoHandedWeapon(object oTarget, object oItem = OBJECT_INVALID); -// Ammo counters are set, although I do not think they specifically are equipped. -void SetAmmoCounters(object oTarget); -// Sets the object shield to use. Best one. -void SetShield(object oTarget); -// Like the ranged weapons, we set this so we can have 2 shields (so we can tell -// when to re-set such things). -void StoreShield(object oTarget, object oItem); -// Uses right prefix to store the object to oTarget. -void SWFinalAIObject(object oTarget, string sName, object oObject); -// Uses right prefix to store the iInt to oTarget. -void SWFinalAIInteger(object oTarget, string sName, int nInt); -// Deletes object with Prefix -void SWDeleteAIObject(object oTarget, string sName); -// Deletes integer with Prefix -void SWDeleteAIInteger(object oTarget, string sName); - -// Sets the weapon to the array, in the right spot... -// If bSecondary is TRUE, it uses the weapon size, and creature size to modifiy -// the value, IE: Sets it as the secondary weapon. -void ArrayOfWeapons(string sArray, object oTarget, object oItem, int nValue, int bSecondary = FALSE); -// Deletes all the things in an array...set to sArray -void DeleteDatabase(object oTarget, string sArray); -// Deletes all things, before we start! -void DeleteAllPreviousWeapons(object oTarget); - -/**** STORING ****/ -// Stores the ranged weopen - it also needs to check ammo before choosing one. -void StoreRangedWeapon(object oTarget, object oItem = OBJECT_INVALID); -// This adds the maximum damage onto the value -void BaseLargeWeapons(object oTarget, object oItem = OBJECT_INVALID); -// This adds the maximum damage onto the value. -void BaseMediumWeapons(object oTarget, object oItem = OBJECT_INVALID); -// This adds the maximum damage onto the value -void BaseSmallWeapons(object oTarget, object oItem = OBJECT_INVALID); -// This adds the maximum damage onto the value -void BaseTinyWeapons(object oTarget, object oItem = OBJECT_INVALID); -// This adds the effects onto the value -void BaseEffects(object oTarget, object oItem = OBJECT_INVALID); -// This will take the weapon size, and things, and apply the right base effects. -void DoEffectsOf(object oTarget, object oItem); - -/*** OTHER ****/ -// Erm...deletes the ints. Like wizard and so on. -void DeleteInts(object oTarget); -// This returns _STATE local int -int GetState(object oTarget); -// This is the deletion of the values of weapons. -void DeleteValueInts(object oTarget, string sArray); -// This moves the values from nMax to nNumberStart back one in the list. -void MoveArrayBackOne(string sArray, int nNumberStart, object oTarget, int nMax); - -//:://///////////////////////////////////////////// -//:: Name SetWeopens -//::////////////////////////////////////////////// -/* - Main call - it starts the process of checking - Inventory, and so on -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void SetWeapons(object oTarget = OBJECT_SELF) -{ - // Deletes all previous things, even if we don't have them, just in case. - DeleteAllPreviousWeapons(oTarget); - - // We don't do this if we have AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING set. - if(GetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER)) return; - - // Gets the creature size, stores it... - nCreatureSize = GetCreatureSize(oTarget); - // No need to take off strength. It is pulrey for mighty weapons, we - // add on this bonus to the value. - // Thusly, we always make it a minimum of 0. - nCreatureStrength = GetAbilityModifier(ABILITY_STRENGTH, oTarget); - if(nCreatureStrength < 0) nCreatureStrength = 0; - - // Ints, globally set. - bProfDruid = GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oTarget); - bProfElf = GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oTarget); - bProfExotic = GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oTarget); - bProfMartial = GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oTarget); - bProfMonk = GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oTarget); - bProfRogue = GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oTarget); - bProfSimple = GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oTarget); - bProfWizard = GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oTarget); - bProfShield = GetHasFeat(FEAT_SHIELD_PROFICIENCY, oTarget); - bProfTwoWeapons = (GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oTarget) || - GetHasFeat(FEAT_AMBIDEXTERITY, oTarget) || - GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING, oTarget)); - - // Sorts the inventory, on oTarget, with nCreatureSize of creature - SortInventory(oTarget); -} - -//:://///////////////////////////////////////////// -//:: Name SortInventory -//::////////////////////////////////////////////// -/* - Right - Goes through all items in the inventory - It, based in Weopen size and creature size, - do base effects of it (value it), if a weopen -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void SortInventory(object oTarget) -{ - // Note to self: Removed potion setting. THis is done each round in AI include - // because it is probably better that way. - int nBase, nWeaponSize, nCnt; - object oItem, oHighestKit; - int nHealingKitsAmount, nItemValue; - int nRunningValue = 0; // For kits - - // Slots 11, 12 and 13. (some ammo slots) - for(nCnt = INVENTORY_SLOT_ARROWS; //11 - nCnt <= INVENTORY_SLOT_BOLTS; //13 - nCnt++) - { - oItem = GetItemInSlot(nCnt, oTarget); - if(GetIsObjectValid(oItem)) - { - // Sets ammo counters using nCurrentItemType. - nCurrentItemType = GetBaseItemType(oItem); - SetAmmoCounters(oTarget); - } - } - // Slots 4 and 5. (HTH weapons) - for(nCnt = INVENTORY_SLOT_RIGHTHAND; // 4 - nCnt <= INVENTORY_SLOT_LEFTHAND; // 5 - nCnt++) - { - oItem = GetItemInSlot(nCnt, oTarget); - if(GetIsObjectValid(oItem)) - { - nCurrentItemType = GetBaseItemType(oItem); - nCurrentItemSize = GetWeaponSize(oItem); - nCurrentItemDamage = FALSE;// Reset - if(nCurrentItemSize)// Is over 0 - { - DoEffectsOf(oTarget, oItem); - } - } - } - // The inventory - oItem = GetFirstItemInInventory(oTarget); - while(GetIsObjectValid(oItem)) - { - // Added some else statements to speed it up - nCurrentItemType = GetBaseItemType(oItem); - if(nCurrentItemType == BASE_ITEM_HEALERSKIT) - { - nHealingKitsAmount++; - nItemValue = GetGoldPieceValue(oItem); - // Stacked kits be worth what they should be seperatly. - nItemValue = nItemValue/GetNumStackedItems(oItem); - if(nItemValue > nRunningValue) - { - nRunningValue = nItemValue; - oHighestKit = oItem; - } - } - // Else, is it a arrow, bolt or bullet? - else if(nCurrentItemType == BASE_ITEM_ARROW || - nCurrentItemType == BASE_ITEM_BOLT || - nCurrentItemType == BASE_ITEM_BULLET) - { - // Sets ammo counters using nCurrentItemType. - SetAmmoCounters(oTarget); - } - else - // else it isn't a healing kit, or ammo...what is it? - // Likely a weapon, so we check - { - // Only need current item size, if it is a weapon! - nCurrentItemSize = GetWeaponSize(oItem); - nCurrentItemDamage = FALSE;// Reset - if(nCurrentItemSize)// Is over 0 (valid weapon) - { - // Do the appropriate enchantment issuse and so on. - DoEffectsOf(oTarget, oItem); - } - } - oItem = GetNextItemInInventory(oTarget); - } - // Set our ranged weapons (if any) - SetRangedWeapon(oTarget); - // Set our shield (if any) - SetShield(oTarget); - // Need some, any! - if(nHealingKitsAmount > 0) - { - // set healing kits (if any) - SWFinalAIObject(oTarget, AI_VALID_HEALING_KIT_OBJECT, oHighestKit); - // Set amount left - SWFinalAIInteger(oTarget, AI_VALID_HEALING_KITS, nHealingKitsAmount); - } - // Delete things, FINALLY. really! I mean, this is it, it runs, as it is, - // and the other things run off it as things are met...! - DelayCommand(0.1, DeleteInts(oTarget)); -} - -// This will take the weapon size, and things, and apply the right base effects. -void DoEffectsOf(object oTarget, object oItem) -{ - // 1.3 = changed to switch statement. - // 1.4 - Minor bug (WEAPON_SIZE_SMALL, not CREATURE_SIZE_SMALL) fixed. - // Note: Anything not done BaseEffects of cannot even be used by the character. - switch(nCurrentItemSize) - { - // Tiny weapons - If we are under large size, and is a dagger or similar - case WEAPON_SIZE_TINY: - { - if(nCreatureSize < CREATURE_SIZE_LARGE) BaseEffects(oTarget, oItem); - } - break; - // Small Weapons - If we are large (not giant) and size is like a shortsword - case CREATURE_SIZE_SMALL: - { - if(nCreatureSize < CREATURE_SIZE_HUGE) BaseEffects(oTarget, oItem); - } - break; - // Medium weapons - If we are over tiny, and size is like a longsword - case WEAPON_SIZE_MEDIUM: - { - if(nCreatureSize > CREATURE_SIZE_TINY) BaseEffects(oTarget, oItem); - } - break; - // Large weapons - anything that is over small, and the size is like a spear - case WEAPON_SIZE_LARGE: - { - if(nCreatureSize > CREATURE_SIZE_SMALL) BaseEffects(oTarget, oItem); - } - break; - } -} - -//:://///////////////////////////////////////////// -//:: Name BaseEffects -//::////////////////////////////////////////////// -/* - Sets the value (+/- int) of the item - Things like haste are worth more... -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void BaseEffects(object oTarget, object oItem) -{ - // Reset value - nCurrentItemValue = 0; - if(GetIsObjectValid(oItem)) - { - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ABILITY_BONUS)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_BONUS_FEAT)) - nCurrentItemValue += 6; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N)) - nCurrentItemValue += 2; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_CAST_SPELL)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS)) - nCurrentItemValue += 6; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_REDUCTION)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_RESISTANCE)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_VULNERABILITY)) - nCurrentItemValue -= 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DARKVISION)) - nCurrentItemValue += 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ABILITY_SCORE)) - nCurrentItemValue -= 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_AC)) - nCurrentItemValue -= 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER)) - nCurrentItemValue -= 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_DAMAGE)) - nCurrentItemValue -= 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER)) - nCurrentItemValue -= 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SAVING_THROWS)) - nCurrentItemValue -= 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC)) - nCurrentItemValue -= 3; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_SKILL_MODIFIER)) - nCurrentItemValue -= 2; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS)) - nCurrentItemValue += 7; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP)) - nCurrentItemValue += 6; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP)) - nCurrentItemValue += 6; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE)) - nCurrentItemValue += 1; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE)) - nCurrentItemValue += 1; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_FREEDOM_OF_MOVEMENT)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_HASTE)) - nCurrentItemValue += 12; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_HOLY_AVENGER)) - nCurrentItemValue += 10; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS)) - nCurrentItemValue += 10; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL)) - nCurrentItemValue += 12; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_IMPROVED_EVASION)) - nCurrentItemValue += 10; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_KEEN)) - nCurrentItemValue += 7; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_LIGHT)) - nCurrentItemValue += 1; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_MASSIVE_CRITICALS)) - nCurrentItemValue += 2; -// if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_MIND_BLANK)) -// nCurrentItemValue += 4;// Do not think It exsists. - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_MONSTER_DAMAGE)) - nCurrentItemValue += 1; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_NO_DAMAGE)) - nCurrentItemValue -= 10;// EEEKK! Bad bad bad!! - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ON_HIT_PROPERTIES)) - nCurrentItemValue += 8;// Includes all vorpal and so on! -// if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ON_MONSTER_HIT)) -// nCurrentItemValue += 8;// Can't be on a weapon - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_POISON)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_REGENERATION)) - nCurrentItemValue += 8; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_REGENERATION_VAMPIRIC)) - nCurrentItemValue += 6; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS)) - nCurrentItemValue += 5; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC)) - nCurrentItemValue += 4; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SKILL_BONUS)) - nCurrentItemValue += 2; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SPELL_RESISTANCE)) - nCurrentItemValue += 7; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_TRUE_SEEING)) - nCurrentItemValue += 11; - if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_TURN_RESISTANCE)) - nCurrentItemValue += 8; -// if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_VORPAL)) -// nCurrentItemValue += 8;// Removed as Bioware will remove this constant. Doesn't exsist. -// if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_WOUNDING)) -// nCurrentItemValue += 8;// Removed as Bioware will remove this constant. Doesn't exsist. - // Special cases - // Set is unlimited to TRUE or FALSE, add 10 if TRUE. - bCurrentItemIsUnlimited = GetItemHasItemProperty(oItem, ITEM_PROPERTY_UNLIMITED_AMMUNITION); - if(bCurrentItemIsUnlimited) nCurrentItemValue += 10; - // Same as above, for mighty - bCurrentItemIsMighty = GetItemHasItemProperty(oItem, ITEM_PROPERTY_MIGHTY); - if(bCurrentItemIsMighty) nCurrentItemValue += 3; - - switch (nCurrentItemSize) - { - case WEAPON_SIZE_INVALID:// Invalid Size, stop - { - return; - } - break; - case WEAPON_SIZE_TINY:// Tiny weapons (EG: Daggers, Slings) - { - BaseTinyWeapons(oTarget, oItem); - return; - } - break; - case WEAPON_SIZE_SMALL:// Small Weapons (EG short Swords) - { - BaseSmallWeapons(oTarget, oItem); - return; - } - break; - case WEAPON_SIZE_MEDIUM: // Medium weapons (EG long swords) - { - BaseMediumWeapons(oTarget, oItem); - return; - } - break; - case WEAPON_SIZE_LARGE: // Large Weapons (EG greataxes) - { - BaseLargeWeapons(oTarget, oItem); - return; - } - break; - } - } -} - -//:://///////////////////////////////////////////// -//:: Name BaseLargeWeapons -//::////////////////////////////////////////////// -/* - This adds the maximum damage onto the value -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void BaseLargeWeapons(object oTarget, object oItem) -{ - // No need for weopen size...we know we can use it! - switch(nCurrentItemType) - { - case BASE_ITEM_DIREMACE: - { - // This is the only one that needs documenting. All are similar. - if(bProfExotic == TRUE)// We are proficient in exotics... - { - nCurrentItemDamage = 16;// Set max damage. - nCurrentItemValue += // We add onto the current value some things... - (nCurrentItemDamage + // The damage (maximum) done by it. - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DIRE_MACE)) + // Adds 1 if specailised in it - (GetHasFeat(FEAT_IMPROVED_CRITICAL_DIRE_MACE) * 2) +// Adds 2 if can do good criticals in it - (GetHasFeat(FEAT_WEAPON_FOCUS_DIRE_MACE) * 2)); // Adds 2 if we do +2 damage with it - // If a very big creature - set as a primary weopen - if(nCreatureSize >= CREATURE_SIZE_LARGE)//4+ - { - SetPrimaryWeapon(oTarget, oItem); - } - // If a medium creature - set as a two-handed weopen - else if(nCreatureSize == CREATURE_SIZE_MEDIUM)//=3 - { - // Add 16 more for a "second" weapon. - nCurrentItemValue += nCurrentItemDamage; - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_DOUBLEAXE: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 16;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_DOUBLE_AXE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_DOUBLE_AXE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE)//4+ - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM)//=3 - { - // Add 16 more for a "second" weapon. - nCurrentItemValue += 16; - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_TWOBLADEDSWORD: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 16;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - nCurrentItemValue += nCurrentItemDamage; - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_GREATAXE: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 12;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_AXE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_AXE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_AXE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_GREATSWORD: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 12;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_HALBERD: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HALBERD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_HALBERD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_HALBERD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_HEAVYFLAIL: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_FLAIL) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_SCYTHE: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SCYTHE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SCYTHE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SCYTHE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_SHORTSPEAR: - { - if(bProfSimple == TRUE || bProfDruid == TRUE) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SPEAR)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SPEAR) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SPEAR) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - // Note: Should work, should be the same!! - case BASE_ITEM_QUARTERSTAFF: - case BASE_ITEM_MAGICSTAFF: - { - if(bProfWizard == TRUE || bProfSimple == TRUE || bProfRogue == TRUE || - bProfMonk == TRUE || bProfDruid == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_STAFF)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_STAFF) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_STAFF) * 2)); - if(nCreatureSize >= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_MEDIUM) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_LONGBOW: - { - if(nCreatureSize >= CREATURE_SIZE_MEDIUM && - (bProfMartial == TRUE || bProfElf == TRUE)) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONGBOW)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LONGBOW) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LONGBOW) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_TOWERSHIELD: - { - if(bProfShield == TRUE && - nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - nCurrentItemValue += GetItemACValue(oItem); - StoreShield(oTarget, oItem); - } - } - break; - } -} - -//:://///////////////////////////////////////////// -//:: Name BaseMediumWeapons -//::////////////////////////////////////////////// -/* - Adds the damage to the value -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void BaseMediumWeapons(object oTarget, object oItem) -{ - switch(nCurrentItemType) - { - case BASE_ITEM_BASTARDSWORD: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_BASTARD_SWORD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_BASTARD_SWORD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_BATTLEAXE: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_BATTLE_AXE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_BATTLE_AXE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_DWARVENWARAXE: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DWAXE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_DWAXE) * 2) + - (GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DWAXE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - case BASE_ITEM_CLUB: - { - if(bProfWizard == TRUE || bProfSimple == TRUE || - bProfMonk == TRUE || bProfDruid == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_CLUB)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_CLUB) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_CLUB) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_KATANA: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KATANA)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_KATANA) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_KATANA) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_LIGHTFLAIL: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_FLAIL) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_LONGSWORD: - { - if(bProfMartial == TRUE || bProfElf == TRUE) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONG_SWORD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_MORNINGSTAR: - { - if(bProfSimple == TRUE || bProfRogue == TRUE) // Primary only - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_MORNING_STAR)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_MORNING_STAR) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_MORNING_STAR) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_RAPIER: - { - if(bProfRogue == TRUE || bProfMartial == TRUE || bProfElf == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_SCIMITAR: - { - if(bProfMartial == TRUE || bProfDruid == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SCIMITAR)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SCIMITAR) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SCIMITAR) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_WARHAMMER: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - GetHasFeat(FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_WAR_HAMMER) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_WAR_HAMMER) * 2)); - if(nCreatureSize >= CREATURE_SIZE_MEDIUM) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_SMALL) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_HEAVYCROSSBOW: - { - if(nCreatureSize >= CREATURE_SIZE_SMALL && - (bProfWizard == TRUE || bProfSimple == TRUE || - bProfRogue == TRUE || bProfMonk == TRUE)) - { - nCurrentItemDamage = 10;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_SHORTBOW: - { - if(nCreatureSize >= CREATURE_SIZE_SMALL && - (bProfRogue == TRUE || bProfMartial == TRUE || bProfElf == TRUE)) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORTBOW)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORTBOW) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SHORTBOW) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_LARGESHIELD: - { - if(nCreatureSize >= CREATURE_SIZE_SMALL && - bProfShield == TRUE) - { - nCurrentItemValue += GetItemACValue(oItem); - StoreShield(oTarget, oItem); - } - } - break; - } -} - -//:://///////////////////////////////////////////// -//:: Name BaseSmallWeapons -//::////////////////////////////////////////////// -/* - Adds the damage to the value...then sets it -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// -void BaseSmallWeapons(object oTarget, object oItem) -{ - switch (nCurrentItemType) - { - case BASE_ITEM_HANDAXE: - { - if(bProfMonk == TRUE || bProfMartial == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HAND_AXE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_HAND_AXE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_HAND_AXE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_KAMA: - { - if(bProfMonk == TRUE || bProfExotic == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KAMA)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_KAMA) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_KAMA) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_LIGHTHAMMER: - { - if(bProfMartial == TRUE) - { - nCurrentItemDamage = 4;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_HAMMER) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_LIGHTMACE: - { - if(bProfSimple == TRUE || bProfRogue == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_MACE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_MACE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_SHORTSWORD: - { - if(bProfRogue == TRUE || bProfMartial == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_WHIP: - { - if(bProfExotic == TRUE) - { - nCurrentItemDamage = 2;// Set max damage. - nCurrentItemValue += nCurrentItemDamage; - // We add a special amount, 10, as it is only used as a secondary - // weapon, and only in the offhand. - nCurrentItemValue += 10; - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_SICKLE: - { - if(bProfSimple == TRUE || bProfDruid == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SICKLE)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SICKLE) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SICKLE) * 2)); - if(nCreatureSize >= CREATURE_SIZE_SMALL && - nCreatureSize <= CREATURE_SIZE_LARGE) - { - SetPrimaryWeapon(oTarget, oItem); - } - else if(nCreatureSize == CREATURE_SIZE_TINY) - { - SetTwoHandedWeapon(oTarget, oItem); - } - } - } - break; - case BASE_ITEM_DART: - { - // Ranged weapons below - if(nCreatureSize <= CREATURE_SIZE_LARGE && - (bProfSimple == TRUE || bProfRogue == TRUE || bProfDruid == TRUE)) - { - nCurrentItemDamage = 4;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DART)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_DART) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_DART) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_LIGHTCROSSBOW: - { - if(nCreatureSize <= CREATURE_SIZE_LARGE && - (bProfWizard == TRUE || bProfSimple == TRUE || - bProfRogue == TRUE || bProfMonk == TRUE)) - { - nCurrentItemDamage = 8;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_SLING: - { - if(nCreatureSize <= CREATURE_SIZE_LARGE && - (bProfSimple == TRUE || bProfMonk == TRUE || bProfDruid == TRUE)) - { - nCurrentItemDamage = 4;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (bCurrentItemIsMighty * nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SLING)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SLING) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SLING) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_THROWINGAXE: - { - if(nCreatureSize <= CREATURE_SIZE_LARGE && bProfMartial == TRUE) - { - nCurrentItemDamage = 6;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (nCreatureStrength) + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SLING)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SLING) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SLING) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_SMALLSHIELD: - { - if(bProfShield) - { - nCurrentItemValue += GetItemACValue(oItem); - StoreShield(oTarget, oItem); - } - } - break; - } -} - -//:://///////////////////////////////////////////// -//:: Name BaseTinyWeapons -//::////////////////////////////////////////////// -/* - Adds damage to the value, and sets it. -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void BaseTinyWeapons(object oTarget, object oItem) -{ - switch (nCurrentItemType) - { - case BASE_ITEM_DAGGER: - { - if(nCreatureSize <= CREATURE_SIZE_MEDIUM && - (bProfWizard == TRUE || bProfSimple == TRUE || bProfRogue == TRUE || - bProfMonk == TRUE || bProfDruid == TRUE)) - { - nCurrentItemDamage = 4;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DAGGER)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_DAGGER) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_DAGGER) * 2)); - SetPrimaryWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_KUKRI: - { - if(nCreatureSize <= CREATURE_SIZE_MEDIUM && bProfExotic == TRUE) - { - nCurrentItemDamage = 4;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KUKRI)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_KUKRI) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_KUKRI) * 2)); - SetPrimaryWeapon(oTarget, oItem); - } - } - break; - case BASE_ITEM_SHURIKEN: - { - // Ranged weapons below - if(nCreatureSize <= CREATURE_SIZE_MEDIUM && - (bProfMonk == TRUE || bProfExotic == TRUE)) - { - nCurrentItemDamage = 3;// Set max damage. - nCurrentItemValue += (nCurrentItemDamage + - (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHURIKEN)) + - (GetHasFeat(FEAT_IMPROVED_CRITICAL_SHURIKEN) * 2) + - (GetHasFeat(FEAT_WEAPON_FOCUS_SHURIKEN) * 2)); - StoreRangedWeapon(oTarget, oItem); - } - } - break; - } -} -//:://///////////////////////////////////////////// -//:: Name SetPrimaryWeapon -//::////////////////////////////////////////////// -/* - If the value of the object is greater than the - stored one, set it. - If the weopen is of lesser value, and can deul - wield, then set it as a weopen that can be deul wielded. - - Re-written. Sets the objects into an array (at the end). -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void SetPrimaryWeapon(object oTarget, object oItem) -{ - // We insert the value into an array of all primary weapons, based - // on value. - // * Any weapon can be primary - ArrayOfWeapons(AI_WEAPON_PRIMARY, oTarget, oItem, nCurrentItemValue); - - // We also set up secondary array for all weapons which can be used well - // in the off hand. - // This takes some value off for size of weapon...depending on our size! - // IE to hit is lower, it is a lower value. - if(bProfTwoWeapons == TRUE && - // 4 = Light flail, 47 = Morningstar - NOT a valid second weapon, for - // some bug reason - nCurrentItemType != BASE_ITEM_LIGHTFLAIL && - nCurrentItemType != BASE_ITEM_MORNINGSTAR && - nCurrentItemType != BASE_ITEM_WHIP) // Whips are primary only - { - ArrayOfWeapons(AI_WEAPON_SECONDARY, oTarget, oItem, nCurrentItemValue, TRUE); - } -} -//:://///////////////////////////////////////////// -//:: Name SetTwoHandedWeapon -//::////////////////////////////////////////////// -/* - Sets a two-handed weopen to use. -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void SetTwoHandedWeapon(object oTarget, object oItem) -{ - // We insert the value into an array of all 2 handed weapons, based - // on value. - ArrayOfWeapons(AI_WEAPON_TWO_HANDED, oTarget, oItem, nCurrentItemValue); -} - -//:://///////////////////////////////////////////// -//:: Name SetRangedWeapon -//::////////////////////////////////////////////// -/* - Sets a ranged weopen - based on ammo as well - We only set one (until we don't use it) and in the AI - checks for ammo. Important - the default AI does't do that - well, and just equips a HTH weapon instead! - - Name SetAmmoCounters - Used to check ammo - for setting ranged weopen - - Name StoreRangedWeapon - First part of setting ranged weopen. Stores it! - It needs to check for ammo when it is set, you see -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void StoreRangedWeapon(object oTarget, object oItem) -{ - int nNth = GetLocalInt(oTarget, SETWEP_DISTANCE); - nNth++; - string sNth = IntToString(nNth); - // Special: If unlimited ammo, we will use regardless of ammo. - SetLocalInt(oItem, SETWEP_IS_UNLIMITED, bCurrentItemIsUnlimited); - SetLocalInt(oItem, SETWEP_VALUE, nCurrentItemValue); - SetLocalObject(oTarget, SETWEP_DISTANCE + sNth, oItem); - SetLocalInt(oTarget, SETWEP_DISTANCE, nNth); -} - -void SetAmmoCounters(object oTarget) -{ - switch(nCurrentItemType) - { - case BASE_ITEM_ARROW: - { - bGotArrows = TRUE; - return; - } - break; - case BASE_ITEM_BOLT: - { - bGotBolts = TRUE; - return; - } - break; - case BASE_ITEM_BULLET: - { - bGotBullets = TRUE; - return; - } - break; - } -} - -void SetRangedWeapon(object oTarget) -{ - // Special: We set 2 weapons. The second just states there is a second - // and so we re-set weapons if we get round to using it. - int nNth = 1; - string sNth = IntToString(nNth); - object oItem = GetLocalObject(oTarget, SETWEP_DISTANCE + sNth); - int nBase, nHighestValueWeapon, nValue, bUnlimited, bShield, // TRUE if we can use a shield too - nNextHighestValueWeapon, bHighestUnlimited, nAmmoSlot; - object oHighestItem, oNextHighestItem; - - while(GetIsObjectValid(oItem)) - { - nBase = GetBaseItemType(oItem); - nValue = GetLocalInt(oItem, SETWEP_VALUE); - bUnlimited = GetLocalInt(oItem, SETWEP_IS_UNLIMITED); - if(nBase == BASE_ITEM_DART || nBase == BASE_ITEM_SHURIKEN || - nBase == BASE_ITEM_THROWINGAXE) - // 31 = Dart, 59 = Shuriken, 63 = Throwing axe - { - //iHighestValueWeapon starts as 0, so - if(nValue > nHighestValueWeapon || - nHighestValueWeapon == 0) - { - nHighestValueWeapon = nValue; - oHighestItem = oItem; - bShield = TRUE; - // We set right hand, because it is a throwing weapon - nAmmoSlot = INVENTORY_SLOT_RIGHTHAND; - bHighestUnlimited = bUnlimited; - } - else if(nValue > nNextHighestValueWeapon || - nNextHighestValueWeapon == 0) - { - nNextHighestValueWeapon = nValue; - oNextHighestItem = oItem; - } - } - else if(nBase == BASE_ITEM_HEAVYCROSSBOW || - nBase == BASE_ITEM_LIGHTCROSSBOW)// 6 = Heavy, 7 = Light X-bow - { - if(bGotBolts == TRUE || bUnlimited == TRUE) - { - if(nValue > nHighestValueWeapon || - nHighestValueWeapon == 0) - { - nHighestValueWeapon = nValue; - oHighestItem = oItem; - nAmmoSlot = INVENTORY_SLOT_BOLTS; - bShield = FALSE; - bHighestUnlimited = bUnlimited; - } - else if(nValue > nNextHighestValueWeapon || - nNextHighestValueWeapon == 0) - { - nNextHighestValueWeapon = nValue; - oNextHighestItem = oItem; - } - } - } - else if(nBase == BASE_ITEM_LONGBOW || - nBase == BASE_ITEM_SHORTBOW)// 8 = Long, 11 = Short bow - { - if(bGotArrows == TRUE || bUnlimited == TRUE) - { - if(nValue > nHighestValueWeapon || - nHighestValueWeapon == 0) - { - nHighestValueWeapon = nValue; - oHighestItem = oItem; - bShield = FALSE; - nAmmoSlot = INVENTORY_SLOT_ARROWS; - bHighestUnlimited = bUnlimited; - } - else if(nValue > nNextHighestValueWeapon || - nNextHighestValueWeapon == 0) - { - nNextHighestValueWeapon = nValue; - oNextHighestItem = oItem; - } - } - } - else if(nBase == BASE_ITEM_SLING)// 61 = Sling - { - if(bGotBullets == TRUE || bUnlimited == TRUE) - { - if(nValue > nHighestValueWeapon || - nHighestValueWeapon == 0) - { - nHighestValueWeapon = nValue; - oHighestItem = oItem; - bShield = TRUE; - nAmmoSlot = INVENTORY_SLOT_BULLETS; - bHighestUnlimited = bUnlimited; - } - else if(nValue > nNextHighestValueWeapon || - nNextHighestValueWeapon == 0) - { - nNextHighestValueWeapon = nValue; - oNextHighestItem = oItem; - } - } - } - DeleteLocalInt(oItem, SETWEP_VALUE); - DeleteLocalInt(oItem, SETWEP_IS_UNLIMITED); - DeleteLocalObject(oTarget, SETWEP_DISTANCE + sNth); - nNth++; - sNth = IntToString(nNth); - oItem = GetLocalObject(oTarget, SETWEP_DISTANCE + sNth); - } - // No setting if not valid! - if(GetIsObjectValid(oHighestItem)) - { - SWFinalAIObject(oTarget, AI_WEAPON_RANGED, oHighestItem); - SWFinalAIInteger(oTarget, AI_WEAPON_RANGED_AMMOSLOT, nAmmoSlot); - if(bHighestUnlimited) - { - SWFinalAIInteger(oTarget, AI_WEAPON_RANGED_IS_UNLIMITED, bHighestUnlimited); - } - // Can a shield be used with it? Default is 0, we only set non 0 values. - if(bShield) - { - SWFinalAIInteger(oTarget, AI_WEAPON_RANGED_SHIELD, bShield); - } - // No setting if not valid! - if(GetIsObjectValid(oNextHighestItem)) - { - SWFinalAIObject(oTarget, AI_WEAPON_RANGED_2, oNextHighestItem); - } - } -} - -//:://///////////////////////////////////////////// -//:: Name SetShield, StoreShield -//::////////////////////////////////////////////// -/* - V. Simple. If value is higher, set the shield -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -void StoreShield(object oTarget, object oItem) -{ - int nNth = GetLocalInt(oTarget, SETWEP_SHIELD); - nNth++; - string sNth = IntToString(nNth); - // Set the value, so we can use the top values again. - SetLocalInt(oItem, SETWEP_VALUE, nCurrentItemValue); - SetLocalObject(oTarget, SETWEP_SHIELD + sNth, oItem); - SetLocalInt(oTarget, SETWEP_SHIELD, nNth); -} - -void SetShield(object oTarget) -{ - int nNth = 1; - string sNth = IntToString(nNth); - object oItem = GetLocalObject(oTarget, SETWEP_SHIELD + sNth); - int nHighestValueShield, nValue, nNextHighestValueShield; - object oHighestShield, oNextHighestShield; - - while(GetIsObjectValid(oItem)) - { - nValue = GetLocalInt(oItem, SETWEP_VALUE); - if(nValue > nHighestValueShield) - { - oHighestShield = oItem; - nHighestValueShield = nValue; - } - else if(nValue > nNextHighestValueShield) - { - oNextHighestShield = oItem; - nNextHighestValueShield = nValue; - } - DeleteLocalInt(oItem, SETWEP_VALUE); - DeleteLocalObject(oTarget, SETWEP_SHIELD + sNth); - nNth++; - sNth = IntToString(nNth); - // Get next shield - oItem = GetLocalObject(oTarget, SETWEP_SHIELD + sNth); - } - if(GetIsObjectValid(oHighestShield)) - { - SWFinalAIObject(oTarget, AI_WEAPON_SHIELD, oHighestShield); - // Need original if second - if(GetIsObjectValid(oNextHighestShield)) - { - SWFinalAIObject(oTarget, AI_WEAPON_SHIELD_2, oNextHighestShield); - } - } -} - -//:://///////////////////////////////////////////// -//:: Name GetWeoponSize -//::////////////////////////////////////////////// -/* - Returns the Base Weopen size of oItem -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// - -int GetWeaponSize(object oItem) -{ - switch(GetBaseItemType(oItem)) - { - // Tiny - // 22, 42, 59. - case BASE_ITEM_DAGGER: - case BASE_ITEM_KUKRI: - case BASE_ITEM_SHURIKEN: - return WEAPON_SIZE_TINY; - break; - // Small - // 0, 7, 9, 14, 31, 37, 38, 40, 60, 61, 63 - case BASE_ITEM_SHORTSWORD: - case BASE_ITEM_LIGHTCROSSBOW: - case BASE_ITEM_LIGHTMACE: - case BASE_ITEM_SMALLSHIELD: - case BASE_ITEM_DART: - case BASE_ITEM_LIGHTHAMMER: - case BASE_ITEM_HANDAXE: - case BASE_ITEM_KAMA: - case BASE_ITEM_SICKLE: - case BASE_ITEM_SLING: - case BASE_ITEM_THROWINGAXE: - case BASE_ITEM_WHIP: // Hordes - return WEAPON_SIZE_SMALL; - break; - // Medium - // 1, 2, 3, 4, 5, 6, 11, 28, 41, 47, 51, 53, 56 - // 1-6 = - // BASE_ITEM_LONGSWORD, BASE_ITEM_BATTLEAXE, BASE_ITEM_BASTARDSWORD - // BASE_ITEM_LIGHTFLAIL, BASE_ITEM_WARHAMMER, BASE_ITEM_HEAVYCROSSBOW - case BASE_ITEM_LONGSWORD: - case BASE_ITEM_BATTLEAXE: - case BASE_ITEM_BASTARDSWORD: - case BASE_ITEM_LIGHTFLAIL: - case BASE_ITEM_WARHAMMER: - case BASE_ITEM_HEAVYCROSSBOW: - case BASE_ITEM_SHORTBOW: - case BASE_ITEM_CLUB: - case BASE_ITEM_KATANA: - case BASE_ITEM_MORNINGSTAR: - case BASE_ITEM_RAPIER: - case BASE_ITEM_SCIMITAR: - case BASE_ITEM_LARGESHIELD: - case BASE_ITEM_DWARVENWARAXE: // Hordes - return WEAPON_SIZE_MEDIUM; - break; - // Large weapons - // 8, 10, 12, 13, 18, 32, 33, 35, 45, 50, 55, 57, 58 - case BASE_ITEM_LONGBOW: - case BASE_ITEM_HALBERD: - case BASE_ITEM_TWOBLADEDSWORD: - case BASE_ITEM_GREATSWORD: - case BASE_ITEM_GREATAXE: - case BASE_ITEM_DIREMACE: - case BASE_ITEM_DOUBLEAXE: - case BASE_ITEM_HEAVYFLAIL: - case BASE_ITEM_MAGICSTAFF: - case BASE_ITEM_QUARTERSTAFF: - case BASE_ITEM_SCYTHE: - case BASE_ITEM_TOWERSHIELD: - case BASE_ITEM_SHORTSPEAR: - return WEAPON_SIZE_LARGE; - break; - } - return FALSE; -} - -//:://///////////////////////////////////////////// -//:: Name DeleteInts -//::////////////////////////////////////////////// -/* - Deletes everything, like what weopen they are using - and what proficiencies they have that may be stored. -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// -void DeleteInts(object oTarget) -{ - // Deletes the INT's, for values, in the array's. - DeleteValueInts(oTarget, AI_WEAPON_PRIMARY); - DeleteValueInts(oTarget, AI_WEAPON_SECONDARY); - DeleteValueInts(oTarget, AI_WEAPON_TWO_HANDED); - // Missile and shield ones. - DeleteLocalInt(oTarget, SETWEP_DISTANCE); - DeleteLocalInt(oTarget, SETWEP_SHIELD); -} - -//:://///////////////////////////////////////////// -//:: Name ArrayOfWeapons, MoveArrayBackOne -//::////////////////////////////////////////////// -/* - This is the arrays, IE sets up what weapons - we have value first, good for searching through - later and -*/ -//::////////////////////////////////////////////// -//:: Created By: Yrean -//:: Modified By: Jasperre -//::////////////////////////////////////////////// -// Sets the weapon to the array, in the right spot... -// If bSecondary is TRUE, it uses the weapon size, and creature size to modifiy -// the value, IE: Sets it as the secondary weapon. -void ArrayOfWeapons(string sArray, object oTarget, object oItem, int nValue, int bSecondary = FALSE) -{ - // Check for if it is secondary. - // We add some value based on the creature size against weapon size. - // - We also may take away some. - int nSetValue = nValue; - if(bSecondary == TRUE) - { - // We take 2 or add 2 for different sizes. Not too much...but enough? - nSetValue += ((nCreatureSize - nCurrentItemSize) * 2); - } - int nOtherItemsValues, nCnt, bBreak; - int nMax = GetLocalInt(oTarget, MAXINT_ + sArray); - string sArrayStore; - // Special - no max items! - if(nMax < 1) - { - sArrayStore = sArray + "1"; - SetLocalInt(oTarget, sArrayStore, nSetValue); - SetLocalInt(oTarget, sArrayStore + WEAP_SIZE, nCurrentItemSize); - SetLocalInt(oTarget, sArrayStore + WEAP_DAMAGE, nCurrentItemDamage); - SetLocalObject(oTarget, sArrayStore, oItem); - nMax++; - SetLocalInt(oTarget, MAXINT_ + sArray, nMax); - } - // Else, we will set it in the array. - else - { - // Loop through the items stored already. - for(nCnt = 1; (nCnt <= nMax && bBreak != TRUE); nCnt++) - { - // Get the value of the item. - nOtherItemsValues = GetLocalInt(oTarget, sArray + IntToString(nCnt)); - // If imput is greater than stored...move all of them back one. - if(nValue > nOtherItemsValues) - { - // Set weapon size as well. - sArrayStore = sArray + IntToString(nCnt); - MoveArrayBackOne(sArray, nCnt, oTarget, nMax); - SetLocalInt(oTarget, sArrayStore, nSetValue); - SetLocalInt(oTarget, sArrayStore + WEAP_SIZE, nCurrentItemSize); - SetLocalInt(oTarget, sArrayStore + WEAP_DAMAGE, nCurrentItemDamage); - SetLocalObject(oTarget, sArrayStore, oItem); - nMax++; - SetLocalInt(oTarget, MAXINT_ + sArray, nMax); - bBreak = TRUE; - } - // If end, we set to the end :-) - else if(nCnt == nMax) - { - // Set weapon size as well. Add one to i to be at the end. - sArrayStore = sArray + IntToString(nCnt + 1); - SetLocalInt(oTarget, sArrayStore, nSetValue); - SetLocalInt(oTarget, sArrayStore + WEAP_SIZE, nCurrentItemSize); - SetLocalInt(oTarget, sArrayStore + WEAP_DAMAGE, nCurrentItemDamage); - SetLocalObject(oTarget, sArrayStore, oItem); - nMax++; - SetLocalInt(oTarget, MAXINT_ + sArray, nMax); - bBreak = TRUE; - } - } - } -} -// This moves the values from nMax to nNumberStart back one in the list. -void MoveArrayBackOne(string sArray, int nNumberStart, object oTarget, int nMax) -{ - // Get the first item... - object oItemAtNumber; - string sCurrentName, sNewName; - int nItemAtNumberValue, nCnt, nCurrentItemSize, nCurrentItemDamage; - // Move it from the back, back one, then then next... - for(nCnt = nMax; nCnt >= nNumberStart; nCnt--) - { - // Sets the name up right. - sCurrentName = sArray + IntToString(nCnt); - sNewName = sArray + IntToString(nCnt + 1); - - // Set the things up in the right parts. - oItemAtNumber = GetLocalObject(oTarget, sCurrentName); - nItemAtNumberValue = GetLocalInt(oTarget, sCurrentName); - nCurrentItemSize = GetLocalInt(oTarget, sCurrentName + WEAP_SIZE); - nCurrentItemDamage = GetLocalInt(oTarget, sCurrentName + WEAP_DAMAGE); - - // To the NEW name - we add one to the nCnt value. - SetLocalObject(oTarget, sNewName, oItemAtNumber); - SetLocalInt(oTarget, sNewName, nItemAtNumberValue); - SetLocalInt(oTarget, sNewName + WEAP_SIZE, nCurrentItemSize); - SetLocalInt(oTarget, sNewName + WEAP_DAMAGE, nCurrentItemSize); - } -} -void DeleteDatabase(object oTarget, string sArray) -{ - int nMax = GetLocalInt(oTarget, MAXINT_ + sArray); - int nCnt; - string sNewName; - if(nMax > 0) - { - for(nCnt = 1; nCnt <= nMax; nCnt++) - { - sNewName = sArray + IntToString(nCnt); - DeleteLocalObject(oTarget, sNewName);// Object - DeleteLocalInt(oTarget, sNewName);// Value - DeleteLocalInt(oTarget, sNewName + WEAP_SIZE);// Size - DeleteLocalInt(oTarget, sNewName + WEAP_DAMAGE);// Damage - } - } - // Here, we do delete the max - DeleteLocalInt(oTarget, MAXINT_ + sArray); -} -void DeleteValueInts(object oTarget, string sArray) -{ - int nMax = GetLocalInt(oTarget, MAXINT_ + sArray); - int nCnt; - if(nMax) - { - for(nCnt = 1; nCnt <= nMax; nCnt++) - { - DeleteLocalInt(oTarget, sArray + IntToString(nCnt)); - } - } - // Note: We keep the size... -} -// Uses right prefix to store the object to oTarget. -void SWFinalAIObject(object oTarget, string sName, object oObject) -{ - SetLocalObject(oTarget, AI_OBJECT + sName, oObject); -} -// Uses right prefix to store the iInt to oTarget. -void SWFinalAIInteger(object oTarget, string sName, int nInt) -{ - SetLocalInt(oTarget, AI_INTEGER + sName, nInt); -} -// Deletes object with Prefix -void SWDeleteAIObject(object oTarget, string sName) -{ - DeleteLocalObject(oTarget, AI_OBJECT + sName); -} -// Deletes integer with Prefix -void SWDeleteAIInteger(object oTarget, string sName) -{ - DeleteLocalInt(oTarget, AI_INTEGER + sName); -} - -// reset healing kits only on oTarget. -void ResetHealingKits(object oTarget) -{ - object oItem, oHighestKit; - int nHealingKitsAmount, nItemValue; - int nRunningValue = 0; // For kits - // The inventory - oItem = GetFirstItemInInventory(oTarget); - while(GetIsObjectValid(oItem)) - { - if(GetBaseItemType(oItem) == BASE_ITEM_HEALERSKIT) - { - nHealingKitsAmount++; - nItemValue = GetGoldPieceValue(oItem); - // Stacked kits be worth what they should be seperatly. - nItemValue = nItemValue/GetNumStackedItems(oItem); - if(nItemValue > nRunningValue) - { - nRunningValue = nItemValue; - oHighestKit = oItem; - } - } - oItem = GetNextItemInInventory(oTarget); - } - // Need some, any! - if(nHealingKitsAmount > 0) - { - // set healing kits (if any) - SWFinalAIObject(oTarget, AI_VALID_HEALING_KIT_OBJECT, oHighestKit); - // Set amount left - SWFinalAIInteger(oTarget, AI_VALID_HEALING_KITS, nHealingKitsAmount); - } -} - -void DeleteAllPreviousWeapons(object oTarget) -{ - DeleteDatabase(oTarget, AI_WEAPON_PRIMARY); - DeleteDatabase(oTarget, AI_WEAPON_SECONDARY); - DeleteDatabase(oTarget, AI_WEAPON_TWO_HANDED); - - SWDeleteAIInteger(oTarget, AI_WEAPON_RANGED_SHIELD); - SWDeleteAIInteger(oTarget, AI_WEAPON_RANGED_IS_UNLIMITED); - SWDeleteAIInteger(oTarget, AI_WEAPON_RANGED_AMMOSLOT); - SWDeleteAIObject(oTarget, AI_WEAPON_RANGED); - SWDeleteAIObject(oTarget, AI_WEAPON_RANGED_2); - SWDeleteAIObject(oTarget, AI_WEAPON_SHIELD); - SWDeleteAIObject(oTarget, AI_WEAPON_SHIELD_2); -} - -// Debug: To compile this script full, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_spawnin.nss b/_module/nss/j_inc_spawnin.nss deleted file mode 100644 index 7aaaa9cf..00000000 --- a/_module/nss/j_inc_spawnin.nss +++ /dev/null @@ -1,917 +0,0 @@ -/*/////////////////////// [Include - Spawn In] ///////////////////////////////// - Filename: J_Inc_SpawnIn -///////////////////////// [Include - Spawn In] ///////////////////////////////// - This contains all the functions used in the spawning process, in one easy - and very long file. - - It also importantly sets up spells we have, or at least talents, so we - know if we have any spells from category X. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Changed, added a lot of new things (such as constants file) - 1.4 - No more setting talent categories On Spawn. This is too much hassel. - See the On rest script for ideas (remove this when complete!). - - Perhaps set "Items" the first time we enter combat, and reset each time - combat stops. Can be more efficeint maybe. - - Skills set to "use" should have, say, 3 or more skill points to be - used automatically, especially true for hiding. -///////////////////////// [Workings] /////////////////////////////////////////// - This doesn't call anything to run the rest, except AI_SetUpEndOfSpawn has - a lot of things that the generic AI requires (SetListeningPatterns and skills - and waypoints ETC) - - See the spawn in script for all the actual uses. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: N/A see spawn in script -///////////////////////// [Include - Spawn In] ///////////////////////////////*/ - -// All constants. -#include "J_INC_SETWEAPONS" -#include "prc_inc_racial" -// Set weapons -// - Constants file is in this - -// Special: Bioware SoU Waypoints/Animations constants -// - Here so I know where they are :-P -const string sAnimCondVarname = "NW_ANIM_CONDITION"; -// If set, the NPC is civilized -const int NW_ANIM_FLAG_IS_CIVILIZED = 0x00000400; -// If set, the NPC will use voicechats -const int NW_ANIM_FLAG_CHATTER = 0x00000004; -// If set, the NPC is mobile in a close-range -const int NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE = 0x00000200; - -/******************************************************************************/ -// Functions: -/******************************************************************************/ -// This will activate one aura, very quickly. -// If we have more than one...oh well. -void AI_AdvancedAuras(); -// Activate the aura number (IE: Spell number), if it is possible. -void AI_ActivateAura(int nAuraNumber); - -// Base for moving round thier waypoints -// - Uses ExectuteScript to run the waypoint walking. -// * If bRun is TRUE, we run all the waypoint. -// * fPause is the time delay between walking to the next waypoint (default 1.0) -void SpawnWalkWayPoints(int bRun = FALSE, float fPause = 1.0); - -// Sets up what we will listen to (everything!) -void AI_SetListeningPatterns(); -// This will set what creature to create OnDeath. -void AI_SetDeathResRef(string sResRef); -// This will set the string, sNameOfValue, to sValue. Array size of 1. -// - Use nPercentToSay to determine what % out of 100 it is said. -void AI_SetSpawnInSpeakValue(string sNameOfValue, string sValue, int nPercentToSay = 100); -// This will choose a random string, using iAmountOfValues, which is -// the amount of non-empty strings given. The size of the array is therefore 1. -// - Use nPercentToSay to determine what % out of 100 it is said. -void AI_SetSpawnInSpeakRandomValue(string sNameOfValue, int nPercentToSay, int nAmountOfValues, string sValue1, string sValue2, string sValue3 = "", string sValue4 = "", string sValue5 = "", string sValue6 = "", string sValue7 = "", string sValue8 = "", string sValue9 = "", string sValue10 = "", string sValue11 = "", string sValue12 = ""); -// This will set an array of values, to sNameOfValue, for one to be chosen to -// be said at the right time :-) -// - sNameOfValue must be a valid name. -// - Use iPercentToSay to determine what % out of 100 it is said. -// NOTE: If the sNameOfValue is any combat one, we make that 1/100 to 1/1000. -void AI_SetSpawnInSpeakArray(string sNameOfValue, int nPercentToSay, int nSize, string sValue1, string sValue2, string sValue3 = "", string sValue4 = "", string sValue5 = "", string sValue6 = "", string sValue7 = "", string sValue8 = "", string sValue9 = "", string sValue10 = "", string sValue11 = "", string sValue12 = ""); - -// This applies an increase, decrease or no change to the intended stat. -// * Applies the effects INSTANTLY. These CANNOT be removed easily! -void AI_ApplyStatChange(int nStat, int nAmount); -// This will alter (magically) an ammount of random stats - nAmount -// by a value within iLowest and nHighest. -// * Applies the effects INSTANTLY. These CANNOT be removed easily! -void AI_CreateRandomStats(int nLowest, int nHighest, int nAmount); -// This will randomise other stats. Put both numbers to 0 to ignore some. -// nHPMin, nHPMax = HP changes. -// nReflexSaveMin, nReflexSaveMax = Reflex Save changes -// nWillSaveMin, nWillSaveMax = Will Save changes -// nFortSaveMin, nFortSaveMax = Fortitude Save changes -// nACMin, nACMax = AC change. -// Use nACType to define the AC type - default AC_DODGE_BONUS -// * Applies the effects INSTANTLY. These CANNOT be removed easily! -void AI_CreateRandomOther(int nHPMin, int nHPMax, int nReflexSaveMin = 0, int nReflexSaveMax = 0, int nWillSaveMin = 0, int nWillSaveMax = 0, int nFortSaveMin = 0, int nFortSaveMax = 0, int nACMin = 0, int nACMax = 0, int nACType = AC_DODGE_BONUS); - -// Sets up thier selection of skills, to integers, if they would ever use them. -// NOTE: it also triggers "hide" if they have enough skill and not stopped. -// * 1.4 Changes: Some skills are turned off automatically when they have very -// low points in that skill (IE: No possibility of doing it sucessfully). Also -// edited other parts of the AI to take this into account. -void AI_SetUpSkillToUse(); -// Sets the turning level if we have FEAT_TURN_UNDEAD. -// - Called from AI_SetUpEndOfSpawn. -void AI_SetTurningLevel(); -// This MUST be called. It fires these events: -// SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. -// These MUST be called! the AI might fail to work correctly if they don't fire! -void AI_SetUpEndOfSpawn(); -// This will make the visual effect passed play INSTANTLY at the creatures location. -// * nVFX - The visual effect constant number -void AI_SpawnInInstantVisual(int nVFX); -// This will make the visual effect passed play PERMAMENTLY. -// * nVFX - The visual effect constant number -// NOTE: They will be made to be SUPERNATUAL, so are not dispelled! -void AI_SpawnInPermamentVisual(int nVFX); -// This should not be used! -// * called from SetUpEndOfSpawn. -void AI_SetMaybeFearless(); -// This will set the MAXIMUM and MINIMUM targets to pass this stage (under sName) -// of the targeting system. IE: -// - If we set it to min of 5, max of 10, for AC, if we cancled 5 targets on having -// AC higher then wanted, we will take the highest 5 minimum. -// If there are over 10, we take a max of 10 to choose from. -// * nType - must be TARGET_HIGHER or TARGET_LOWER. Defaults to the lowest, so it -// targets the lowest value for sName. -void AI_SetAITargetingValues(string sName, int nType, int nMinimum, int nMaximum); - - -// Levels up us. -// * nLevel - Levels to this number (doesn't do anything if already GetHitDice >= nLevel). -// * nClass, nClass2, nClass3 - the 3 classes to level up in. Only needs 1 minimum -// Spreads equally if there is more then 1 nClass. -// Sets up spells to use automatically, but DOES NOT CHANGE CHALLENGE RATING! -void AI_LevelUpCreature(int nLevel, int nClass, int nClass2 = CLASS_TYPE_INVALID, int nClass3 = CLASS_TYPE_INVALID); - -// Used in AI_LevelUpCreature. -// - Levels up OBJECT_SELF, in nClass for nLevels -void AI_LevelLoop(int nClass, int nLevels); - -// Sets up what random spells to cheat-cast at the end of all known spells. -// it does NOT check for immunities, barriers, or anything else. -// - You can set spells to more then one of the imputs to have a higher % to cast that one. -void SetAICheatCastSpells(int nSpell1, int nSpell2, int nSpell3, int nSpell4, int nSpell5, int nSpell6); - -// Mark that the given creature has the given condition set for anitmations -// * Bioware SoU animations thing. -void SetAnimationCondition(int nCondition, int bValid = TRUE, object oCreature = OBJECT_SELF); - -// Sets we are a Beholder and use Ray attacks, and Animagic Ray. -void SetBeholderAI(); -// Set we are a mindflayer, and uses some special AI for them. -void SetMindflayerAI(); - -// This will set a spell trigger up. Under cirtain conditions, spells are released -// and cast on the caster. -// Once fired, a spell trigger is only reset by resting. Only 1 of each max is fired at once! -// * sType - is specifically: -// SPELLTRIGGER_DAMAGED_AT_PERCENT - When damaged, the trigger fires. Use iValue for the %. One at a time is fired. -// SPELLTRIGGER_IMMOBILE - Fired when held/paralyzed/sleeping ETC. One at a time is fired. -// SPELLTRIGGER_NOT_GOT_FIRST_SPELL - Makes sure !GetHasSpellEffect(iSpell1) already, -// then fires. Checks all in this category each round (first one fires!) -// SPELLTRIGGER_START_OF_COMBAT - Triggered always, at the start of DetermineCombatRound. -// * nNumber - can be 1-9, in sequential order of when you want them to fire. -// * nValue - is only required with DAMAGED_AT_PERCENT. -// * nSpellX - Cannot be 0. It should only really be defensive spells. -void SetSpellTrigger(string sType, int nValue, int nNumber, int nSpell1, int nSpell2 = 0, int nSpell3 = 0, int nSpell4 = 0, int nSpell5 = 0, int nSpell6 = 0, int nSpell7 = 0, int nSpell8 = 0, int nSpell9 = 0); - -// Mark that the given creature has the given condition set -void SetAnimationCondition(int nCondition, int bValid = TRUE, object oCreature = OBJECT_SELF) -{ - int nCurrentCond = GetLocalInt(oCreature, sAnimCondVarname); - if (bValid) { - SetLocalInt(oCreature, sAnimCondVarname, nCurrentCond | nCondition); - } else { - SetLocalInt(oCreature, sAnimCondVarname, nCurrentCond & ~nCondition); - } -} - -// Sets up what random spells to cheat-cast at the end of all known spells. -// it does NOT check for immunities, barriers, or anything else. -// - You can set spells to more then one of the imputs to have a higher % to cast that one. -void SetAICheatCastSpells(int nSpell1, int nSpell2, int nSpell3, int nSpell4, int nSpell5, int nSpell6) -{ - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(1), nSpell1); - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(2), nSpell2); - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(3), nSpell3); - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(4), nSpell4); - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(5), nSpell5); - SetAIConstant(AI_CHEAT_CAST_SPELL + IntToString(6), nSpell6); -} - - -// Levels up us. -// * nLevel - Levels to this number (doesn't do anything if already GetHitDice >= nLevel). -// * nClass, nClass2, nClass3 - the 3 classes to level up in. Only needs 1 minimum -// - Spreads equally if there is more then 1 nClass. -// - Sets up spells to use automatically, but DOES NOT CHANGE CHALLENGE RATING! -// - Does NOT check for validness, or report any information. -void AI_LevelUpCreature(int nLevel, int nClass, int nClass2 = CLASS_TYPE_INVALID, int nClass3 = CLASS_TYPE_INVALID) -{ - // Divide by 1, 2 or 3 (100%, 50%, 33%) - int nDivideBy = (nClass >= 0) + (nClass2 >= 0) + (nClass3 >= 0); - - int nTotalPerClass = nLevel / nDivideBy; - - // Limit and loop - Class 1. - AI_LevelLoop(nClass, nTotalPerClass); - // 2 - AI_LevelLoop(nClass2, nTotalPerClass); - // 3 - AI_LevelLoop(nClass3, nTotalPerClass); -} - -// Used in AI_LevelUpCreature. -// - Levels up OBJECT_SELF, in iClass for nLevels -void AI_LevelLoop(int nClass, int nLevels) -{ - // Limit and loop - while(nLevels > FALSE) - { - LevelUpHenchman(OBJECT_SELF, nClass, TRUE); - nLevels--; - } -} - - -// This will set what creature to create OnDeath. -void AI_SetDeathResRef(string sResRef) -{ - SetLocalString(OBJECT_SELF, AI_WE_WILL_CREATE_ON_DEATH, sResRef); -} -// This will set the string, sNameOfValue, to sValue. Array size of 1. -// - Use iPercentToSay to determine what % out of 100 it is said. -void AI_SetSpawnInSpeakValue(string sNameOfValue, string sValue, int iPercentToSay) -{ - SetLocalString(OBJECT_SELF, sNameOfValue + "1", sValue); - // The array is 1 big! - SetLocalInt(OBJECT_SELF, ARRAY_SIZE + sNameOfValue, 1); - SetLocalInt(OBJECT_SELF, ARRAY_PERCENT + sNameOfValue, iPercentToSay); -} -// This will choose a random string, using iAmountOfValues, which is -// the amount of non-empty strings given. The size of the array is therefore 1. -// - Use iPercentToSay to determine what % out of 100 it is said. -void AI_SetSpawnInSpeakRandomValue(string sNameOfValue, int nPercentToSay, int nAmountOfValues, string sValue1, string sValue2, string sValue3, string sValue4, string sValue5, string sValue6, string sValue7, string sValue8, string sValue9, string sValue10, string sValue11, string sValue12) -{ - // Need a value amount of values! - if(nAmountOfValues) - { - int nRandomNum = Random(nAmountOfValues) - 1; // take one, as it is 0 - X, not 1 - X - string sValueToUse; - switch(nRandomNum) - { - case 0:{sValueToUse = sValue1;}break; - case 1:{sValueToUse = sValue2;}break; - case 2:{sValueToUse = sValue3;}break; - case 3:{sValueToUse = sValue4;}break; - case 4:{sValueToUse = sValue5;}break; - case 5:{sValueToUse = sValue6;}break; - case 6:{sValueToUse = sValue7;}break; - case 7:{sValueToUse = sValue8;}break; - case 8:{sValueToUse = sValue9;}break; - case 9:{sValueToUse = sValue10;}break; - case 10:{sValueToUse = sValue11;}break; - case 11:{sValueToUse = sValue12;}break; - } - SetLocalString(OBJECT_SELF, sNameOfValue + "1", sValueToUse); - // The array is 1 big! - SetLocalInt(OBJECT_SELF, ARRAY_SIZE + sNameOfValue, 1); - SetLocalInt(OBJECT_SELF, ARRAY_PERCENT + sNameOfValue, nPercentToSay); - } -} -void AI_SetSpawnInSpeakArray(string sNameOfValue, int nPercentToSay, int nSize, string sValue1, string sValue2, string sValue3 = "", string sValue4 = "", string sValue5 = "", string sValue6 = "", string sValue7 = "", string sValue8 = "", string sValue9 = "", string sValue10 = "", string sValue11 = "", string sValue12 = "") -{ - if(nSize >= 1) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "1", sValue1); - if(nSize >= 2) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "2", sValue2); - if(nSize >= 3) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "3", sValue3); - if(nSize >= 4) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "4", sValue4); - if(nSize >= 5) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "5", sValue5); - if(nSize >= 6) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "6", sValue6); - if(nSize >= 7) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "7", sValue7); - if(nSize >= 8) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "8", sValue8); - if(nSize >= 9) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "9", sValue9); - if(nSize >= 10) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "10", sValue10); - if(nSize >= 11) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "11", sValue11); - if(nSize >= 12) - { - SetLocalString(OBJECT_SELF, sNameOfValue + "12", sValue12); - // Hehe, this looks not stright if you stare at it! :-P - } } } } } } } } } } } } - // The array is so big... - SetLocalInt(OBJECT_SELF, ARRAY_SIZE + sNameOfValue, nSize); - SetLocalInt(OBJECT_SELF, ARRAY_PERCENT + sNameOfValue, nPercentToSay); -} -// This applies an increase, decrease or no change to the intended stat. -// * Applies the effects INSTANTLY. These CANNOT be removed easily! -void AI_ApplyStatChange(int nStat, int nAmount) -{ - if(nAmount != 0) - { - effect eChange; - if(nAmount < 0) - { - nAmount = abs(nAmount); - eChange = SupernaturalEffect(EffectAbilityDecrease(nStat, nAmount)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - else - { - eChange = SupernaturalEffect(EffectAbilityIncrease(nStat, nAmount)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } -} -// This will, eventually, choose X number of stats, and change them within the -// range given. -void AI_CreateRandomStats(int nLowest, int nHighest, int nAmount) -{ - if(nAmount > 0 && nHighest != 0 && nLowest != 0 && nHighest >= nLowest) - { - int nRange = nHighest - nLowest; - int nNumSlots = nAmount; - if(nNumSlots > 6) nNumSlots = 6; - int nNumLeft = 6; - // Walk through each stat and figure out what it's chance of being - // modified is. As an example, suppose we wanted to have 4 randomized - // abilities. We'd look at the first ability and it would have a 4 in 6 - // chance of being picked. Let's suppose it was, the next ability would - // have a 3 in 5 chance of being picked. If this next ability wasn't - // picked to be changed, the 3rd ability woud have a 3 in 4 chance of - // being picked and so on. - int nCnt; - int nChange; - for(nCnt = 0; (nNumSlots > 0 && nCnt < 6); nCnt++) - { - if((nNumSlots == nNumLeft) || (Random(nNumLeft) < nNumSlots)) - { - nChange = Random(nRange) + nLowest; - AI_ApplyStatChange(nCnt, nChange); - nNumSlots--; - } - nNumLeft--; - } - } -} - -// This will randomise other stats. Put both numbers to 0 to ignore some. -// nHPMin, nHPMax = HP changes. -// nReflexSaveMin, nReflexSaveMax = Reflex Save changes -// nWillSaveMin, nWillSaveMax = Will Save changes -// nFortSaveMin, nFortSaveMax = Fortitude Save changes -// nACMin, nACMax = AC change. -// Use nACType to define the AC type - default AC_DODGE_BONUS -// * Applies the effects INSTANTLY. These CANNOT be removed easily! -void AI_CreateRandomOther(int nHPMin, int nHPMax, int nReflexSaveMin = 0, int nReflexSaveMax = 0, int nWillSaveMin = 0, int nWillSaveMax = 0, int nFortSaveMin = 0, int nFortSaveMax = 0, int nACMin = 0, int nACMax = 0, int nACType = AC_DODGE_BONUS) -{ - int nRange, nChange, nNewChange; - effect eChange; - if(!(nHPMin == 0 && nHPMax == 0) && nHPMax >= nHPMin) - { - nRange = nHPMax - nHPMin; - nChange = Random(nRange) + nHPMin; - if(nChange > 0) - { - eChange = SupernaturalEffect(EffectTemporaryHitpoints(nChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - // * Must have 1HP remaining at least. - else if(nChange < 0 && GetMaxHitPoints() > nChange) - { - eChange = EffectDamage(nChange, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_PLUS_TWENTY); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } - if(!(nReflexSaveMin == 0 && nReflexSaveMax == 0) && nReflexSaveMax >= nReflexSaveMin) - { - nRange = nReflexSaveMax - nReflexSaveMin; - nChange = Random(nRange) + nReflexSaveMin; - if(nChange > 0) - { - eChange = SupernaturalEffect(EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - // Cannot apply 0 change, but can make our saves negative - else if(nChange < 0) - { - nNewChange = abs(nChange); - eChange = SupernaturalEffect(EffectSavingThrowDecrease(SAVING_THROW_REFLEX, nNewChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } - if(!(nWillSaveMin == 0 && nWillSaveMax == 0) && nWillSaveMax >= nWillSaveMin) - { - nRange = nWillSaveMax - nWillSaveMin; - nChange = Random(nRange) + nWillSaveMin; - if(nChange > 0) - { - eChange = SupernaturalEffect(EffectSavingThrowIncrease(SAVING_THROW_WILL, nChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - // Cannot apply 0 change, but can make our saves negative - else if(nChange < 0) - { - nNewChange = abs(nChange); - eChange = SupernaturalEffect(EffectSavingThrowDecrease(SAVING_THROW_WILL, nNewChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } - if(!(nFortSaveMin == 0 && nFortSaveMax == 0) && nFortSaveMax >= nFortSaveMin) - { - nRange = nFortSaveMax - nFortSaveMin; - nChange = Random(nRange) + nFortSaveMin; - if(nChange > 0) - { - eChange = SupernaturalEffect(EffectSavingThrowIncrease(SAVING_THROW_FORT, nChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - // Cannot apply 0 change, but can make our saves negative - else if(nChange < 0) - { - nNewChange = abs(nChange); - eChange = SupernaturalEffect(EffectSavingThrowDecrease(SAVING_THROW_FORT, nNewChange)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } - if(!(nACMin == 0 && nACMax == 0) && nACMax >= nACMin) - { - nRange = nACMax - nACMin; - nChange = Random(nRange) + nACMin; - if(nChange > 0) - { - eChange = SupernaturalEffect(EffectACIncrease(nChange, nACType)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - else if(nChange < 0) - { - nNewChange = abs(nChange); - eChange = SupernaturalEffect(EffectACDecrease(nNewChange, nACType)); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eChange, OBJECT_SELF); - } - } -} - -/*:://///////////////////////////////////////////// -//:: SetListeningPatterns -//::////////////////////////////////////////////// - Changed a lot. added in "**" (all) listening, for hearing enemies. -//::////////////////////////////////////////////*/ - -void AI_SetListeningPatterns() -{ - // Lag check - if(GetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_LISTENING, AI_OTHER_MASTER)) return; - SetListening(OBJECT_SELF, TRUE); - - // Anyone that can hear it, and is not fighting, comes and helps - SetListenPattern(OBJECT_SELF, AI_SHOUT_I_WAS_ATTACKED, AI_SHOUT_I_WAS_ATTACKED_CONSTANT); - - //Set a custom listening pattern for the creature so that placables with - //"NW_BLOCKER" + Blocker NPC Tag will correctly call to their blockers. - string sBlocker = "NW_BLOCKER_BLK_" + GetTag(OBJECT_SELF); - SetListenPattern(OBJECT_SELF, sBlocker, AI_SHOUT_BLOCKER_CONSTANT); - - // Determines combat round, if not fighting - SetListenPattern(OBJECT_SELF, AI_SHOUT_CALL_TO_ARMS, AI_SHOUT_CALL_TO_ARMS_CONSTANT); - - // These call to allies, to move them to a battle. - SetListenPattern(OBJECT_SELF, AI_SHOUT_HELP_MY_FRIEND, AI_SHOUT_HELP_MY_FRIEND_CONSTANT); - SetListenPattern(OBJECT_SELF, AI_SHOUT_LEADER_FLEE_NOW, AI_SHOUT_LEADER_FLEE_NOW_CONSTANT); - SetListenPattern(OBJECT_SELF, AI_SHOUT_LEADER_ATTACK_TARGET, AI_SHOUT_LEADER_ATTACK_TARGET_CONSTANT); - - // 1.3 - Need a killed one. - SetListenPattern(OBJECT_SELF, AI_SHOUT_I_WAS_KILLED, AI_SHOUT_I_WAS_KILLED_CONSTANT); - - // 1.3 - PLaceables/doors which shout this get responded to! - SetListenPattern(OBJECT_SELF, AI_SHOUT_I_WAS_OPENED, AI_SHOUT_I_WAS_OPENED_CONSTANT); - - // This will make the listener hear anything, used to react to enemy talking. - SetListenPattern(OBJECT_SELF, "**", AI_SHOUT_ANYTHING_SAID_CONSTANT); -} - -// Base for moving round thier waypoints -// - Uses ExectuteScript to run the waypoint walking. -// * If bRun is TRUE, we run all the waypoint. -// * fPause is the time delay between walking to the next waypoint (default 1.0) -void SpawnWalkWayPoints(int bRun = FALSE, float fPause = 1.0) -{ - SetLocalInt(OBJECT_SELF, WAYPOINT_RUN, bRun); - SetLocalFloat(OBJECT_SELF, WAYPOINT_PAUSE, fPause); - ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF); -} - -// This MUST be called. It fires these events: -// SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. -// These MUST be called! the AI might fail to work correctly if they don't fire! -void AI_SetUpEndOfSpawn() -{ - if(GetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER)) - { - // This will store thier starting location, and then move back there after combat - // Will turn off if there are waypoints. It is set in SetUpEndOfSpawn. - SetAILocation(AI_RETURN_TO_POINT, GetLocation(OBJECT_SELF)); - } - - // Set up if we are immune to cirtain levels of spells naturally for better - // AI spellcasters. - object oHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); - // Get if immune is on - if(GetItemHasItemProperty(oHide, ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL)) - { - itemproperty eCheck = GetFirstItemProperty(oHide); - int nAmount; - // Check for item properties until we find the level. - while(GetIsItemPropertyValid(eCheck) && nAmount == FALSE) - { - // Check subtype. - if(GetItemPropertyType(eCheck) == ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL) - { - // Get the amount - nAmount = GetItemPropertyCostTableValue(eCheck); - } - eCheck = GetNextItemProperty(oHide); - } - // Set it - if(nAmount) - { - SetLocalInt(OBJECT_SELF, AI_SPELL_IMMUNE_LEVEL, nAmount); - } - } - - // All things only used by my personal AI. - // * If we are not using a custom AI file, we do these things. - if(GetCustomAIFileName() == "") - { - // If we are a commoner of any sort, and under 10 hit dice, we are - // panicy - IE: We set to -1 morale, which triggers the "commoner" fleeing - if(GetLevelByClass(CLASS_TYPE_COMMONER) && GetHitDice(OBJECT_SELF) < 10) - { - SetAIInteger(AI_MORALE, -1); - } - // If we are not set already to fearless, we might be set to fearless - if(!GetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER)) - { - AI_SetMaybeFearless(); - } - // Set if we are a beholder or mindflayer - switch(GetAppearanceType(OBJECT_SELF)) - { - // Sets we are a Beholder and use Ray attacks, and Animagic Ray. - case APPEARANCE_TYPE_BEHOLDER: // beholder, 401 - case APPEARANCE_TYPE_BEHOLDER_EYEBALL: // beholder, 402 - case APPEARANCE_TYPE_BEHOLDER_MAGE: // beholder, 403 - case APPEARANCE_TYPE_BEHOLDER_MOTHER: // Hive mother, 472 - { - // 1 = beholder - SetAIInteger(AI_SPECIAL_AI, AI_SPECIAL_AI_BEHOLDER); - } - break; - - // Set we are a mindflayer, and uses some special AI for them, IE: - // brain sucking. - case APPEARANCE_TYPE_MINDFLAYER: // Mindflayer, 413 - case APPEARANCE_TYPE_MINDFLAYER_2: // Mindflayer2, 414 - case APPEARANCE_TYPE_MINDFLAYER_ALHOON: // Mindflayer_Alhoon, 415 - { - // 2 = mindflayer - SetAIInteger(AI_SPECIAL_AI, AI_SPECIAL_AI_MINDFLAYER); - } - break; - } - - // This will turn OFF skills we cannot use, so will never attempt them - // at low skill levels anywhere in the AI. - AI_SetUpSkillToUse(); - - // Sets the turning level if we have FEAT_TURN_UNDEAD. - AI_SetTurningLevel(); - - // This sets what weapons the creature will use. They will use the best, according to a "value" - // Giving a creature the feat Two-weapon-fighting makes them deul wield if appropriate weapons. - SetWeapons(); - } - - // We don't set up corpses if set not to...else set to resurrect - if(!GetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER)) - { - // Note: Here, if we can, we set Bioware's lootable on. - if(GetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER)) - { - // Set to lootable - SetLootable(OBJECT_SELF, TRUE); - } - // Just handling corpse raising/resurrection/removal - // - Undestroyable, Raiseable and Selectable - SetIsDestroyable(FALSE, TRUE, TRUE); - } - - // Goes through and sets up which shouts the NPC will listen to. - // - Custom AI uses this also, or should take advantage of it - AI_SetListeningPatterns(); - - // This activates the creatures aura's. - if(GetCommandable()) AI_AdvancedAuras(); -} - -// Sets the turning level if we have FEAT_TURN_UNDEAD. -void AI_SetTurningLevel() -{ - // Most taken directly from NW_S2_TURNDEAD which is used with FEAT_TURN_UNDEAD - if(GetHasFeat(FEAT_TURN_UNDEAD)) - { - // By default, it is clerical levels which provide turn undead power. - // We can turn HD up to nTurnLevel (HD = GetHitDice + GetTurnREsistsnceHD of undead) - int nTurnLevel = GetLevelByClass(CLASS_TYPE_CLERIC); - // Paladins turn at -2 the level of clerics - if(GetLevelByClass(CLASS_TYPE_PALADIN) - 2 > nTurnLevel) - { - nTurnLevel = GetLevelByClass(CLASS_TYPE_PALADIN) - 2; - } - // Blackguard gets to turn at HITDICE -2 level, not character level, - // as it says in NW_S2_TURNDEAD. - if(GetLevelByClass(CLASS_TYPE_BLACKGUARD) > 0 && - (GetHitDice(OBJECT_SELF) - 2 > nTurnLevel)) - { - nTurnLevel = GetHitDice(OBJECT_SELF) - 2; - } - // BTW, the number of undead turned is at least nTurnLevel, so we - // can always turn one :-D - SetAIInteger(AI_TURNING_LEVEL, nTurnLevel); - // Note: Turn undead could be used for FEAT_DIVINE_MIGHT and - // FEAT_DIVINE_SHIELD - } -} -// This should not be used! -// * called from SetUpEndOfSpawn. -void AI_SetMaybeFearless() -{ - // Cirtain races are immune to fear - switch(MyPRCGetRacialType(OBJECT_SELF)) - { - case RACIAL_TYPE_CONSTRUCT: - case RACIAL_TYPE_DRAGON: - case RACIAL_TYPE_UNDEAD: - case RACIAL_TYPE_OUTSIDER: - { - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - return; - } - break; - } - // If we are immune to fear anyway, we don't care - if(GetHasFeat(FEAT_AURA_OF_COURAGE) || - GetHasFeat(FEAT_RESIST_NATURES_LURE) || - GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_FEAR)) - { - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - } -} - -// Activate all auras. -void AI_ActivateAura(int nAuraNumber) -{ - // Just ActionCast - cheat cast, as then we can use it unlmimted times, as books say. - if(GetHasSpell(nAuraNumber)) - { - ActionCastSpellAtObject(nAuraNumber, OBJECT_SELF, METAMAGIC_NONE, TRUE, 20, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); - } -} -// This will activate one aura, very quickly. -// If we have more than one...oh well. -void AI_AdvancedAuras() -{ - // Do aura's - - // NOTE: - // - All cheat cast. As DMG, they should be always on OR free action to reapply. - ClearAllActions(); - AI_ActivateAura(SPELLABILITY_DRAGON_FEAR); - AI_ActivateAura(SPELLABILITY_AURA_UNEARTHLY_VISAGE); - AI_ActivateAura(SPELLABILITY_AURA_BLINDING); - AI_ActivateAura(SPELLABILITY_AURA_OF_COURAGE); - AI_ActivateAura(SPELLABILITY_AURA_PROTECTION); - AI_ActivateAura(SPELLABILITY_AURA_STUN); - AI_ActivateAura(SPELLABILITY_AURA_FIRE); - AI_ActivateAura(SPELLABILITY_AURA_COLD); - AI_ActivateAura(SPELLABILITY_AURA_ELECTRICITY); - AI_ActivateAura(SPELLABILITY_AURA_UNNATURAL); - AI_ActivateAura(SPELLABILITY_AURA_FEAR); - AI_ActivateAura(SPELLABILITY_AURA_UNNATURAL); - AI_ActivateAura(SPELLABILITY_AURA_MENACE); - AI_ActivateAura(SPELLABILITY_TYRANT_FOG_MIST); - AI_ActivateAura(AI_SPELLABILITY_AURA_OF_HELLFIRE); - AI_ActivateAura(SPELLABILITY_AURA_HORRIFICAPPEARANCE); -} - -// Sets up thier selection of skills, to integers, if they would ever use them. -// NOTE: it also triggers "hide" if they have enough skill and not stopped. -void AI_SetUpSkillToUse() -{ - // Get our hitdice - int nHitDice = GetHitDice(OBJECT_SELF); - int nRank; - // Hiding. We turn off if we have no skill or under 1 skill in it - // * Note: For the AI to decide "oh, we should hide", it requires a minimum - // of 7 points in hide, and Rank - 4 must be >= our HD too. Can be forced. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER)) - { - if(!GetHasSkill(SKILL_HIDE) || - GetSkillRank(SKILL_HIDE) < 1) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER); - } - } - // Pickpocketing...we only turn it OFF here if low skill - // (or none) Needs 1/2 HD or 10 minimum - 10 is probably needed for the DC35 - // check for this skill at all. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER)) - { - nRank = GetSkillRank(SKILL_PICK_POCKET); - if(!GetHasSkill(SKILL_PICK_POCKET) || - nRank < nHitDice/2 || nRank < 10) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - } - } - // Taunting. Again, only off if low skill. Needs half of HD, or 3 minimum - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER)) - { - nRank = GetSkillRank(SKILL_TAUNT); - if(!GetHasSkill(SKILL_TAUNT) || - nRank < nHitDice/2 || nRank < 3) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER); - } - } - // Empathy. Again, only off if low skill. Needs any, checked futher in game. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER)) - { - if(!GetHasSkill(SKILL_ANIMAL_EMPATHY)) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER); - } - } - // Unlocking doors. Again, only off if low skill. Needs any, checked futher in game. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER)) - { - if(!GetHasSkill(SKILL_OPEN_LOCK)) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - } - } - // Healing kits. - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER)) - { - if(!GetHasSkill(SKILL_HEAL)) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - } - } - // Parrying - // Only on if we have some skill in it :-) - if(!GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER)) - { - if(!GetHasSkill(SKILL_PARRY)) - { - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER); - DeleteSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER); - } - } -} - -// This will make the visual effect passed play INSTANTLY at the creatures location. -// * nVFX - The visual effect constant number -void AI_SpawnInInstantVisual(int nVFX) -{ - // Beta 3 change: Made to at location. - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, - EffectVisualEffect(nVFX), - GetLocation(OBJECT_SELF)); -} -// This will make the visual effect passed play PERMAMENTLY. -// * nVFX - The visual effect constant number -// NOTE: They will be made to be SUPERNATUAL, so are not dispelled! -void AI_SpawnInPermamentVisual(int nVFX) -{ - ApplyEffectToObject(DURATION_TYPE_INSTANT, - SupernaturalEffect(EffectVisualEffect(nVFX)), - OBJECT_SELF); -} -// This will set the MAXIMUM and MINIMUM targets to pass this stage (under sName) -// of the targeting system. IE: -// - If we set it to min of 5, max of 10, for AC, if we cancled 5 targets on having -// AC higher then wanted, we will take the highest 5 minimum. -// If there are over 10, we take a max of 10 to choose from. -// * nType - must be TARGET_HIGHER or TARGET_LOWER. Defaults to the lowest, so it -// targets the lowest value for sName. -void AI_SetAITargetingValues(string sName, int nType, int nMinimum, int nMaximum) -{ - // Error checking - if((nType == TARGET_HIGHER || nType == TARGET_LOWER) && - nMinimum >= 1 && nMaximum >= 1 && nMaximum >= nMinimum) - { - // Set the type to sName. - // - It is TARGET_HIGHER (1) or TARGET_LOWER (0). - SetAIInteger(sName, nType); - - // Minimum amount of targets for this? - SetAIInteger(sName + MINIMUM, nMinimum); - - // Maximum targets for this? - SetAIInteger(sName + MAXIMUM, nMaximum); - } -} - -// This will set a spell trigger up. Under cirtain conditions, spells are released -// and cast on the caster. -// Once fired, a spell trigger is only reset by resting. Only 1 of each max is fired at once! -// * sType - is specifically: -// SPELLTRIGGER_DAMAGED_AT_PERCENT - When damaged, the trigger fires. Use iValue for the %. One at a time is fired. -// SPELLTRIGGER_IMMOBILE - Fired when held/paralyzed/sleeping ETC. One at a time is fired. -// SPELLTRIGGER_NOT_GOT_FIRST_SPELL - Makes sure !GetHasSpellEffect(iSpell1) already, -// then fires. Checks all in this category each round (first one fires!) -// SPELLTRIGGER_START_OF_COMBAT - Triggered always, at the start of DetermineCombatRound. -// * nNumber - can be 1-9, in sequential order of when you want them to fire. -// * nValue - is only required with DAMAGED_AT_PERCENT. -// * nSpellX - Cannot be 0. It should only really be defensive spells. -void SetSpellTrigger(string sType, int nValue, int nNumber, int nSpell1, int nSpell2 = 0, int nSpell3 = 0, int nSpell4 = 0, int nSpell5 = 0, int nSpell6 = 0, int nSpell7 = 0, int nSpell8 = 0, int nSpell9 = 0) -{ - // Either get our spell trigger (creature) or create one - object oTrigger = GetAIObject(AI_SPELL_TRIGGER_CREATURE); - // Is it valid? - if(!GetIsObjectValid(oTrigger)) - { - // Create it - oTrigger = CreateObject(OBJECT_TYPE_CREATURE, "jass_spelltrig", GetLocation(OBJECT_SELF)); - // Set local on them for the target - AddHenchman(OBJECT_SELF, oTrigger); - // Local for us to get our spell trigger (should be our henchmen) - SetAIObject(AI_SPELL_TRIGGER_CREATURE, oTrigger); - } - int nSize = 1; - string sTotalID = sType + IntToString(nNumber); - - SetLocalInt(oTrigger, sTotalID + "1", nSpell1); - if(nSpell2 != FALSE) - { nSize = 2; - SetLocalInt(oTrigger, sTotalID + "2", nSpell2); } - if(nSpell3 != FALSE) - { nSize = 3; - SetLocalInt(oTrigger, sTotalID + "3", nSpell3); } - if(nSpell4 != FALSE) - { nSize = 4; - SetLocalInt(oTrigger, sTotalID + "4", nSpell4); } - if(nSpell5 != FALSE) - { nSize = 5; - SetLocalInt(oTrigger, sTotalID + "5", nSpell5); } - if(nSpell6 != FALSE) - { nSize = 6; - SetLocalInt(oTrigger, sTotalID + "6", nSpell6); } - if(nSpell7 != FALSE) - { nSize = 7; - SetLocalInt(oTrigger, sTotalID + "7", nSpell7); } - if(nSpell8 != FALSE) - { nSize = 8; - SetLocalInt(oTrigger, sTotalID + "8", nSpell8); } - if(nSpell9 != FALSE) - { nSize = 9; - SetLocalInt(oTrigger, sTotalID + "9", nSpell9); } - - // Set final sizes ETC. - SetLocalInt(oTrigger, MAXINT_ + sTotalID, nSize); - SetLocalInt(oTrigger, sTotalID + USED, FALSE); - - // Check value - if(nValue > GetLocalInt(oTrigger, VALUE + sType)) - { - SetLocalInt(oTrigger, VALUE + sType, nValue); - } - - // Set how many spell triggers we have too - if(nNumber > GetLocalInt(oTrigger, MAXIMUM + sType)) - { - SetLocalInt(oTrigger, MAXIMUM + sType, nNumber); - } -} -// Debug: To compile this script, uncomment all of the below. -/* - Add two "/"'s at the start of this line -void main() -{ - return; -} -//*/ diff --git a/_module/nss/j_inc_walk.nss b/_module/nss/j_inc_walk.nss deleted file mode 100644 index a5169a10..00000000 --- a/_module/nss/j_inc_walk.nss +++ /dev/null @@ -1,333 +0,0 @@ -// Walk waypoints include. - -int NW_FLAG_STEALTH = 0x00000004; -int NW_FLAG_SEARCH = 0x00000008; -int NW_FLAG_DAY_NIGHT_POSTING = 0x00100000; - -// Animations: -// Randomwalk normally, or move to nearest ally. -int AMBIENT_ANIMATIONS = 1; -// These will face nearest ally, and talk or laugh. If no ally then look right/left. -int IMMOBILE_AMBIENT_ANIMATIONS = 2; -// This is the bird animations. -int AMBIENT_ANIMATIONS_AVIAN = 3; -// This will make the creatures "group" and sit, and normally talk. -int AMBIENT_GROUP_ANIMATIONS = 4; -// This will make the creature talk with nearby allies, as to not look dead. -// Also, if alone, it will take drinks, and things like that. -int IMMOBILE_ANIMATIONS_AND_SOLO = 5; -// This is a consitution for just random walking, nothing else. -int AMBIENT_ANIMAL_WALKING = 6; - -// Run the circuit. -void RunCircuit(int nTens, int nNum, int nRun = FALSE, float fPause = 1.0); -// Base for moving round thier waypoints -void WalkWayPoints(int nRun = FALSE, float fPause = 1.0); -// Used in walk waypoints -void RunNextCircuit(int nRun = FALSE, float fPause = 1.0); -// Checks which waypoint they are on, if any valid. TRUE if got any waypoints in range. -int CheckWayPoints(object oWalker = OBJECT_SELF); -//Returns true if the object is walking any waypoints. -int GetIsPostOrWalking(object oWalker = OBJECT_SELF); -// Returns the string to use - depending on day or night. -string GetStringPrefix(string sPrefix, object oWalker = OBJECT_SELF); -// This sets a spawn in condition. -void SetSpawnInCondition(int nCondition, int bValid = TRUE, string sName = "NW_GENERIC_MASTER"); -//Gets the spawn in condition.Can set things to different ints if you like. -int GetSpawnInCondition(int nCondition, string sName = "NW_GENERIC_MASTER"); - -//:://///////////////////////////////////////////// -//:: Master Local Set -//:: FileName -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - All On Spawn in conditions in the game are now - being stored within one local. The get and set - changed or checks the condition of this one - Hex local. The NW_FLAG_XXX variables above - allow for the user of these functions throughout - the generic scripts. -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Nov 14, 2001 -//::////////////////////////////////////////////// -void SetSpawnInCondition(int nCondition, int bValid, string sName) -{ - int nPlot = GetLocalInt(OBJECT_SELF, sName); - if(bValid == TRUE) - { - nPlot = nPlot | nCondition; - SetLocalInt(OBJECT_SELF, sName, nPlot); - } - else if (bValid == FALSE) - { - nPlot = nPlot & ~nCondition; - SetLocalInt(OBJECT_SELF, sName, nPlot); - } -} - -int GetSpawnInCondition(int nCondition, string sName) -{ - int nPlot = GetLocalInt(OBJECT_SELF, sName); - if(nPlot & nCondition) - { - return TRUE; - } - return FALSE; -} - -//*************************** -//*************************** -// -//WAY POINT WALK FUNCTIONS -// -//*************************** -//*************************** - -//:://///////////////////////////////////////////// -//:: Walk Way Point Path -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - Allows specified person walk a waypoint path -*/ -//::////////////////////////////////////////////// -//:: Created By: Aidan Scanlan -//:: Created On: July 10, 2001 -//::////////////////////////////////////////////// - -void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) //Run first circuit -{ - if(CheckWayPoints()) - { - ClearAllActions(); - } - - string NightWayString; - string NightPostString; - string sWay; - string sPost; - - //The block of code below deals with night and day cycle for postings and walkway points. - if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) - { - NightWayString = "WN_"; - NightPostString = "NIGHT_"; - } - else - { - NightWayString = "WP_"; - NightPostString = "POST_"; - } - - // We will set what strings to use. - SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_DAY", "WP_"); - SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_NIGHT", NightWayString); - SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_DAY", "POST_"); - SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_NIGHT", NightPostString); - - // Which shall we use? Day or night? - sWay = GetStringPrefix("NW_GENERIC_WALKWAYS"); - sPost = GetStringPrefix("NW_GENERIC_POSTING"); - - //I have now determined what the prefixs for the current walkways and postings are and will use them instead - // of POST_ and WP_ - - if(GetSpawnInCondition(NW_FLAG_STEALTH)) - { - // Will hide all the time, when they walk - ActionUseSkill(SKILL_HIDE, OBJECT_SELF); - } - else if(GetSpawnInCondition(NW_FLAG_SEARCH) || GetLocalInt(OBJECT_SELF, "ANIMATIONS") == IMMOBILE_AMBIENT_ANIMATIONS) - { - // Will search all the time, when they walk, or if we are not going to move. - ActionUseSkill(SKILL_SEARCH, OBJECT_SELF); - } - - //Test if OBJECT_SELF has waypoints to walk - string sWayTag = GetTag(OBJECT_SELF); - sWayTag = sWay + sWayTag + "_01"; - object oWay1 = GetNearestObjectByTag(sWayTag); - // Get the object, if nearest (IE in area one) is not valid. - if(!GetIsObjectValid(oWay1)) - { - oWay1 = GetObjectByTag(sWayTag); - } - - if(GetIsObjectValid(oWay1)) - { - int nNth = 1; - int nTens; - int nNum; - object oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT, OBJECT_SELF, nNth); - while (GetIsObjectValid(oNearest)) - { - string sNearestTag = GetTag(oNearest); - //removes the first 3 and last three characters from the waypoint's tag - //and checks it against his own tag. Waypoint tag format is WP_MyTag_XX. - if(GetSubString(sNearestTag, 3, GetStringLength(sNearestTag) - 6) == GetTag(OBJECT_SELF)) - { - string sTens = GetStringRight(GetTag(oNearest), 2); - nTens = StringToInt(sTens)/10; - nNum= StringToInt(GetStringRight(GetTag(oNearest), 1)); - oNearest = OBJECT_INVALID; - } - else - { - nNth++; - oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT,OBJECT_SELF,nNth); - } - } - RunCircuit(nTens, nNum, nRun, fPause); //*************************************** - ActionWait(fPause); - ActionDoCommand(RunNextCircuit(nRun, fPause)); - } - else // Else go to the post we have set. - { - sWayTag = GetTag(OBJECT_SELF); - sWayTag = sPost + sWayTag; - oWay1 = GetNearestObjectByTag(sWayTag); - if(!GetIsObjectValid(oWay1)) - { - oWay1 = GetObjectByTag(sWayTag); - } - if(GetIsObjectValid(oWay1)) - { - ActionForceMoveToObject(oWay1, nRun, 1.0, 60.0); - float fFacing = GetFacing(oWay1); - ActionDoCommand(SetFacing(fFacing)); - } - } -} - -void RunNextCircuit(int nRun = FALSE, float fPause = 1.0) -{ - RunCircuit(0, 1, nRun, fPause); - ActionWait(fPause); - ActionDoCommand(RunNextCircuit(nRun, fPause)); -} - -//:://///////////////////////////////////////////// -//:: Run Circuit -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - Calculates the proper path to follow along a - predetermined set of way points -*/ -//::////////////////////////////////////////////// -//:: Created By: Aidan Scanlan -//:: Created On: July 10, 2001 -//::////////////////////////////////////////////// - -void RunCircuit(int nTens, int nNum, int nRun = FALSE, float fPause = 1.0) -{ - // starting at a given way point, move sequentialy through incrementally - // increasing points until there are no more valid ones. - // We will check for day/night in these instead of heartbeats. - string sWay = GetStringPrefix("NW_GENERIC_WALKWAYS"); - string sNewString; - object oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) + IntToString(nNum)); - - while(GetIsObjectValid(oTargetPoint)) - { - ActionWait(fPause); - ActionMoveToObject(oTargetPoint, nRun); - nNum++; - if (nNum > 9) - { - nTens++; - nNum = 0; - } - // Maybe change string prefix to use. - sNewString = GetStringPrefix("NW_GENERIC_WALKWAYS"); - if(sNewString != sWay) - { - WalkWayPoints(nRun, fPause); - return; - } - oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) + IntToString(nNum)); - } - // once there are no more waypoints available, decriment back to the last - // valid point. - nNum--; - if (nNum < 0) - { - nTens--; - nNum = 9; - } - - // start the cycle again going back to point 01 - oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) + IntToString(nNum)); - while(GetIsObjectValid(oTargetPoint)) - { - ActionWait(fPause); - ActionMoveToObject(oTargetPoint, nRun); - nNum--; - if (nNum < 0) - { - nTens--; - nNum = 9; - } - // Maybe change string prefix to use. - sNewString = GetStringPrefix("NW_GENERIC_WALKWAYS"); - if(sNewString != sWay) - { - WalkWayPoints(nRun, fPause); - return; - } - oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) + IntToString(nNum)); - } -} - -//:://///////////////////////////////////////////// -//:: Check Walkways -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - This function checks the passed in object to - see if they are supposed to be walking to - day or night postings. -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Feb 26, 2002 -//::////////////////////////////////////////////// - -int CheckWayPoints(object oWalker) -{ - object oWay1; - object oWay2; - object oWay3; - object oWay4; - string sTag = GetTag(oWalker); - if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) - { - oWay2 = GetWaypointByTag("NIGHT_" + sTag); - oWay4 = GetWaypointByTag("WN_" + sTag + "_01"); - } - - oWay1 = GetWaypointByTag("POST_" + sTag); - oWay3 = GetWaypointByTag("WP_" + sTag + "_01"); - - if(GetIsObjectValid(oWay2) || GetIsObjectValid(oWay4) || GetIsObjectValid(oWay1) || GetIsObjectValid(oWay3)) - { - return TRUE; - } - return FALSE; -} - -// Returns the string to use - depending on day or night. -string GetStringPrefix(string sPrefix, object oWalker) -{ - if(GetIsDay() || GetIsDawn()) - { - return GetLocalString(OBJECT_SELF, sPrefix + "_DAY"); - } - else - { - return GetLocalString(OBJECT_SELF, sPrefix + "_NIGHT"); - } -} diff --git a/_module/nss/j_sp_archer.nss b/_module/nss/j_sp_archer.nss deleted file mode 100644 index bed463b0..00000000 --- a/_module/nss/j_sp_archer.nss +++ /dev/null @@ -1,50 +0,0 @@ -/************************ [On Spawn: Archer] *********************************** - Filename: j_sp_archer -************************* [On Spawn: Archer] *********************************** - Any-level archer. This man is pretty basic, and has really only the special - archery stuff on. -************************* [On Spawn: Archer] **********************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // Random intelligence, 4-6. - SetAIInteger(AI_INTELLIGENCE, 3 + d3()); - // Random morale - SetAIInteger(AI_MORALE, 7 + d6()); - - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - SetAIInteger(AI_RANGED_WEAPON_RANGE, 2); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER); - // For archers. If they have ally support, they'd rather move back & shoot then go into HTH. - SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER); - // This forces the move back from attackers, and shoot bows. Very small chance to go melee. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER); - // This will make the creature ALWAYs use any bows it has. ALWAYS. - - SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - // no spells or items. - SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - - // Ambient animations - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0f, SpawnWalkWayPoints()); -} diff --git a/_module/nss/j_sp_dragon.nss b/_module/nss/j_sp_dragon.nss deleted file mode 100644 index dbfd8ee2..00000000 --- a/_module/nss/j_sp_dragon.nss +++ /dev/null @@ -1,38 +0,0 @@ -/************************ [On Spawn: Dragon] *********************************** - Filename: j_sp_dragon -************************* [On Spawn: Dragon] *********************************** - Dragons are highly intelligent, and can...fly! - - They do have a few improved spellcasting bits, and like to target lower AC - more then anything. - - Flying is also on, so they can jump to enemies far away. -************************* [On Spawn: Dragon] **********************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // Maximum "intelligence" - SetAIInteger(AI_INTELLIGENCE, 10); - SetAIInteger(AI_MORALE, 10); - - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 1, 6); - - SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - // Dragon stuff - SetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER); - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0f, SpawnWalkWayPoints()); -} diff --git a/_module/nss/j_sp_highmage.nss b/_module/nss/j_sp_highmage.nss deleted file mode 100644 index 1915ef5f..00000000 --- a/_module/nss/j_sp_highmage.nss +++ /dev/null @@ -1,51 +0,0 @@ -/************************ [On Spawn: High-Level Mage] ************************** - Filename: j_sp_highmage -************************* [On Spawn: High-Level Mage] ************************** - A mage who is higher level - ok, so it has many stuff from the default spawn - file, but this one has some of the mage behaviours set, such as long range - attacking and fast buffing, but no spell triggers. -************************* [On Spawn: High-Level Mage] *************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // Random intelligence, 7-9. - SetAIInteger(AI_INTELLIGENCE, 6 + d3()); - SetAIInteger(AI_MORALE, 10); - - // Less mantals, and less saves is all we target - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 4); - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 1, 2); - - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - SetAIInteger(AI_RANGED_WEAPON_RANGE, 2); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - // no spells or items. - SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - - // Ambient animations - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0f, SpawnWalkWayPoints()); -} diff --git a/_module/nss/j_sp_humleader.nss b/_module/nss/j_sp_humleader.nss deleted file mode 100644 index d2ee12f5..00000000 --- a/_module/nss/j_sp_humleader.nss +++ /dev/null @@ -1,87 +0,0 @@ -/************************ [On Spawn: Human Leader] ***************************** - Filename: j_sp_humleader -************************* [On Spawn: Human Leader] ***************************** - A human leader sample spawn script. - - Maximum intelligence, some sample shouts/taunts and the leader settings are - on. He does, however, never run, and always likes melee. - - Shouldn't be a spellcaster, should only be a fighter primarily geared for HTH - fighting. -************************* [On Spawn: Human Leader] ****************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // Maximum "intelligence" - SetAIInteger(AI_INTELLIGENCE, 10); - // We are fearless - SetAIInteger(AI_MORALE, 10); - - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 2, 6); - // AC is used for all phisical attacks. Lower targets lower (By default). - // Fighter/Clerics (It is over a mages BAB + 1 (IE 0.5 BAB/Level) target lower - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_LOWER, 2, 6); - // Base attack bonus. Used for spells and phisical attacks. Checked with GetBaseAttackBonus. - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Forces them to not flee. This may be set with AI_SetMaybeFearless at the end. - - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - - SetAIInteger(AI_RANGED_WEAPON_RANGE, 6); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - SetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER); - // Set if you want them to move forwards into HTH sooner. Will always - // if the enemy is a mage/archer, else % based on range. - - // Set all leader variables - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Special leader. Can issuse some orders. See readme for details. - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER); - // Boss shout. 1 time use - calls all creatures in X meters (below) for battle! - //SetAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60); - // Defaults to a 60 M range. This can change it. Note: 1 toolset square = 10M. - - - SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - SetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER); - // When combat is over, creature rests. Useful for replenising health. - SetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER); - - // Can uncomment these if the leader has no spells or items. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - // The creature doesn't check for, or use any items that cast spells. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - //The creature doesn't ever cast spells (and never checks them) - - // Combat - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 10, 4, "You don't stand a chance!", "Men, Attack!", "For Glory!!", "Eat steel!"); - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 10, 4, "Your might is no match for my brains!", "Tough man, are we?", "You won't kill me!", "Pah! I am no coward! I fight on!"); - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 10, 4, "No mercy!", "Hope for a quick death!", "Men! Kill the lot!", "There is no chance!"); - - // Our leader shouts! - // - As this is a human, very orderly - AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_SEND_RUNNER, "Soldier! Go find help!"); - AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_ATTACK_TARGET, "Direct your attacks here, men!"); - - // Ambient animations - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0f, SpawnWalkWayPoints()); -} diff --git a/_module/nss/j_sp_lichboss.nss b/_module/nss/j_sp_lichboss.nss deleted file mode 100644 index 44aa7b2c..00000000 --- a/_module/nss/j_sp_lichboss.nss +++ /dev/null @@ -1,76 +0,0 @@ -/************************ [On Spawn: Lich] ************************************* - Filename: j_sp_lichboss -************************* [On Spawn: Lich] ************************************* - A high-powered lich, who takes advantage of spell triggers! - - He should be geared towards higher level spells, and once he runs out, he - does cheat-cast several 1-3 level spells. - - The spell triggers stop quite a bit of damage, with Premonition, greater - spell mantal and Energy Buffer. He also has some taunts he uses most combat - rounds, as well as using longer ranged spells first. - - As he is a boss, he is a leader status, and also gets a free harm at 30% HP. -************************* [On Spawn: Lich] ************************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // Maximum intelligence - SetAIInteger(AI_INTELLIGENCE, 10); - SetAIInteger(AI_MORALE, 10); - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12); - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 3, 6); - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 3, 4); - // Mages target higher. (the lowest BAB, under half our hit dice in BAB) - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5); - - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3); - - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - - SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!"); - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!"); - AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!"); - - // Spell triggers - SetSpellTrigger(SPELLTRIGGER_START_OF_COMBAT, FALSE, 1, SPELL_DEATH_ARMOR, SPELL_FOXS_CUNNING, SPELL_SHADOW_SHIELD); - - // Damamged - SetSpellTrigger(SPELLTRIGGER_DAMAGED_AT_PERCENT, 30, 1, SPELL_HARM); - - // Immobile - SetSpellTrigger(SPELLTRIGGER_IMMOBILE, FALSE, 1, SPELL_FREEDOM_OF_MOVEMENT); - - // Normal defensive - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION); - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 2, SPELL_PREMONITION); - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 3, SPELL_GREATER_SPELL_MANTLE); - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 4, SPELL_GREATER_SPELL_MANTLE); - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 5, SPELL_ENERGY_BUFFER); - SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 6, SPELL_ENERGY_BUFFER); - - // Cheat spells - SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_MAGIC_MISSILE, SPELL_MAGIC_MISSILE, SPELL_FIREBALL, SPELL_MELFS_ACID_ARROW, SPELL_MELFS_ACID_ARROW); - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0, SpawnWalkWayPoints()); -} diff --git a/_module/nss/j_sp_lowintel.nss b/_module/nss/j_sp_lowintel.nss deleted file mode 100644 index fdcf269e..00000000 --- a/_module/nss/j_sp_lowintel.nss +++ /dev/null @@ -1,29 +0,0 @@ -/************************ [On Spawn: Low Intelligence] ************************* - Filename: j_sp_lowintel -************************* [On Spawn: Low Intelligence] ************************* - Low intelligence creatures, such as Goblins, might not have an advanced a - way of picking who to best attack, nor as much AI intelligence. -************************* [On Spawn: Low Intelligence] ************************/ - -// This is required for all spawn in options! -#include "j_inc_spawnin" - -void main() -{ - // 1 or 2 intelligence. - SetAIInteger(AI_INTELLIGENCE, d2()); - SetAIInteger(AI_MORALE, 10); - - // Probably worse for the AI to have these set - acts less intelligently. - SetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER); - SetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER); - - // Lots of other stuff is affected by having 1 or 2 intelligence anyway. - // Removed a few of the immunity-checking bits, to lower effectivness. - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0f, SpawnWalkWayPoints()); -} diff --git a/_module/nss/no_ai_atk.nss b/_module/nss/no_ai_atk.nss new file mode 100644 index 00000000..9dad7432 --- /dev/null +++ b/_module/nss/no_ai_atk.nss @@ -0,0 +1,38 @@ +//:://///////////////////////////////////////////// +//:: On Attacked +//:: NW_C2_DEFAULT5 +//::////////////////////////////////////////////// +/* + Set attacker as an enemy if they are not a friend + or enemy (ie/ neutral), and initiate combat AI if + it is not already running. +*/ +//::////////////////////////////////////////////// + +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + object oA = GetLastAttacker(); + + if ( GetIsObjectValid( oA ) ) + { + /* + if ( GetIsFriend( oA ) ) + { + PrintString( GetName( OBJECT_SELF ) + " attacked by friend " + GetName( oA ) ); + } + */ + if ( !GetIsFriend( oA ) && !GetIsEnemy( oA ) && GetMaster( OBJECT_SELF ) != oA ) + { + //neutrals + SetIsTemporaryEnemy( oA, OBJECT_SELF, TRUE, 300.0 ); + } + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + SignalEvent(OBJECT_SELF, EventUserDefined(1005)); + } +} diff --git a/_module/nss/no_ai_blk.nss b/_module/nss/no_ai_blk.nss new file mode 100644 index 00000000..01b9814d --- /dev/null +++ b/_module/nss/no_ai_blk.nss @@ -0,0 +1,36 @@ +//:://///////////////////////////////////////////// +//:: Default On Heartbeat +//:: NW_C2_DEFAULTE +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This will cause blocked creatures to open + or smash down doors depending on int and + str. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 23, 2001 +//::////////////////////////////////////////////// + +/* +NOTE: Unmodified except for this comment. Makes this +script show up as a script for this module for completeness. +*/ + +void main() +{ + object oDoor = GetBlockingDoor(); + + if(GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 5) + { + if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_OPEN) && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 7 ) + { + DoDoorAction(oDoor, DOOR_ACTION_OPEN); + } + else if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_BASH)) + { + DoDoorAction(oDoor, DOOR_ACTION_BASH); + } + } +} diff --git a/_module/nss/no_ai_cmb.nss b/_module/nss/no_ai_cmb.nss new file mode 100644 index 00000000..8b83f2e3 --- /dev/null +++ b/_module/nss/no_ai_cmb.nss @@ -0,0 +1,20 @@ +//:://///////////////////////////////////////////// +//:: End of Combat Round +//:: +//::////////////////////////////////////////////// +/* + Calls the end of combat script every round +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + //SetReadyStatus(); + //DoCombat(); + InitCombat(); + //signal combat to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1003 ) ); +} diff --git a/_module/nss/no_ai_cnv.nss b/_module/nss/no_ai_cnv.nss new file mode 100644 index 00000000..82219f6f --- /dev/null +++ b/_module/nss/no_ai_cnv.nss @@ -0,0 +1,162 @@ +//:://///////////////////////////////////////////// +//:: On Conversation +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + by the generic script after dialogue or a + shout is initiated. +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + object oT = OBJECT_INVALID; + object oM = GetMaster( OBJECT_SELF ); + object oBroadcaster = GetLastSpeaker(); + int iBroadcast = GetListenPatternNumber(); + int iR = 0; + + if ( iBroadcast == -1 ) + { + ClearAllActions(); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + //ActionStartConversation( oBroadcaster ); + BeginConversation(); + //DoQueueShutdown( 6.0 ); + } + else + { + if ( GetIsObjectValid( oM ) && oBroadcaster == oM ) + { + if ( iBroadcast == ASSOCIATE_COMMAND_STANDGROUND ) + { + //stand ground + SetLocalLocation( OBJECT_SELF, "#SGLOC", GetLocation( OBJECT_SELF ) ); + SetLocalInt( OBJECT_SELF, "#STANDGROUND", 1 ); + ClearAllActions(); + PlayVoiceChat( VOICE_CHAT_TASKCOMPLETE ); + ActionMoveToLocation( GetLocation( OBJECT_SELF ) ); //stop here + } + else if ( iBroadcast == ASSOCIATE_COMMAND_ATTACKNEAREST ) + { + //attack nearest + DeleteLocalInt( OBJECT_SELF, "#STANDGROUND" ); + oT = GetTarget(); + if ( GetIsObjectValid( oT ) ) + { + PlayVoiceChat( VOICE_CHAT_GOODIDEA ); + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + SignalEvent( OBJECT_SELF, EventUserDefined( 1003 ) ); + } + else + { + PlayVoiceChat( VOICE_CHAT_CANTDO ); + } + } + else if ( iBroadcast == ASSOCIATE_COMMAND_HEALMASTER ) + { + //heal master + DeleteLocalInt( OBJECT_SELF, "#STANDGROUND" ); + if ( DoSpellHeal( oM ) ) + { + PlayVoiceChat( VOICE_CHAT_CANDO ); + } + else + { + PlayVoiceChat( VOICE_CHAT_CANTDO ); + } + } + else if ( iBroadcast == ASSOCIATE_COMMAND_FOLLOWMASTER ) + { + //follow master + DeleteLocalLocation( OBJECT_SELF, "#STANDGROUND" ); + ClearAllActions(); + ActionForceFollowObject( oM, 3.0 ); + } + else if ( iBroadcast == ASSOCIATE_COMMAND_GUARDMASTER ) + { + //guard master + DeleteLocalInt( OBJECT_SELF, "#STANDGROUND" ); + if ( !GetIsObjectValid( oT = GetLastHostileActor( oM ) ) ) + { + if ( !GetIsObjectValid( oT = GetLastAttacker( oM ) ) ) + { + PlayVoiceChat( VOICE_CHAT_CANTDO ); + } + } + //list of actions to try against oT + if ( GetIsObjectValid( oT ) && ( GetObjectSeen( oT ) || GetObjectHeard( oT ) ) ) + { + if ( !( iR = DoSpellDirect( oT ) ) ) + { + if ( !( iR = DoTouch( oT ) ) ) + { + if ( !( iR = DoAttackRanged( oT ) ) ) + { + if ( !( iR = DoAttackMelee( oT ) ) ) + { + PlayVoiceChat( VOICE_CHAT_CANTDO ); + } + } + } + } + if ( iR ) + { + PlayVoiceChat( VOICE_CHAT_CANDO ); + } + } + } + } + if ( iBroadcast == 699 ) //COMBAT going on nearby + { + //respond + if ( GetArea( oBroadcaster ) == GetArea( OBJECT_SELF ) && GetDistanceBetween( oBroadcaster, OBJECT_SELF ) <= GetResponseRange( BC_FIGHTING ) ) + { + object oE = GetTarget(); + if ( !GetIsObjectValid( oE ) ) + { + //I've heard combat but I can't see the combat or any enemies + //PrintString( "CHM: " + GetName( OBJECT_SELF ) + " moving to support " + GetName( oBroadcaster ) ); + DoMoveToObject( oBroadcaster, TRUE, 5.0 ); + DoFightBroadcast(); + } + else + { + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + } + } + else + { + //hearing something from another area or from out of our response range + //SpeakString( "Ignoring combat sounds" ); + } + } + else if ( iBroadcast == 691 ) //DEAD + { + //if ( GetIsFriend( oBroadcaster ) ) + if ( GetFactionEqual( oBroadcaster ) ) + { + DoVoiceChat( VOICE_CHAT_CUSS ); + } + else if ( GetIsEnemy( oBroadcaster ) ) + { + if ( Random( 2 ) ) + { + DoVoiceChat( VOICE_CHAT_CHEER ); + } + else + { + DoVoiceChat( VOICE_CHAT_LAUGH ); + } + } + } + } + //signal conversation to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1004 ) ); +} \ No newline at end of file diff --git a/_module/nss/no_ai_dam.nss b/_module/nss/no_ai_dam.nss new file mode 100644 index 00000000..ae405275 --- /dev/null +++ b/_module/nss/no_ai_dam.nss @@ -0,0 +1,54 @@ +//:://///////////////////////////////////////////// +//:: On Damaged +//:: +//::////////////////////////////////////////////// +/* + Set damager as an enemy if they are not a friend + or enemy (ie/ neutral), and initiate combat AI if + it is not already running. +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + float fHP; + object oDam = GetLastDamager(); + object oT = OBJECT_INVALID; + + //if timestamp has elapsed and there is a friendly nearby + if ( !GetLocalInt( OBJECT_SELF, "#HEALDEL" ) && + GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE ) ) ) + { + fHP = IntToFloat( GetCurrentHitPoints( OBJECT_SELF ) ) / GetMaxHitPoints( OBJECT_SELF ); + //only start calling for healing once we've taken 50% + if ( fHP < 0.51 ) + { + //broadcast request for healing for display purposes + DoVoiceChat( VOICE_CHAT_HEALME ); + //do not broadcast again until next combat round event when this int is cleared + SetLocalInt( OBJECT_SELF, "#HEALDEL", 1 ); + DelayCommand( 3.0, DeleteLocalInt( OBJECT_SELF, "#HEALDEL" ) ); + } + } + if ( GetIsObjectValid( oDam ) ) + { + /* + if ( GetIsFriend( oDam ) ) + { + PrintString( GetName( OBJECT_SELF ) + " damaged by friend " + GetName( oDam ) ); + } + */ + if ( !GetIsFriend( oDam ) && !GetIsEnemy( oDam ) && GetMaster( OBJECT_SELF ) != oDam ) + { + //neutrals + SetIsTemporaryEnemy( oDam, OBJECT_SELF, TRUE, 300.0 ); + } + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + //signal damage to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1006 ) ); + } +} \ No newline at end of file diff --git a/_module/nss/no_ai_dis.nss b/_module/nss/no_ai_dis.nss new file mode 100644 index 00000000..7b44f46c --- /dev/null +++ b/_module/nss/no_ai_dis.nss @@ -0,0 +1,38 @@ +//:://///////////////////////////////////////////// +//:: Default: On Disturbed +//:: NW_C2_DEFAULT8 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Calls the end of combat script every round +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 16, 2001 +//:://///////////////////////////////////////// + +// * Make me hostile the faction of my last attacker (TEMP) +// AdjustReputation(OBJECT_SELF,GetFaction(GetLastAttacker()),-100); +// * Determined Combat Round + +/* +NOTE: Blocked to stop interference. +Update coming in next version. +*/ + +//#include "NW_I0_GENERIC" +#include "no_lib_data" +#include "no_inc" + +void main() +{ + object oT = GetLastDisturbed(); + + if ( GetIsObjectValid( oT ) ) + { + SetIsTemporaryEnemy( oT, OBJECT_SELF, TRUE, 300.0 ); + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + SignalEvent(OBJECT_SELF, EventUserDefined(1008)); + } +} diff --git a/_module/nss/no_ai_dth.nss b/_module/nss/no_ai_dth.nss new file mode 100644 index 00000000..6243f0f8 --- /dev/null +++ b/_module/nss/no_ai_dth.nss @@ -0,0 +1,32 @@ +//:://///////////////////////////////////////////// +//:: On Death +//:: +//::////////////////////////////////////////////// +/* + Shouts to allies that they have been killed +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + //float fDieDelay = GetLocalFloat( OBJECT_SELF, "#DECAYDELAY" ); + //corpse decay deactivated for Murray module + float fDieDelay = 10.0; + + ClearAllActions(); + //broadcast death + SpeakString( "BC_DEAD", TALKVOLUME_SILENT_TALK ); + //PrintString( GetName( OBJECT_SELF ) + " killed by " + GetName( GetLastKiller() ) ); + if ( GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, OBJECT_SELF ) ) == "Balor Properties" ) + { + ExecuteScript( "nw_s3_balordeth", OBJECT_SELF ); + } + DelayCommand( fDieDelay, ExecuteScript( "no_scr_cleanvars", OBJECT_SELF ) ); + DelayCommand( fDieDelay + 0.5, ExecuteScript( "no_scr_excorpse", OBJECT_SELF ) ); + //signal death to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1007 ) ); +} + diff --git a/_module/nss/no_ai_hrt.nss b/_module/nss/no_ai_hrt.nss new file mode 100644 index 00000000..53b06cbd --- /dev/null +++ b/_module/nss/no_ai_hrt.nss @@ -0,0 +1,121 @@ +//:://///////////////////////////////////////////// +//:: On Heartbeat +//:: +//::////////////////////////////////////////////// +/* + This script will have people perform default + animations. +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + //if the AI level is very low and the combat AI is not active do nothing + //need this change so that combat AI can shut itself down properly before ignoring heartbeats + if ( GetAILevel() == AI_LEVEL_VERY_LOW && !IsActive() ) + { + return; + } + + if ( IsActive() ) + { + //if combat AI is active this is the only segment of the heartbeat that will run + int iE = GetHostileCount( 50.0 ); + if ( iE == 0 ) + { + object oA = GetFurthestActiveAlly( 50.0 ); + if ( GetIsObjectValid( oA ) && GetDistanceBetween( OBJECT_SELF, oA ) > 20.0 && !GetIsPerceived( oA ) ) + { + DoMoveToObject( oA, TRUE ); + } + else + { + ExecuteScript( "no_scr_shutdown", OBJECT_SELF ); + } + } + } + else + { + //combat AI isn't active + if( GetSpawnInCondition( NW_FLAG_DAY_NIGHT_POSTING ) ) + { + int nDay = FALSE; + if( GetIsDay() || GetIsDawn() ) + { + nDay = TRUE; + } + if( GetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT" ) != nDay ) + { + if( nDay == TRUE ) + { + SetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE ); + } + else + { + SetLocalInt( OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE ); + } + WalkWayPoints(); + } + } + + if( CanAct() ) + { + object oE = GetTarget(); + if( !GetIsPostOrWalking() ) + { + if( !GetIsObjectValid( GetAttemptedAttackTarget() ) && !GetIsObjectValid( GetAttemptedSpellTarget() ) ) + { + //if( !GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN) ) ) + if ( !GetIsObjectValid( oE ) ) + { + if( /*!GetBehaviorState( NW_FLAG_BEHAVIOR_SPECIAL ) &&*/ !IsInConversation( OBJECT_SELF ) ) + { + if( GetSpawnInCondition( NW_FLAG_AMBIENT_ANIMATIONS ) || GetSpawnInCondition( NW_FLAG_AMBIENT_ANIMATIONS_AVIAN ) ) + { + PlayMobileAmbientAnimations(); + } + else if( GetIsEncounterCreature() ) + //won't be here unless this next condition is true so it is redundant to check it + //!GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ) ) ) + { + PlayMobileAmbientAnimations(); + } + else if( GetSpawnInCondition( NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS ) ) + //won't be in here unless this next condition is true so it is redundant to check it + //!GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ) ) ) + { + PlayImmobileAmbientAnimations(); + } + } + else + { + DetermineSpecialBehavior(); + } + } + else + { + //DetermineCombatRound() + InitCombat(); + } + } + } + } + else + { + if( GetSpawnInCondition( NW_FLAG_SLEEPING_AT_NIGHT ) ) + { + effect eVis = EffectVisualEffect( VFX_IMP_SLEEP ); + if( d10() > 6 ) + { + ApplyEffectToObject( DURATION_TYPE_INSTANT, eVis, OBJECT_SELF ); + } + } + } + } + + //Signal heart beat event to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1001 ) ); +} diff --git a/_module/nss/no_ai_per.nss b/_module/nss/no_ai_per.nss new file mode 100644 index 00000000..eaf188fe --- /dev/null +++ b/_module/nss/no_ai_per.nss @@ -0,0 +1,98 @@ +//:://///////////////////////////////////////////// +//:: On Percieve +//:: +//::////////////////////////////////////////////// +/* + Checks to see if the perceived target is an + enemy and if so fires the Determine Combat + Round function +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + object oPer = GetLastPerceived(); + + if ( !GetIsObjectValid( oPer ) ) + { + //invalid object, do nothing + return; + } + + //for associates + if ( !GetLocalInt( OBJECT_SELF, "#ACTIVE" ) && GetIsMaster( oPer ) ) + { + ActionForceFollowObject( oPer, GetFollowDist() ); + } + + //main + if ( GetLastPerceptionSeen() && GetIsPerceived( oPer, NO_PERCEPTION_SEEN ) ) + { + if ( GetIsEnemy( oPer ) && !GetIsDead( oPer ) ) + { + //trigger combat + //PrintString( "ENEMY: " + GetName( OBJECT_SELF ) + " -> " + GetName( oPer ) ); + DoVoiceChat( VOICE_CHAT_ENEMIES ); + if ( GetIsFastBuffer() == TRUE && GetIsFastBuffed() == FALSE ) + { + //only to this once per start up + ClearAllActions(); + if ( DoFastBuffs() ) + { + //PrintString( "FASTBUFF: " + GetName( OBJECT_SELF ) ); + } + SetIsFastBuffed( TRUE ); + } + //DoQueueCombat( 8.0, 8.0 ); + DelayCommand( 0.5, InitCombat() ); + } + else if ( !GetLocalInt( OBJECT_SELF, "#ACTIVE" ) ) + { + if ( GetIsFriend( oPer ) && GetIsDead( oPer ) && GetHasRaisingAbility() ) + { + ClearAllActions(); + if ( DoSpellRaise( oPer ) ) + { + SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + DoQueueShutdown( 12.0 ); + } + } + } + } + else if ( GetLastPerceptionHeard() && GetIsPerceived( oPer, NO_PERCEPTION_HEARD ) ) + { + if ( !GetIsObjectValid( GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ) ) ) + { + if ( GetIsEnemy( oPer ) && GetObjectType( oPer ) == OBJECT_TYPE_CREATURE && !GetIsDead( oPer ) ) + { + //check perceptions + if ( !GetIsPerceived( oPer, NO_PERCEPTION_SEEN ) ) + { + //heard something that is not visible, no visible enemies, respond + //SetLocalInt( OBJECT_SELF, "#VANISHED", 1 ); + //DoQueueCombat( 8.0, 8.0 ); + DelayCommand( 0.5, InitCombat() ); + } + } + } + } + else if ( GetLastPerceptionVanished() && GetIsPerceived( oPer, NO_PERCEPTION_VANISHED ) ) + { + //make sure it isn't a corpse that just faded out + //report vanished enemies who have not just died + if ( GetIsEnemy( oPer ) ) + { + if( !GetIsDead( oPer ) ) + { + DoVoiceChat( VOICE_CHAT_CUSS ); + SetLocalInt( OBJECT_SELF, "#VANISHED", 1 ); + } + } + } + //signal perception to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1002 ) ); +} + diff --git a/_module/nss/no_ai_rst.nss b/_module/nss/no_ai_rst.nss new file mode 100644 index 00000000..e474f9f5 --- /dev/null +++ b/_module/nss/no_ai_rst.nss @@ -0,0 +1,26 @@ +//:://///////////////////////////////////////////// +//:: Default: On Rested +//:: NW_C2_DEFAULTA +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just rested. +*/ +//::////////////////////////////////////////////// +//:: Created By: Don Moar +//:: Created On: April 28, 2002 +//::////////////////////////////////////////////// + +/* +NOTE: Unmodified except for this comment. Makes this +script show up as a script for this module for completeness. +*/ + +void main() +{ + // enter desired behaviour here + + return; + +} diff --git a/_module/nss/no_ai_spt.nss b/_module/nss/no_ai_spt.nss new file mode 100644 index 00000000..e20847f6 --- /dev/null +++ b/_module/nss/no_ai_spt.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: On Spell Cast At +//:: +//::////////////////////////////////////////////// +/* + This determines if the spell just cast at the + target is harmful or not. +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + int iS = GetLastSpell(); + int iH = GetLastSpellHarmful(); + object oC = GetLastSpellCaster(); + + if ( !iH ) + { + if ( iS == SPELL_RAISE_DEAD || iS == SPELL_RESURRECTION ) + { + SetCommandable( TRUE, OBJECT_SELF ); + DeleteLocalObject( OBJECT_SELF, "#RAISER" ); + } + else if ( iS == SPELL_HEAL || iS == SPELL_CURE_CRITICAL_WOUNDS || + iS == SPELL_CURE_SERIOUS_WOUNDS || iS == SPELL_CURE_MODERATE_WOUNDS || + iS == SPELL_CURE_LIGHT_WOUNDS || iS == SPELL_CURE_MINOR_WOUNDS ) + { + if ( oC != OBJECT_SELF && GetIsFriend( oC ) ) + { + DoVoiceChat( VOICE_CHAT_THANKS ); + } + DeleteLocalObject( OBJECT_SELF, "#HEALER" ); + } + else if ( iS == SPELL_DARKVISION ) + { + DeleteLocalInt( OBJECT_SELF, "#DARKNESS" ); + DeleteLocalObject( OBJECT_SELF, "#VISION" ); + } + else if ( iS == SPELL_SEE_INVISIBILITY ) + { + DeleteLocalInt( OBJECT_SELF, "#VANISHED" ); + DeleteLocalObject( OBJECT_SELF, "#VISION" ); + } + else if ( iS == SPELL_TRUE_SEEING ) + { + DeleteLocalInt( OBJECT_SELF, "#DARKNESS" ); + DeleteLocalInt( OBJECT_SELF, "#VANISHED" ); + DeleteLocalObject( OBJECT_SELF, "#VISION" ); + } + } + if ( iS == SPELL_DARKNESS ) + { + SetLocalInt( OBJECT_SELF, "#DARKNESS", 1 ); + } + if ( iH ) + { + if ( !GetIsFriend( oC ) && !GetIsEnemy( oC ) && GetMaster( OBJECT_SELF ) != oC ) + { + //neutrals + SetIsTemporaryEnemy( oC, OBJECT_SELF, TRUE, 300.0 ); + } + //DoQueueCombat( 8.0, 8.0 ); + InitCombat(); + } + //signal spell at to userdef + SignalEvent( OBJECT_SELF, EventUserDefined( 1011 ) ); +} diff --git a/_module/nss/no_inc.nss b/_module/nss/no_inc.nss new file mode 100644 index 00000000..ca312315 --- /dev/null +++ b/_module/nss/no_inc.nss @@ -0,0 +1,10 @@ +//#include "no_lib_data" +#include "no_inc_ptypes" +#include "no_lib_bio" +#include "no_lib_priority" +#include "no_lib_magic" +#include "no_lib_analysis" +#include "no_lib_feat" +#include "no_lib_melee" +#include "no_lib_ranged" +#include "no_lib_actions" diff --git a/_module/nss/no_inc_ptypes.nss b/_module/nss/no_inc_ptypes.nss new file mode 100644 index 00000000..c2f9fac1 --- /dev/null +++ b/_module/nss/no_inc_ptypes.nss @@ -0,0 +1,408 @@ +//constants + +//can broadcasting use DM channel +const int NO_CAN_USE_DM_CHANNEL = 1; + +//broadcast constants +const int BC_FIGHTING = 699; + +//effect weights +const int NO_EFFECT_GENERIC = 1; +const int NO_EFFECT_DISEASE = 2; +const int NO_EFFECT_CURSE = 4; +const int NO_EFFECT_POISON = 8; +const int NO_EFFECT_DEAF = 16; +const int NO_EFFECT_BLINDNESS = 32; +const int NO_EFFECT_SILENCE = 64; +const int NO_EFFECT_NEGATIVELEVEL = 128; +const int NO_EFFECT_DAZED = 256; +const int NO_EFFECT_FRIGHTENED = 512; +const int NO_EFFECT_CONFUSED = 1024; +const int NO_EFFECT_CHARMED = 2048; +const int NO_EFFECT_SLEEP = 4096; +const int NO_EFFECT_STUNNED = 8192; +const int NO_EFFECT_DOMINATED = 16384; +const int NO_EFFECT_PETRIFY = 32768; +const int NO_EFFECT_PARALYZE = 65536; + +//spell level cut offs +const int NO_LVL8_MIN_LVL = 24; +const int NO_LVL7_MIN_LVL = 21; +const int NO_LVL6_MIN_LVL = 18; +const int NO_LVL5_MIN_LVL = 15; +const int NO_LVL4_MIN_LVL = 12; +const int NO_LVL3_MIN_LVL = 9; +const int NO_LVL2_MIN_LVL = 6; +const int NO_LVL1_MIN_LVL = 3; + +//associate orders +const int NO_ORDER_ATTACK = 1; +const int NO_ORDER_FOLLOW = 2; +const int NO_ORDER_GUARD = 4; +const int NO_ORDER_HEAL = 8; +const int NO_ORDER_STANDGROUND = 16; + +//voice chat defines +const int NO_VC_DEFAULT = 1000; +const int NO_VC_MELEE = 1001; +const int NO_VC_RANGED = 1003; +const int NO_VC_MELEEASSIST = 1004; + +//perception types +const int NO_PERCEPTION_SEEN = 1; +const int NO_PERCEPTION_HEARD = 2; +const int NO_PERCEPTION_VANISHED = 4; + +//special attack minimum hit dice ratios +const float NO_THRESH_SMITE = 0.75; +const float NO_THRESH_STUNNING_FIST = 0.5; +const float NO_THRESH_QUIVERING_PALM = 0.75; +const float NO_THRESH_ARROW_SLAYING = 0.75; +const float NO_THRESH_KI_DAMAGE = 0.5; + +//illithid abilities +const int CODI_MIND_BLAST = 1522; +const int CODI_BRAIN_EXTRACT = 1523; + +//beholder constants +const int BEHOLDER_MAX_RAYS = 10; +const int SPELL_BEHRAY_FINGER_OF_DEATH = 776; +const int SPELL_BEHRAY_TELEKINESIS = 777; +const int SPELL_BEHRAY_FLESH_TO_STONE = 778; +const int SPELL_BEHRAY_CHARM = 779; +const int SPELL_BEHRAY_SLOW = 780; +const int SPELL_BEHRAY_INFLICT_WOUNDS = 783; +const int SPELL_BEHRAY_FEAR = 784; +const int SPELL_BEH_ANTIMAGIC_CONE = 727; + +//missing epic spell definition +const int SPELL_EPIC_WARDING = 695; + +//miscellaneous missing constants +const int SPELLABILITY_DRAGON_BREATH_RDD = 690; +const int SPELLABILITY_DRAGON_BREATH_PRISMATIC = 771; +const int SPELLABILITY_DEFLECTING_FORCE = 774; + +//string constants +const string s_BEHOLDER_CENTRAL_EYE_FLAG = "#BEHCENEYE"; + +#include "no_lib_data" + +//Master prototype list + +// NO_LIB_ACTIONS +// support functions +void NO_ActionCastSpellAtLocation( int iSpell, location lTargetLocation, int iMetaMagic=METAMAGIC_ANY, int iCheat=FALSE, int iProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int iInstantSpell=FALSE, int iDefensive=TRUE ); +void NO_ActionCastSpellAtObject( int iSpell, object oTarget, int iMetaMagic=METAMAGIC_ANY, int iCheat=FALSE, int iDomainLevel=0, int iProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int iInstantSpell=FALSE, int iDefensive=TRUE ); +void NO_ActionUseTalentAtLocation( talent tChosenTalent, location lTargetLocation, int iDefensive=TRUE ); +void NO_ActionUseTalentOnObject( talent tChosenTalent, object oTarget, int iDefensive=TRUE ); +void ActivateCombatMode( int iMode=0, object oE=OBJECT_SELF ); +void DeactivateCombatModes( int iException=0, object oE=OBJECT_SELF ); +int DoHideInPlainSight( object oE=OBJECT_SELF ); +void DoFireBeholderRay( int iS, object oT ); +void DoMoveToLocation( location lDest, int bRun=FALSE ); +void DoMoveToObject( object oDest, int bRun=FALSE, float fDist=1.0f ); +void DoTeleport( location lLoc ); +object GetTarget(); +float DotProduct( vector v1, vector v2 ); +location GetFlankLoc( object oT, location lL ); +void DoEquipMelee( object oT ); +talent GetTalentSpell( int iCat, int iD ); +void DoFightBroadcast(); +int GetTimeSinceLastCombat(); +void DoConditionalRestart( float fT=6.0 ); +void DoQueueShutdown( float fT=0.0 ); +void DoQueueCombat( float fD=6.0, float fT=6.0 ); +void InitCombat( object oE=OBJECT_INVALID ); +void DoVoiceChat( int iV=-1 ); +void DoMainCombatLoop(); +void DoCombat(); +// action functions +int DoAttackMelee( object oT=OBJECT_INVALID ); +int DoAttackRanged( object oT=OBJECT_INVALID ); +int DoCounterSpell( object oT=OBJECT_INVALID ); +int DoEvacAOE(); +int DoRegroup( object oT=OBJECT_INVALID ); +int DoDefendSelf(); +int DoDefendSingle( object oT=OBJECT_INVALID ); +int DoEnhanceSelf(); +int DoEnhanceSingle( object oT=OBJECT_INVALID ); +int DoSpellHelp( object oT=OBJECT_INVALID ); +int DoSpellHeal( object oT=OBJECT_INVALID ); +int DoSpellRaise( object oT=OBJECT_INVALID ); +int DoSpellBreach( object oT=OBJECT_INVALID ); +int DoSpellDirect( object oT=OBJECT_INVALID ); +int DoTouch( object oT=OBJECT_INVALID ); +int DoSpellArea(); +int DoSpellSummon(); +int DoSpellCharm(); +int DoFeatEnhance(); +int DoAvoidMelee(); +int DoTimeStop(); +int DoVision(); +int DoBreathWeapon(); +int DoTurning(); +int DoSpellCone(); +int DoHealSelf(); +int DoSpellGroupEnhance(); +int DoSpellGroupHeal(); +int DoDispelPersAOE(); +int DoDispelSingle(); +int DoDismissal(); +int DoFastBuffs(); +int DoMeleeAssist(); +int DoFlank( object oE=OBJECT_INVALID ); +int DoMindBlast(); +int DoBrainExtraction(); +int DoAvoidEnemies(); +int DoGrenade(); +int DoBeholderRays(); +int DoBeholderCentralEye(); + +// NO_LIB_ANALYSIS +int GetAOEThreat( object oArea, object oEnt=OBJECT_SELF ); +int GetAOECount( float fRad=10.0f, object oEnt=OBJECT_SELF ); +vector GetAOEVector( float fRad=10.0f, object oEnt=OBJECT_SELF ); +int GetHostileAOECount( float fRad=10.0f, object oEnt=OBJECT_SELF ); +vector GetHostileAOEVector( float fRad=10.0f, object oEnt=OBJECT_SELF ); +vector GetAOEEvacVector( vector vS, object oEnt=OBJECT_SELF ); +object GetMostDamagedAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ); +object GetLowestHPAlly( float fRad=15.0, int iLim=0, object oEnt=OBJECT_SELF, int iSee=FALSE ); +object GetLowestHPAllyNoHealer( float fRad=15.0, int iLim=0, object oEnt=OBJECT_SELF, int iSee=FALSE, int iLive=TRUE ); +object GetNearestDeadAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ); +object GetNearestDeadAllyNoRaiser( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ); +object GetNearestPetrifiedAllyNoHelper( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ); +int GetEffectsOnObject( object oEnt=OBJECT_SELF ); +object GetMostHamperedAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ); +vector GetAreaTarget( int iS, float fRad, float fMinRad=7.5, float fMaxRad=30.0, int iEffChk=TRUE, object oCaster=OBJECT_SELF ); +vector GetFriendlyAreaTarget( float fRad, int iSpell=0, int iType=0, object oCaster=OBJECT_SELF ); +int CanAct( object oSelf=OBJECT_SELF ); +int GetIsWeapon( object oWeapon ); +int GetIsLightWeapon( object oWeapon, int iCanBeInvalid=FALSE ); +int GetIsDoubleWeapon( object oWeapon ); +int GetCasterCount( float fRad=5.0, object oEnt=OBJECT_SELF ); +int GetAttackerCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetHostileCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetOmniscientHostileCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetAllyCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetAttackerHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetHostileHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +int GetAllyHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ); +vector GetHostileVector( float fRad=10.0f, object oEnt=OBJECT_SELF ); +vector GetHostileEvacVector( vector vS, object oEnt=OBJECT_SELF ); +int GetIsCaster( object oEnt=OBJECT_SELF ); +int DoAbilityCheck( int iAbil, int iDC, object oEnt=OBJECT_SELF ); +int DoCombatKnowledgeCheck( int iBAB=FALSE, int iDC=10, object oE=OBJECT_SELF ); +float GetFriendFoeRatio( location lLoc, float fRad, object oEnt=OBJECT_SELF ); +float GetFriendFoeTolerance( object oEnt=OBJECT_SELF ); +object GetNearestEnemyCaster( int iMaxLvl=20, int iMinLvl=1, object oEnt=OBJECT_SELF ); +int GetAverageEnemyLevel( float fRad=60.0, object oEnt=OBJECT_SELF ); +int GetSafeAverageEnemyLevel( float fRad=40.0, object oEnt=OBJECT_SELF ); +object GetLeastMagicDefendedEnemy( float fRad=5.0, object oEnt=OBJECT_SELF ); +vector GetTurningVector( object oEnt=OBJECT_SELF ); +int GetIsValidTurnTarget( object oT, int iL=0, object oEnt=OBJECT_SELF ); +int GetPotionHealAmount( object oP ); +int GetTalentPotionHealAmount( talent tP ); +vector GetAreaHealTarget( float fRad=0.0, int iH=0, object oEnt=OBJECT_SELF ); +float GetAllyDamageStats( location lT, float fRad=0.0, object oEnt=OBJECT_SELF ); +object GetMostBuffedEnemy( float fRad=10.0, object oEnt=OBJECT_SELF ); +object GetLeastBuffedAlly( float fRad=10.0, int iMelee=FALSE, object oEnt=OBJECT_SELF ); +int GetIsBuffEffect( effect eT ); +int GetAverageEffectCasterLevel( object oT=OBJECT_SELF ); +object GetStrongestEnemySummonedAssociateOwner( float fRad=10.0, object oEnt=OBJECT_SELF ); +vector GetEnemySummonedAssociatesVector( float fRad=10.0, object oEnt=OBJECT_SELF ); +vector GetEnemyPlanarVector( float fRad=10.0, object oEnt=OBJECT_SELF ); +object GetVisionDeprived( float fRad=10.0, object oT=OBJECT_SELF ); +object GetLeastDefendedAlly( float fRad=10.0, object oC=OBJECT_SELF ); +int GetHasRangedCapability( object oEnt=OBJECT_SELF ); +int GetIsRangedWeapon( object oW=OBJECT_INVALID ); +object GetMostDistantEnemy( float fR=30.0, int iS=TRUE, object oC=OBJECT_SELF ); +vector GetSaves( object oT=OBJECT_SELF ); +vector GetBaseSavesByClass( int iC, int iL ); +vector GetAverageEnemySaveInArea( vector vP, float fR=5.0, object oC=OBJECT_SELF ); +int IsImmuneToPetrification(object oCreature); +object GetNearestAddledEnemy( float fRange=10.0, object oE=OBJECT_SELF ); +object GetNearestAddledEnemyNoExtractor( float fRange=10.0, object oE=OBJECT_SELF ); +int IsBrainExtractable( object oT ); +int GetCreatureAttackBonus( object oC=OBJECT_SELF ); +int GetGrappleBonus( object oC=OBJECT_SELF ); +int GetIsMaster( object oM, object oE=OBJECT_SELF ); +int GetIsPerceived( object oP, int iP=0, object oE=OBJECT_SELF ); +object GetNearestPerceivedCreature( int iP=NO_PERCEPTION_SEEN, object oE=OBJECT_SELF ); +object GetNearestActiveAlly( object oE=OBJECT_SELF ); +object GetFurthestActiveAlly( float fD=50.0, object oE=OBJECT_SELF ); +int EstimateAttackBonus( object oC=OBJECT_SELF ); +int GetDualWieldingPenalty( object oC=OBJECT_SELF, object oR=OBJECT_INVALID, object oL=OBJECT_INVALID ); +int GetHasWeaponFocus( object oR, object oC=OBJECT_SELF ); +int GetIsArmed( object oEnt=OBJECT_SELF ); +int GetRelativeEnemyWeaponSize( object oT, object oEnt=OBJECT_SELF ); +int GetWeaponSize( object oEnt=OBJECT_SELF ); +float GetAverageDistanceToEnemy( float fRad=60.0, object oEnt=OBJECT_SELF ); +int GetCombatModeModifier( int iMode=0 ); +int GetCombatConcentration( object oE=OBJECT_SELF ); +int GetTurningLevel( object oC=OBJECT_SELF ); +void SetIsCentralEyeOpen( int iS=FALSE, object oB=OBJECT_SELF ); +int GetIsCentralEyeOpen( object oB=OBJECT_SELF ); + +// NO_LIB_FEAT +int GetEnhanceFeat( object oEnt=OBJECT_SELF ); +int GetGroupEnhanceFeat( object oEnt=OBJECT_SELF ); +float GetGroupEnhanceFeatRadius( int iFeat ); + +// NO_LIB_MAGIC +int GetBestMagicDefenseSelf( object oEnt=OBJECT_SELF ); +int GetBestMagicDefenseSingle( object oEnt=OBJECT_SELF, object oC=OBJECT_SELF ); +int GetBestPhysDefenseSelf( object oEnt=OBJECT_SELF ); +int GetBestPhysDefenseSingle( object oEnt=OBJECT_SELF, object oC=OBJECT_SELF ); +int GetBestGenericProtection( object oEnt=OBJECT_SELF ); +struct sSpellDefStatus EvaluateSpellDefenses( object oTarget=OBJECT_SELF ); +struct sPhysDefStatus EvaluatePhysicalDefenses( object oTarget=OBJECT_SELF ); +int GetBestHeal( object oEnt=OBJECT_SELF, int iMin=10 ); +int GetGroupHealSpell( int iMinLvl=0, object oCaster=OBJECT_SELF ); +int GetGroupHealSpellAmount( int iH=0, object oCaster=OBJECT_SELF ); +float GetGroupHealSpellRadius( int iH=0 ); +int GetBestRaise( int iCombat=FALSE ); +int GetHasHealingAbility( object oCaster=OBJECT_SELF ); +int GetHasRaisingAbility( object oCaster=OBJECT_SELF ); +int GetHasHelpingAbility( object oCaster=OBJECT_SELF ); +int GetBestHelp( object oEnt, object oCaster=OBJECT_SELF ); +int GetAreaSpell( vector vS, int iDisc=FALSE, int iMinLvl=0, float fR=40.0, object oCaster=OBJECT_SELF ); +float GetAreaSpellRadius( int iSpell ); +int GetDirectSpell( object oT, int iDisc=FALSE, int iMinLvl=0, object oCaster=OBJECT_SELF ); +int GetTouchSpell( object oT, int iMinLvl=0, object oCaster=OBJECT_SELF ); +int GetSummonSpell( int iMinLvl=1, object oCaster=OBJECT_SELF ); +int GetEnhanceSpellSelf( int iMinLvl=1, object oCaster=OBJECT_SELF ); +int GetEnhanceSpellSingle( int iMinLvl=1, object oEnt=OBJECT_SELF, object oCaster=OBJECT_SELF ); +int GetBestBreach( int iLim=30, object oEnt=OBJECT_SELF ); +int GetBestDispel( int iCLvl=20, int iDLvl=20, object oEnt=OBJECT_SELF ); +int GetIsDiscriminantSpell( int iSpell ); +int GetBreathWeapon( object oEnt=OBJECT_SELF ); +int GetConeSpell( int iMinLvl = 1, object oCaster=OBJECT_SELF ); +int GetGroupEnhanceSpell( int iMinLvl = 1, object oCaster=OBJECT_SELF ); +float GetGroupEnhanceSpellRadius( int iSpell ); +int GetDispelSpell( object oEnt=OBJECT_SELF ); +int GetMaxDispelCasterLevel( object oEnt=OBJECT_SELF ); +int GetVisionSpellNeeded( object oS=OBJECT_SELF, object oC=OBJECT_SELF ); +int GetHasVisionSpells( object oC=OBJECT_SELF ); +int GenerateFastBuffList( object oC=OBJECT_SELF ); +float GetSpellRange( int iS ); +int IsCone( int iS=0 ); +int IsDragonBreath( int iS=0 ); +int IsHowl( int iS=0 ); +int IsPulse( int iS=0 ); +void InitializeBeholderRaySelection( object oB=OBJECT_SELF ); +void ClearBeholderRaySelection( object oB=OBJECT_SELF ); +void RemoveBeholderRayFromSelection( int iS=0, object oB=OBJECT_SELF ); +int MatchRayToTarget( object oT, object oB=OBJECT_SELF ); + +// NO_LIB_MELEE +int GetBestMeleeSpecial( object oTarget, int iPenalty=0, int iChance=50, object oEnt=OBJECT_SELF ); +int SelectMeleeCombatModes( object oT, int iC=50, object oEnt=OBJECT_SELF ); + +// NO_LIB_RANGED +int GetBestRangedSpecial( object oTarget, int iPenalty=0, int iChance=50, object oEnt=OBJECT_SELF ); +int SelectRangedCombatModes( object oT, int iC=50, object oEnt=OBJECT_SELF ); + +// NO_LIB_PRIORITY +void AddBehaviour( string sB, int iC, object oEnt=OBJECT_SELF ); +string GetPriority( int iP=1, object oEnt=OBJECT_SELF ); +int GetPriorityChance( int iP=1, object oEnt=OBJECT_SELF ); +void SetVoiceChat( int iV, int iC, object oE=OBJECT_SELF ); +float GetFollowDist( object oE=OBJECT_SELF ); +void SetPerceptionRange( int iP, float fP=50.0, object oE=OBJECT_SELF ); +void SetPerceptionRanges( float fS=50.0, float fH=50.0, float fV=50.0, object oE=OBJECT_SELF ); +float GetPerceptionRange( int iP, object oE=OBJECT_SELF ); +void SetReadyStatus( int iS=1, object oE=OBJECT_SELF ); +int IsReadyToAct( object oE=OBJECT_SELF ); +int ShortAction( object oE=OBJECT_SELF ); +int IsActive( object oE=OBJECT_SELF ); +void SetActive( object oE=OBJECT_SELF ); +void SetIsActive( int iA=TRUE, object oE=OBJECT_SELF ); +float GetResponseRange( int iT, object oE=OBJECT_SELF ); +void SetResponseRange( int iT, float fR=50.0, object oE=OBJECT_SELF ); +void SetIsTeleporter( object oE=OBJECT_SELF ); +int GetIsTeleporter( object oE=OBJECT_SELF ); +void SetIsFastBuffer( int iS, object oE=OBJECT_SELF ); +int GetIsFastBuffer( object oE=OBJECT_SELF ); +void SetIsFastBuffed( int iS, object oE=OBJECT_SELF ); +int GetIsFastBuffed( object oE=OBJECT_SELF ); +void AddFastBuff( int iS, object oE=OBJECT_SELF ); +int CountFastBuffs( object oE=OBJECT_SELF ); +void SetLastAction( string sA, object oE=OBJECT_SELF ); +string GetLastAction( object oE=OBJECT_SELF ); +void SetLastActionTimestamp( object oE=OBJECT_SELF ); +int GetLastActionTimestamp( object oE=OBJECT_SELF ); +void SetCorpseDelay( int iT=60, object oC=OBJECT_SELF ); +void SetIsFlier( int iF=FALSE, object oF=OBJECT_SELF ); +int GetIsFlier( object oF=OBJECT_SELF ); + +// NO_LIB_BIO +void SetSpawnInCondition(int nCondition, int bValid = TRUE); +int GetSpawnInCondition(int nCondition); +void SetSpawnInLocals(int nCondition); +void SetListeningPatterns(); +void WalkWayPoints(int nRun = FALSE, float fPause = 1.0); +void RunNextCircuit(int nRun = FALSE, float fPause = 1.0); +void RunCircuit(int nTens, int nNum, int nRun = FALSE, float fPause = 1.0); +int CheckWayPoints(object oWalker = OBJECT_SELF); +int GetIsPostOrWalking(object oWalker = OBJECT_SELF); +//void SetBehaviorState(int nCondition, int bValid = TRUE); +//int GetBehaviorState(int nCondition); +void PlayMobileAmbientAnimations(); +//void PlayImmobileAmbientAnimations(); +void DetermineSpecialBehavior(object oIntruder = OBJECT_INVALID); +void ClearActions(int nClearConstant=0, int bClearCombat=FALSE); +//SoU animation craziness +void AnimDebug(string sMsg); +int GetAnimationCondition(int nCondition, object oCreature=OBJECT_SELF); +void SetAnimationCondition(int nCondition, int bValid=TRUE, object oCreature=OBJECT_SELF); +int GetIsBusyWithAnimation(object oCreature); +object GetRandomFriend(float fMaxDistance); +object GetRandomObjectByTag(string sTag, float fMaxDistance); +object GetRandomObjectByType(int nObjType, float fMaxDistance); +object GetRandomStop(float fMaxDistance); +void SetCreatureHomeWaypoint(); +object GetCreatureHomeWaypoint(); +void SetCurrentFriend(object oFriend); +object GetCurrentFriend(); +void SetCurrentInteractionTarget(object oTarget); +object GetCurrentInteractionTarget(); +void CheckIsCivilized(); +void CheckCurrentModes(); +int CheckIsAnimActive(object oCreature); +int CheckCurrentAction(); +void AnimInitialization(); +void PlayMobileAmbientAnimations_NonAvian(); +void PlayMobileAmbientAnimations_Avian(); +void PlayImmobileAmbientAnimations(); +void AnimActionPlayRandomImmobile(); +void AnimActionPlayRandomCloseRange(); +void AnimActionPlayRandomMobile(); +void AnimActionPlayRandomUncivilized(); +void AnimActionStartInteracting(object oPlaceable); +void AnimActionStopInteracting(); +void AnimActionStartTalking(object oFriend, int nHDiff=0); +void AnimActionStopTalking(object oFriend, int nHDiff=0); +void AnimActionPlayRandomGreeting(int nHDiff=0); +void AnimActionPlayRandomGoodbye(int nHDiff); +void AnimActionRandomMoveAway(object oSource, float fDistance); +void AnimActionShakeHead(); +void AnimActionLookAround(); +void AnimActionTurnAround(); +void AnimActionGoThroughDoor(object oDoor); +int AnimActionCloseRandomDoor(); +int AnimActionSitInChair(float fMaxDistance); +int AnimActionGetUpFromChair(); +int AnimActionGoInside(); +int AnimActionGoOutside(); +int AnimActionGoToStop(float fMaxDistance); +int AnimActionFindFriend(float fMaxDistance); +int AnimActionFindPlaceable(float fMaxDistance); +int AnimActionRest(); +int AnimActionGoHome(); +int AnimActionLeaveHome(); +int AnimActionChallengeIntruder(); +void AnimActionPlayRandomInteractAnimation(object oPlaceable); +void AnimActionPlayRandomTalkAnimation(int nHDiff); +void AnimActionPlayRandomBasicAnimation(); +void AnimActionPlayRandomAnimation(); \ No newline at end of file diff --git a/_module/nss/no_lib_actions.nss b/_module/nss/no_lib_actions.nss new file mode 100644 index 00000000..6f6e1011 --- /dev/null +++ b/_module/nss/no_lib_actions.nss @@ -0,0 +1,2899 @@ +#include "no_inc_ptypes" + +//support functions +void NO_ActionCastSpellAtLocation( int iSpell, location lTargetLocation, int iMetaMagic=METAMAGIC_ANY, int iCheat=FALSE, int iProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int iInstantSpell=FALSE, int iDefensive=TRUE ) +{ + int iLevel = 14; + int iConc = GetCombatConcentration(); + int iDefCast = FALSE; + + if ( iDefensive == TRUE && iConc >= iLevel && GetHostileCount( 5.0 ) > 0 ) + { + iDefCast = TRUE; + } + SetActionMode( OBJECT_SELF, ACTION_MODE_DEFENSIVE_CAST, iDefCast ); + ActionCastSpellAtLocation( iSpell, lTargetLocation, iMetaMagic, iCheat, iProjectilePathType, iInstantSpell ); +} + +void NO_ActionCastSpellAtObject( int iSpell, object oTarget, int iMetaMagic=METAMAGIC_ANY, int iCheat=FALSE, int iDomainLevel=0, int iProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int iInstantSpell=FALSE, int iDefensive=TRUE ) +{ + int iLevel = 14; + int iConc = GetCombatConcentration(); + int iDefCast = FALSE; + + if ( iDefensive == TRUE && iConc >= iLevel && GetHostileCount( 5.0 ) > 0 ) + { + iDefCast = TRUE; + } + SetActionMode( OBJECT_SELF, ACTION_MODE_DEFENSIVE_CAST, iDefCast ); + ActionCastSpellAtObject( iSpell, oTarget, iMetaMagic, iCheat, iDomainLevel, iProjectilePathType, iInstantSpell ); +} + +void NO_ActionUseTalentAtLocation( talent tChosenTalent, location lTargetLocation, int iDefensive=TRUE ) +{ + int iLevel = 14; + int iConc = GetCombatConcentration(); + int iDefCast = FALSE; + + if ( iDefensive == TRUE && iConc >= iLevel && GetHostileCount( 5.0 ) > 0 ) + { + iDefCast = TRUE; + } + SetActionMode( OBJECT_SELF, ACTION_MODE_DEFENSIVE_CAST, iDefCast ); + ActionUseTalentAtLocation( tChosenTalent, lTargetLocation ); +} + +void NO_ActionUseTalentOnObject( talent tChosenTalent, object oTarget, int iDefensive=TRUE ) +{ + int iLevel = 14; + int iConc = GetCombatConcentration(); + int iDefCast = FALSE; + + if ( iDefensive == TRUE && iConc >= iLevel && GetHostileCount( 5.0 ) > 0 ) + { + iDefCast = TRUE; + } + SetActionMode( OBJECT_SELF, ACTION_MODE_DEFENSIVE_CAST, iDefCast ); + ActionUseTalentOnObject( tChosenTalent, oTarget ); +} + +void ActivateCombatMode( int iMode=0, object oE=OBJECT_SELF ) +{ + int iM = 0; + + switch( iMode ) + { + case FEAT_DIRTY_FIGHTING: + iM = ACTION_MODE_DIRTY_FIGHTING; + break; + case FEAT_EXPERTISE: + iM = ACTION_MODE_EXPERTISE; + break; + case FEAT_IMPROVED_EXPERTISE: + iM = ACTION_MODE_IMPROVED_EXPERTISE; + break; + case FEAT_FLURRY_OF_BLOWS: + iM = ACTION_MODE_FLURRY_OF_BLOWS; + break; + case FEAT_POWER_ATTACK: + iM = ACTION_MODE_POWER_ATTACK; + break; + case FEAT_IMPROVED_POWER_ATTACK: + iM = ACTION_MODE_IMPROVED_POWER_ATTACK; + break; + case FEAT_RAPID_SHOT: + iM = ACTION_MODE_RAPID_SHOT; + break; + } + if ( GetActionMode( oE, iM ) == FALSE ) + { + SetActionMode( oE, iM, TRUE ); + } +} + +void DeactivateCombatModes( int iException=0, object oE=OBJECT_SELF ) +{ + if ( iException != FEAT_DIRTY_FIGHTING && GetActionMode( oE, ACTION_MODE_DIRTY_FIGHTING ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_DIRTY_FIGHTING, FALSE ); + } + if ( iException != FEAT_EXPERTISE && GetActionMode( oE, ACTION_MODE_EXPERTISE ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_EXPERTISE, FALSE ); + } + if ( iException != FEAT_IMPROVED_EXPERTISE && GetActionMode( oE, ACTION_MODE_IMPROVED_EXPERTISE ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_IMPROVED_EXPERTISE, FALSE ); + } + if ( iException != FEAT_FLURRY_OF_BLOWS && GetActionMode( oE, ACTION_MODE_FLURRY_OF_BLOWS ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_FLURRY_OF_BLOWS, FALSE ); + } + if ( iException != FEAT_POWER_ATTACK && GetActionMode( oE, ACTION_MODE_POWER_ATTACK ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_POWER_ATTACK, FALSE ); + } + if ( iException != FEAT_IMPROVED_POWER_ATTACK && GetActionMode( oE, ACTION_MODE_IMPROVED_POWER_ATTACK ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_IMPROVED_POWER_ATTACK, FALSE ); + } + if ( iException != FEAT_RAPID_SHOT && GetActionMode( oE, ACTION_MODE_RAPID_SHOT ) == TRUE ) + { + SetActionMode( oE, ACTION_MODE_RAPID_SHOT, FALSE ); + } +} + +int DoHideInPlainSight( object oE=OBJECT_SELF ) +{ + if ( GetHasFeat( FEAT_HIDE_IN_PLAIN_SIGHT, oE ) ) + { + SetActionMode( oE, ACTION_MODE_STEALTH, TRUE ); + return TRUE; + } + return FALSE; +} + +void DoFireBeholderRay( int iS, object oT ) +{ + if ( iS < 776 || iS > 784 || iS == 781 || iS == 782 ) //not a valid beholder ray spell definition + { + return; + } + + if ( TouchAttackRanged( oT ) == FALSE ) + { + vector vT; + location lT; + int iF = 785 + Random( 3 ); + + vT = GetPosition( oT ) + 1.0 * AngleToVector( IntToFloat( Random( 360 ) ) ); + lT = Location( GetArea( OBJECT_SELF ), vT, GetFacing( OBJECT_SELF ) ); + //ActionCastFakeSpellAtLocation( iS, lT ); + ActionCastSpellAtLocation( iF, lT, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE ); + } + else + { + ActionCastSpellAtObject( iS, oT, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE ); + } +} + +void DoMoveToLocation( location lDest, int bRun=FALSE ) +{ + effect eVis; + float fD = 4.0; + float fMinDist = 15.0; + + //activate hide in plain sight while moving + DoHideInPlainSight(); + + if ( GetLocalInt( OBJECT_SELF, "TELEPORTER" ) && GetDistanceBetweenLocations( GetLocation( OBJECT_SELF ), lDest ) > fMinDist ) + { + DoTeleport( lDest ); + } + else if ( GetLocalInt( OBJECT_SELF, "FLIER" ) && GetDistanceBetweenLocations( GetLocation( OBJECT_SELF ), lDest ) > fMinDist ) + { + if ( !GetLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ) ) + { + SetLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL", 1 ); + DelayCommand( fD + 0.5, DeleteLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ) ); + ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectDisappearAppear( lDest ), OBJECT_SELF, fD ); + } + } + else + { + ActionMoveToLocation( lDest, bRun ); + } +} + +void DoMoveToObject( object oDest, int bRun=FALSE, float fDist=1.0f ) +{ + location lDest; + vector vT; + float fD = 4.0; + float fMinDist = 15.0; + + //activate hide in plain sight while moving + DoHideInPlainSight(); + + if ( GetIsObjectValid( oDest ) ) + { + if ( GetLocalInt( OBJECT_SELF, "TELEPORTER" ) && GetDistanceBetweenLocations( GetLocation( OBJECT_SELF ), GetLocation( oDest ) ) > fMinDist ) + { + vT = GetPosition( oDest ) + fDist * VectorNormalize( GetPosition( OBJECT_SELF ) - GetPosition( oDest ) ); + lDest = Location( GetArea( oDest ), vT, VectorToAngle( GetPosition( oDest ) - vT ) ); + DoTeleport( lDest ); + } + else if ( GetLocalInt( OBJECT_SELF, "FLIER" ) && GetDistanceBetweenLocations( GetLocation( OBJECT_SELF ), GetLocation( oDest ) ) > fMinDist ) + { + if ( !GetLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ) ) + { + vT = GetPosition( oDest ) + fDist * VectorNormalize( GetPosition( OBJECT_SELF ) - GetPosition( oDest ) ); + lDest = Location( GetArea( oDest ), vT, VectorToAngle( GetPosition( oDest ) - vT ) ); + SetLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL", 1 ); + DelayCommand( fD + 0.5, DeleteLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ) ); + ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectDisappearAppear( lDest ), OBJECT_SELF, fD ); + } + } + else + { + ActionMoveToObject( oDest, bRun, fDist ); + } + } +} + +void DoTeleport( location lLoc ) +{ + effect eVis = EffectVisualEffect( VFX_IMP_GLOBE_USE ); + + ActionCastFakeSpellAtObject( SPELLABILITY_SUMMON_CELESTIAL, OBJECT_SELF ); + ActionDoCommand( ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eVis, GetLocation( OBJECT_SELF ) ) ); + ActionDoCommand( ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eVis, lLoc ) ); + ActionDoCommand( ActionJumpToLocation( lLoc ) ); +} + +object GetTarget() +{ + object oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + object oH = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE ); + object oT = OBJECT_INVALID; + + if ( !GetIsPerceived( oS, NO_PERCEPTION_SEEN ) ) + { + oS = OBJECT_INVALID; + } + if ( !GetIsPerceived( oH, NO_PERCEPTION_HEARD ) ) + { + oH = OBJECT_INVALID; + } + + if ( GetIsObjectValid( oS ) && GetIsObjectValid( oH ) ) + { + //target the closer of the two + oT = GetDistanceBetween( OBJECT_SELF, oH ) < GetDistanceBetween( OBJECT_SELF, oS ) ? oH : oS; + } + else if ( GetIsObjectValid( oS ) ) + { + //oH is invalid + oT = oS; + } + else + { + //oS is invalid + oT = oH; + } + return oT; +} + +float DotProduct( vector v1, vector v2 ) +{ + float fDP; + + fDP = v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; + + return fDP; +} + +location GetFlankLoc( object oT, location lL ) +{ + vector vU; + vector vT; + vector vM; + location lF; + + if ( GetIsObjectValid( oT ) ) + { + vT = GetPosition( oT ) - GetPosition( OBJECT_SELF ); + } + else + { + vT = GetPositionFromLocation( lL ) - GetPosition( OBJECT_SELF ); + } + vM = VectorNormalize( AngleToVector( VectorToAngle( vT ) - 45.0 + 90.0 * IntToFloat( Random( 2 ) ) ) ); + vM = DotProduct( vT, vM ) * VectorNormalize( vM ) + GetPosition( OBJECT_SELF ); + lF = Location( GetArea( oT ), vM, VectorToAngle( vT - vM ) ); + + return lF; +} + +void DoEquipMelee( object oT ) +{ + object oL = GetLocalObject( OBJECT_SELF, "LHAND" ); + object oR = GetLocalObject( OBJECT_SELF, "RHAND" ); + + if ( GetIsObjectValid( oR ) || GetIsObjectValid( oL ) ) + { + if ( GetIsObjectValid( oR ) ) + { + if ( !GetIsObjectValid( GetItemPossessor( oR ) ) ) + { + //weapon is on the ground after being disarmed? + //try to pick it up + ActionPickUpItem( oR ); + ActionEquipItem( oR, INVENTORY_SLOT_RIGHTHAND ); + } + else if ( GetItemPossessor( oR ) == OBJECT_SELF && GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ) != oR ) + { + ActionEquipItem( oR, INVENTORY_SLOT_RIGHTHAND ); + } + } + if ( GetIsObjectValid( oL ) ) + { + if ( !GetIsObjectValid( GetItemPossessor( oL ) ) ) + { + //weapon is on the ground after being disarmed? + //try to pick it up + ActionPickUpItem( oL ); + ActionEquipItem( oL, INVENTORY_SLOT_LEFTHAND ); + } + else if ( GetItemPossessor( oL ) == OBJECT_SELF && GetItemInSlot( INVENTORY_SLOT_LEFTHAND ) != oL ) + { + ActionEquipItem( oL, INVENTORY_SLOT_LEFTHAND ); + } + } + } + else if ( GetIsObjectValid( oT ) ) + { + //nothing stored + ActionEquipMostDamagingMelee( oT ); + } + else + { + ActionEquipMostDamagingMelee(); + } +} + +talent GetTalentSpell( int iCat, int iD ) +{ + int iCR = 21; + talent tT; + talent iT; //reserve for invalid talent return + + while ( --iCR ) + { + tT = GetCreatureTalentBest( iCat, iCR ); + if ( ( GetIsTalentValid( tT ) && GetIdFromTalent( tT ) == iD ) || !GetIsTalentValid( tT ) ) + { + break; + } + } + if ( GetIsTalentValid( tT ) && GetIdFromTalent( tT ) == iD ) + { + return tT; + } + return iT; +} + + +void DoFightBroadcast() +{ + //broadcast fight "noise" at most once a second + //respect silence spell + int iDelay = 2; + int iTime = GetTimeSecond(); + int iLast = GetLocalInt( OBJECT_SELF, "#LASTCREBC" ); + int iS = iTime < iLast ? iTime + 60 : iTime; + int iVol = NO_CAN_USE_DM_CHANNEL ? TALKVOLUME_SILENT_SHOUT : TALKVOLUME_SILENT_TALK; + + //anti-spamloop delay + if ( iS - iLast >= iDelay ) + { + //only broadcast noise if silence is not in effect + if ( !( GetEffectsOnObject() & NO_EFFECT_SILENCE ) ) + { + SpeakString( "BC_FIGHTING", iVol ); + } + SetLocalInt( OBJECT_SELF, "#LASTCREBC", iTime ); + DeleteLocalInt( OBJECT_SELF, "#LASTREST" ); + } +} + +int GetTimeSinceLastCombat() +{ + int iTime = GetTimeSecond(); + int iLast = GetLocalInt( OBJECT_SELF, "#LASTCREBC" ); + int iS = iTime < iLast ? iTime + 60 : iTime; + int iT = iS - iLast; + + return iT; +} + +void DoConditionalRestart( float fT=6.0 ) +{ + DeleteLocalInt( OBJECT_SELF, "#RESTARTQUEUED" ); + if ( GetLocalInt( OBJECT_SELF, "#ACTIVE" ) && GetTimeSinceLastCombat() > FloatToInt( fT ) ) + { + ClearAllActions(); + DeleteLocalInt( OBJECT_SELF, "#COMBATQUEUED" ); + //SetReadyStatus(); + DelayCommand( 0.1, DoQueueCombat( 8.0, 8.0 ) ); + } +} + +void DoQueueShutdown( float fT=0.0 ) +{ + if ( !GetLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ) ) + { + SetLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN", 1 ); + DelayCommand( fT, ExecuteScript( "no_scr_shutdown", OBJECT_SELF ) ); + } +} + +void DoQueueCombat( float fD=6.0, float fT=6.0 ) +{ + if ( !GetLocalInt( OBJECT_SELF, "#ACTIVE" ) ) + { + SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + DelayCommand( 0.1, ClearAllActions() ); + } + if ( !GetLocalInt( OBJECT_SELF, "#COMBATQUEUED" ) ) + { + SetLocalInt( OBJECT_SELF, "#COMBATQUEUED", 1 ); + DelayCommand( 0.2, ActionDoCommand( DoCombat() ) ); + } + if ( !GetLocalInt( OBJECT_SELF, "#RESTARTQUEUED" ) ) + { + SetLocalInt( OBJECT_SELF, "#RESTARTQUEUED", 1 ); + DelayCommand( fD, DoConditionalRestart( fT ) ); + } +} + +void InitCombat( object oE=OBJECT_INVALID ) +{ + int iT = GetLastActionTimestamp(); + + if ( IsActive() == FALSE || GetCurrentAction() == ACTION_INVALID || iT > 8 ) + { + ClearAllActions(); + SetIsActive( TRUE ); + DoCombat(); + } +} + +void DoVoiceChat( int iV=-1 ) +{ + int iC = GetLocalInt( OBJECT_SELF, "#VCC_" + IntToString( iV ) ); + + if ( iC == -1 || !CanAct() ) + { + //do not do this voice chat + return; + } + if ( iC == 0 ) + { + //no specific setting for this voice chat, use default chance + iC = GetLocalInt( OBJECT_SELF, "#VCC" ); + } + if ( Random( 100 ) < iC ) + { + //don't bother talking to ourselves, look for a nearby friend + object oF = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE ); + if ( GetIsObjectValid( oF ) && GetDistanceBetween( OBJECT_SELF, oF ) < 50.0 ) + { + //there is a friendly nearby, do the voice chat + int iD = iV; + if ( iV == NO_VC_MELEE || iV == NO_VC_RANGED || iV == NO_VC_MELEEASSIST ) + { + //custom voice chat handling + iD = Random( 5 ); + switch( iD ) + { + case 1: iD = VOICE_CHAT_ATTACK; + case 2: iD = VOICE_CHAT_BATTLECRY1; + case 3: iD = VOICE_CHAT_BATTLECRY2; + case 4: iD = VOICE_CHAT_BATTLECRY3; + default: iD = VOICE_CHAT_TAUNT; + } + } + PlayVoiceChat( iD ); + } + } +} + +void DoMainCombatLoop() +{ + int iCnt = 1; + string sPri = GetPriority( iCnt ); + int iPri = GetPriorityChance( iCnt++ ); + + while ( sPri != "" ) + { + if ( sPri == "+ATKMELEE" && Random( 100 ) < iPri && DoAttackMelee() ) //atkmelee + { + //PrintString( "+ATKMELEE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+ATKRANGED" && Random( 100 ) < iPri && DoAttackRanged() ) //atkranged + { + //PrintString( "+ATKRANGED: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+COUNTERSPELL" && Random( 100 ) < iPri && DoCounterSpell() ) //counterspell + { + //PrintString( "+COUNTERSPELL: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+EVACAOE" && Random( 100 ) < iPri && DoEvacAOE() ) //evac AOEs + { + //PrintString( "+EVACAOE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+REGROUP" && Random( 100 ) < iPri && DoRegroup() ) //regroup with allies + { + //PrintString( "+REGROUP: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DEFSELF" && Random( 100 ) < iPri && DoDefendSelf() ) //apply defenses + { + //PrintString( "+DEFSELF: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DEFSING" && Random( 100 ) < iPri && DoDefendSingle() ) //apply defenses to single + { + //PrintString( "+DEFSING: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+ENHANCESELF" && Random( 100 ) < iPri && DoEnhanceSelf() ) //enhance self + { + //PrintString( "+ENHANCESELF: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+ENHANCESING" && Random( 100 ) < iPri && DoEnhanceSingle() ) //enhance single + { + //PrintString( "+ENHANCESING: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+HELP" && Random( 100 ) < iPri && DoSpellHelp() ) //remove afflictions + { + //PrintString( "+HELP: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+HEAL" && Random( 100 ) < iPri && DoSpellHeal() ) //heal + { + //PrintString( "+HEAL: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+RAISE" && Random( 100 ) < iPri && DoSpellRaise() ) //raise + { + //PrintString( "+RAISE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+BREACH" && Random( 100 ) < iPri && DoSpellBreach() ) //breach + { + //PrintString( "+BREACH: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DIRECT" && Random( 100 ) < iPri && DoSpellDirect() ) //direct attack spell + { + //PrintString( "+DIRECT: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+TOUCH" && Random( 100 ) < iPri && DoTouch() ) //touch attack spell + { + //PrintString( "+TOUCH: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+AREA" && Random( 100 ) < iPri && DoSpellArea() ) //area attack spell + { + //PrintString( "+AREA: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+SUMMON" && Random( 100 ) < iPri && DoSpellSummon() ) //summon help + { + //PrintString( "+SUMMON: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+FEATENHANCE" && Random( 100 ) < iPri && DoFeatEnhance() ) //enhance via feat + { + //PrintString( "+FEATENHANCE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+AVOIDMELEE" && Random( 100 ) < iPri && DoAvoidMelee() ) //avoid melee + { + //PrintString( "+AVOIDMELEE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+TIMESTOP" && Random( 100 ) < iPri && DoTimeStop() ) //time stop + { + //PrintString( "+TIMESTOP: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+VIS" && Random( 100 ) < iPri && DoVision() ) //vision + { + //PrintString( "+VIS: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+BREATH" && Random( 100 ) < iPri && DoBreathWeapon() ) //breathweapon + { + //PrintString( "+BREATH: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+TURN" && Random( 100 ) < iPri && DoTurning() ) //turn undead + { + //PrintString( "+TURN: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+HEALSELF" && Random( 100 ) < iPri && DoHealSelf() ) //heal self + { + //PrintString( "+HEALSELF: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+GROUPENHANCE" && Random( 100 ) < iPri && DoSpellGroupEnhance() ) //group enhance + { + //PrintString( "+GROUPENHANCE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DISPELAOE" && Random( 100 ) < iPri && DoDispelPersAOE() ) //dispel hostile AOEs + { + //PrintString( "+DISPELAOE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DISPEL" && Random( 100 ) < iPri && DoDispelSingle() ) //dispel buffs on single enemy + { + //PrintString( "+DISPEL: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+DISMISSAL" && Random( 100 ) < iPri && DoDismissal() ) //dismiss enemy summons + { + //PrintString( "+DISMISSAL: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+MELEEASSIST" && Random( 100 ) < iPri && DoMeleeAssist() ) //assist friends in melee + { + //PrintString( "+MELEEASSIST: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+FLANK" && Random( 100 ) < iPri && DoFlank() ) //flank enemy + { + //PrintString( "+FLANK: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+GROUPHEAL" && Random( 100 ) < iPri && DoSpellGroupHeal() ) //use area heals + { + //PrintString( "+GROUPHEAL: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+MINDBLAST" && Random( 100 ) < iPri && DoMindBlast() ) //use mind blast psionics + { + //PrintString( "+MINDBLAST: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+BRAINEXTRACT" && Random( 100 ) < iPri && DoBrainExtraction() ) //Illithid brain extraction + { + //PrintString( "+BRAINEXTRACT: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+AVOIDENEMY" && Random( 100 ) < iPri && DoAvoidEnemies() ) //Move away from enemies + { + //PrintString( "+AVOIDENEMY: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+EYERAYS" && Random( 100 ) < iPri && DoBeholderRays() ) //Beholder eye rays + { + //PrintString( "+EYERAYS: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + else if ( sPri == "+CENTRALEYE" && Random( 100 ) < iPri && DoBeholderCentralEye() ) //Beholder's antimagic cone + { + //PrintString( "+CENTRALEYE: " + GetName( OBJECT_SELF ) ); + //return; + SetLastAction( sPri ); + //SetLastActionTimestamp(); + break; + } + sPri = GetPriority( iCnt ); + iPri = GetPriorityChance( iCnt++ ); + } +} + +//action functions +void DoCombat() +{ + //int iTime, iLast, iDiff; + int iAct; + float fDelay = 0.0; + + //delete queue marker + DeleteLocalInt( OBJECT_SELF, "#COMBATQUEUED" ); + + if ( GetIsDead( OBJECT_SELF ) ) + { + return; + } + + //int iE = GetHostileCount( 50.0 ); + int iE = GetOmniscientHostileCount( 50.0 ); + if ( iE == 0 ) + { + return; + } + + //make combat noise for nearby listeners + DoFightBroadcast(); + + //don't bother running scripts if we can't do anything + if ( !CanAct() ) + { + ClearAllActions(); + //queue a delay before checking again + fDelay += 0.1; + DelayCommand( fDelay, ActionWait( 1.0 ) ); + //return; + } + else + { + //can take action + //If creature is busy do not proceed + iAct = GetCurrentAction(); + if ( iAct == ACTION_CASTSPELL || iAct == ACTION_HEAL || iAct == ACTION_ITEMCASTSPELL || iAct == ACTION_PICKUPITEM || iAct == ACTION_WAIT || + GetLocalInt( OBJECT_SELF, "#EYERAYS" ) == 1 ) + { + //do nothing + } + else + { + //run the combat response table + ClearAllActions(); + DoMainCombatLoop(); + SetLastActionTimestamp(); + } + } + DoHideInPlainSight(); //testing HIPS between actions + + if ( !CanAct() || ShortAction() ) + { + //DoQueueCombat( 8.0, 8.0 ); + fDelay += 0.1; + DelayCommand( fDelay, ActionDoCommand( DoCombat() ) ); + } +} + +int DoAttackMelee( object oT=OBJECT_INVALID ) +{ + object oTarget; + int iSpecial; + int iMode; + int iPen = 0; + int iMelee = GetAttackerCount( 5.0 ); + int iCnt = 1; + int iChat; + location lLoc; + vector vT, vU; + object test; + + if ( GetIsObjectValid( oT ) ) + { + oTarget = oT; + } + else if ( iMelee ) + { + oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oTarget ) && GetDistanceBetween( OBJECT_SELF, oTarget ) <= 5.0 && GetAttackTarget( oTarget ) != OBJECT_SELF ) + { + oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + } + else + { + oTarget = GetTarget(); + } + + if ( GetIsObjectValid( oTarget ) && ( GetObjectSeen( oTarget ) || GetObjectHeard( oTarget ) ) ) + { + //PrintString( GetName( OBJECT_SELF ) + " melee attack " + GetName( oTarget ) + ": " + FloatToString( GetDistanceBetween( OBJECT_SELF, oTarget ) ) ); + DoEquipMelee( oTarget ); + DoVoiceChat( NO_VC_MELEE ); + //combat modes + if ( iMode = SelectMeleeCombatModes( oTarget ) ) + { + iPen = GetCombatModeModifier( iMode ); + DeactivateCombatModes( iMode ); + ActivateCombatMode( iMode ); + //ActionUseFeat( iMode, oTarget ); + + } + //special melee attacks + if ( iSpecial = GetBestMeleeSpecial( oTarget, iPen ) ) + { + ActionUseFeat( iSpecial, oTarget ); + } + else + { + ActionAttack( oTarget ); + } + return TRUE; + } + else + { + if ( !GetIsObjectValid( oTarget = GetLastDamager() ) ) + { + if ( !GetIsObjectValid( oTarget = GetLastAttacker() ) ) + { + oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + } + if ( GetIsObjectValid( oTarget ) && GetDistanceBetween( OBJECT_SELF, oTarget ) <= 40.0 ) + { + /* + vU = GetPosition( OBJECT_SELF ); + vT = GetPosition( oTarget ) - vU; + vT = VectorMagnitude( vT ) * VectorNormalize( AngleToVector( VectorToAngle( vT ) - 45.0 + IntToFloat( Random( 90 ) ) ) ); + lLoc = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + */ + lLoc = GetLocation( oTarget ); + DoMoveToLocation( lLoc, TRUE ); + return TRUE; + } + } + return FALSE; +} + +int DoAttackRanged( object oT=OBJECT_INVALID ) +{ + object oTarget = ( GetIsObjectValid( oT ) ) ? oT : GetTarget(); + object oHurt; + //talent tSpecial; + int iSpecial; + int iMode; + int iPen = 0; + int iAtk = GetAttackerCount(); + int iChat; + location lLoc; + + //don't proceed if enemies are close + //if creature should avoid melee that should be added as a priority + //above this behaviour + if ( GetHostileCount( 5.0 ) ) + { + return FALSE; + } + + //raging barbarians should not use ranged attack + if ( GetHasFeatEffect( FEAT_BARBARIAN_RAGE, OBJECT_SELF ) || GetHasFeatEffect( FEAT_MIGHTY_RAGE, OBJECT_SELF ) ) + { + //raging barbarians should skip ranged + return FALSE; + } + + if ( !GetLocalInt( OBJECT_SELF, "#RANGEDCAPABLE" ) ) + { + if ( !GetHasRangedCapability() ) + { + return FALSE; + } + SetLocalInt( OBJECT_SELF, "#RANGEDCAPABLE", 1 ); + } + + if ( GetIsObjectValid( oTarget ) && !iAtk ) + { + /* This should be done explicitly with the avoid melee behaviour + if ( GetHostileCount( 5.0 ) ) + { + if ( DoAvoidMelee() ) + { + //PrintString( GetName( OBJECT_SELF ) + " avoiding melee before ranged attack" ); + return TRUE; + } + } + */ + + //PrintString( GetName( OBJECT_SELF ) + " ranged attack " + GetName( oTarget ) + ": " + IntToString( iAtk ) + FloatToString( GetDistanceBetween( OBJECT_SELF, oTarget ) ) ); + if ( !GetIsObjectValid( oT ) ) //not specifically told to attack a target + { + if ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && + GetIsObjectValid( oHurt = GetMostDamagedAlly( 20.0, oTarget, TRUE ) ) ) + { + oTarget = oHurt; + } + } + + ActionEquipMostDamagingRanged( oTarget ); + DoVoiceChat( NO_VC_RANGED ); + //combat modes + if ( iMode = SelectRangedCombatModes( oTarget ) ) + { + iPen = GetCombatModeModifier( iMode ); + DeactivateCombatModes( iMode ); + ActivateCombatMode( iMode ); + ActionUseFeat( iMode, oTarget ); + } + //special ranged attacks + if ( iSpecial = GetBestRangedSpecial( oTarget, iPen ) ) + { + ActionUseFeat( iSpecial, oTarget ); + } + else + { + ActionAttack( oTarget ); + } + return TRUE; + } + //PrintString( GetName( OBJECT_SELF ) + " aborting ranged attack: " + IntToString( iAtk ) ); + return FALSE; +} + +int DoCounterSpell( object oT=OBJECT_INVALID ) +{ + object oC = ( GetIsObjectValid( oT ) ) ? oT : GetNearestEnemyCaster(); + + //do not counterspell if I have timestop running + if ( GetHasSpellEffect( SPELL_TIME_STOP ) ) + { + return FALSE; + } + //do not counterspell if I have attackers + if ( GetAttackerCount( 40.0 ) ) + { + return FALSE; + } + + //dead/living status should be handled by GetNearestEnemyCaster() + if ( GetIsObjectValid( oC ) ) + { + //PrintString( GetName( OBJECT_SELF ) + " counterspelling " + GetName( oC ) ); + ActionCounterSpell( oC ); + return TRUE; + } + return FALSE; +} + +int DoEvacAOE() +{ + vector vT; + location lLoc; + + //don't bother if we have time stop + if ( GetHasSpellEffect( SPELL_TIME_STOP ) ) + { + return FALSE; + } + + if ( GetAOECount( 7.5 ) ) + { + vT = GetAOEEvacVector( GetAOEVector( 15.0 ) ); + lLoc = Location( GetArea( OBJECT_SELF ), vT, GetFacing( OBJECT_SELF ) ); + SetLocalLocation( OBJECT_SELF, "LASTLOC", GetLocation( OBJECT_SELF ) ); + DoMoveToLocation( lLoc, TRUE ); + return TRUE; + } + return FALSE; +} + +int DoRegroup( object oT=OBJECT_INVALID ) +{ + int iCnt = 0; + int iE = 0; + object oFriend; + object oDistant = OBJECT_INVALID; + vector vU, vT, vM; + location lLoc; + + //check for order to regroup to a particular object + if ( GetIsObjectValid( oT ) ) + { + DoMoveToObject( oT, TRUE, 5.0 ); + return TRUE; + } + + //don't bother if we have time stop + if ( GetHasSpellEffect( SPELL_TIME_STOP ) ) + { + return FALSE; + } + + vU = GetPosition( OBJECT_SELF ); + vT = Vector( 0.0, 0.0, 0.0 ); + oFriend = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oFriend ) ) + { + vT = vT + GetPosition( oFriend ) - vU; + oFriend = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( VectorMagnitude( vT ) > 0.0 ) + { + vT = vT / IntToFloat( iCnt - 1 ); + } + + if ( VectorMagnitude( vT ) == 0.0 ) + { + oFriend = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE ); + if ( GetIsObjectValid( oFriend ) && GetDistanceBetween( OBJECT_SELF, oFriend ) < 60.0 /*&& GetDistanceBetween( OBJECT_SELF, oFriend ) > 30.0*/ ) + { + //we do have friends nearby but can't see them + DoMoveToLocation( GetLocation( oFriend ), TRUE ); + return TRUE; + } + } + if ( VectorMagnitude( vT ) > 25.0 ) + { + if ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) ) + { + //need to regroup, get movement vector + vT = vT - 10.0 * VectorNormalize( vT ); + vM = vU + vT; + lLoc = Location( GetArea( OBJECT_SELF ), vM, VectorToAngle( vT ) ); + DoMoveToLocation( lLoc, TRUE ); + //PrintString( GetName( OBJECT_SELF ) + " REGROUPING: (" + FloatToString( vM.x ) + "," + FloatToString( vM.y ) + ")" ); + DoVoiceChat( VOICE_CHAT_GROUP ); + return TRUE; + } + } + else + { + //look for outliers + iCnt = 0; + oFriend = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oFriend ) ) + { + oDistant = oFriend; + oFriend = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( GetIsObjectValid( oDistant ) ) + { + if ( GetDistanceBetween( OBJECT_SELF, oDistant ) > 30.0 ) + { + DoMoveToObject( oDistant, TRUE, 10.0 ); + //PrintString( GetName( OBJECT_SELF ) + " finding OUTLIER " + GetName( oDistant ) ); + DoVoiceChat( VOICE_CHAT_GROUP ); + return TRUE; + } + } + } + return FALSE; +} + +int DoDefendSelf() +{ + int iMagic = GetCasterCount( 40.0 ); + int iPhys = GetAttackerCount( 40.0 ); + int iPotAtk = GetHostileCount( 40.0 ); + int iSpell = 0; + talent tSpell; + struct sSpellDefStatus strMDef = EvaluateSpellDefenses(); + struct sPhysDefStatus strPDef = EvaluatePhysicalDefenses(); + + if ( ( iPhys || iPotAtk ) && strPDef.iTotal < 4 ) + { + /* + if ( iSpell = GetBestPhysDefense() ) //again, no acid fog + { + tSpell = TalentSpell( iSpell ); + } + */ + if ( iSpell = GetBestPhysDefenseSelf() ) + //if ( GetIsTalentValid( tSpell ) ) + { + //PrintString( "PD: " + GetName( OBJECT_SELF ) + "(" + IntToString( iSpell ) + ")" ); + //ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + NO_ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + //ActionUseTalentOnObject( tSpell, OBJECT_SELF ); + return TRUE; + } + } + if ( iMagic && strMDef.iTotal < 4 ) + { + /* + if ( iSpell = GetBestMagicDefense() ) //can assume acid fog (int val 0) won't be returned here + { + tSpell = TalentSpell( iSpell ); + } + */ + if ( iSpell = GetBestMagicDefenseSelf() ) + //if ( GetIsTalentValid( tSpell ) ) + { + //PrintString( "MD: " + GetName( OBJECT_SELF ) + "(" + IntToString( iSpell ) + ")" ); + //ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + NO_ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + //ActionUseTalentOnObject( tSpell, OBJECT_SELF ); + return TRUE; + } + } + + /* + if ( iSpell = GetBestGenericProtection() ) + { + tSpell = TalentSpell( iSpell ); + } + if ( GetIsTalentValid( tSpell ) ) + { + //ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + ActionUseTalentOnObject( tSpell, OBJECT_SELF ); + return TRUE; + } + */ + return FALSE; +} + +int DoDefendSingle( object oT=OBJECT_INVALID ) +{ + object oD; + int iSpell; + struct sSpellDefStatus strM; + struct sPhysDefStatus strP; + + oD = ( GetIsObjectValid( oT ) ) ? oT : GetLeastDefendedAlly( 20.0 ); + if ( GetIsObjectValid( oD ) ) + { + strM = EvaluateSpellDefenses( oD ); + strP = EvaluatePhysicalDefenses( oD ); + if ( strM.iTotal < strP.iTotal ) + { + if ( iSpell = GetBestMagicDefenseSingle( oD ) ) + { + //PrintString( "DDSM: " + GetName( OBJECT_SELF ) + " -> " + GetName( oD ) + " (" + IntToString( iSpell ) + ")" ); + //ActionCastSpellAtObject( iSpell, oD ); + NO_ActionCastSpellAtObject( iSpell, oD ); + return TRUE; + } + } + else + { + //strP.iTotal <= strM.iTotal + if ( iSpell = GetBestPhysDefenseSingle( oD ) ) + { + //PrintString( "DDSP: " + GetName( OBJECT_SELF ) + " -> " + GetName( oD ) + " (" + IntToString( iSpell ) + ")" ); + //ActionCastSpellAtObject( iSpell, oD ); + NO_ActionCastSpellAtObject( iSpell, oD ); + return TRUE; + } + } + } + return FALSE; +} + +int DoEnhanceSelf() +{ + int iMinLvl = GetHitDice( OBJECT_SELF ); + iMinLvl = iMinLvl > 20 ? 20 : iMinLvl; + iMinLvl = iMinLvl / 3; + int iSpell = GetEnhanceSpellSelf( iMinLvl ); + vector vT, vU; + location lM; + //talent tSpell; + + if ( iSpell ) + { + /* + tSpell = TalentSpell( iSpell ); + if ( GetIsTalentValid( tSpell ) ) + { + ActionUseTalentOnObject( tTest, OBJECT_SELF ); + } + */ + //ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + NO_ActionCastSpellAtObject( iSpell, OBJECT_SELF ); + if ( iSpell == SPELL_INVISIBILITY || iSpell == SPELL_IMPROVED_INVISIBILITY ) + { + //move a bit after casting invisibility on self + if ( VectorMagnitude( vT = GetHostileVector( 10.0 ) ) > 0.0 ) + { + vU = GetPosition( OBJECT_SELF ); + vT = 5.0 * AngleToVector( VectorToAngle( vT ) + 90.0 + IntToFloat( Random( 180 ) ) ); + lM = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lM, TRUE ); + vT = 5.0 * AngleToVector( VectorToAngle( vT ) - 90.0 + IntToFloat( Random( 180 ) ) ); + lM = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lM, TRUE ); + } + } + return TRUE; + } + return FALSE; +} + +int DoEnhanceSingle( object oT=OBJECT_INVALID ) +{ + int iMinLvl = GetHitDice( OBJECT_SELF ); + iMinLvl = iMinLvl > 20 ? 20 : iMinLvl; + iMinLvl = iMinLvl / 3; + int iSpell = 0; + vector vT, vU; + location lM; + object oE = ( GetIsObjectValid( oT ) ) ? oT : GetLeastBuffedAlly( 20.0, TRUE ); + + if ( GetIsObjectValid( oE ) ) + { + if ( iSpell = GetEnhanceSpellSingle( iMinLvl, oE ) ) + { + //PrintString( "DES: " + GetName( OBJECT_SELF ) + " -> " + GetName( oE ) + " (" + IntToString( iSpell ) + ")" ); + //ActionCastSpellAtObject( iSpell, oE ); + NO_ActionCastSpellAtObject( iSpell, oE ); + return TRUE; + } + if ( oE == OBJECT_SELF ) + { + if ( iSpell == SPELL_INVISIBILITY || iSpell == SPELL_IMPROVED_INVISIBILITY ) + { + //move a bit after casting invisibility on self + if ( VectorMagnitude( vT = GetHostileVector( 10.0 ) ) > 0.0 ) + { + vU = GetPosition( OBJECT_SELF ); + vT = 5.0 * AngleToVector( VectorToAngle( vT ) + 90.0 + IntToFloat( Random( 180 ) ) ); + lM = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lM, TRUE ); + vT = 5.0 * AngleToVector( VectorToAngle( vT ) - 90.0 + IntToFloat( Random( 180 ) ) ); + lM = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lM, TRUE ); + } + } + } + } + return FALSE; +} + +/* +==================== +DoSpellHelp: + +Description: Find the ally with the most hampering effects on them and try to remove them. + +Notes: Problem with this behaviour is that it always looks for most hampered ally. If it can't help that ally then +it will not help anyone. If there are less hampered allies that it could help it will never know because it goes +straight to the most hampered + +Possible fix: First generate full list of possible help it can provide stored as bits and do bitwise AND against +effects on each ally. If there are no matches at all, do not consider them. Store the ally with the most matches +of available help vs hampering effects. Not yet tried. +==================== +*/ +int DoSpellHelp( object oT=OBJECT_INVALID ) +{ + object oHurt; + int iHelp; + + if ( GetHasHelpingAbility() ) + { + oHurt = ( GetIsObjectValid( oT ) ) ? oT : GetMostHamperedAlly( 30.0, OBJECT_SELF, TRUE ); + if ( GetIsObjectValid( oHurt ) ) + { + iHelp = GetBestHelp( oHurt ); + if ( iHelp ) + { + SetLocalObject( oHurt, "HELPER", OBJECT_SELF ); + DelayCommand( 6.0, DeleteLocalObject( oHurt, "HELPER" ) ); + //PrintString( "HELP: " + GetName( OBJECT_SELF ) + " -> " + GetName( oHurt ) + "(" + IntToString( iHelp ) + ")" ); + //ActionCastSpellAtObject( iHelp, oHurt ); + NO_ActionCastSpellAtObject( iHelp, oHurt ); + return TRUE; + } + //PrintString( "HELP: fail " + GetName( OBJECT_SELF ) + " -> " + GetName( oHurt ) ); + } + } + return FALSE; +} + +int DoSpellHeal( object oT=OBJECT_INVALID ) +{ + //original heal code + object oHurt; + int iHeal, iCR; + talent tHeal; + int iMin = 8; + + if ( GetHasHealingAbility() ) + //if ( GetIsTalentValid( GetCreatureTalentBest( TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH, 20 ) ) ) + { + oHurt = ( GetIsObjectValid( oT ) ) ? oT : GetLowestHPAllyNoHealer( 30.0, iMin, OBJECT_SELF, TRUE ); + if ( GetIsObjectValid( oHurt ) ) + { + /* + // Need to use this hack with talents because GetHasSpell will pick up spontaneous casting ability + // but ActionCastSpell* cannot do the spontaneous casting, which leaves the creature daydreaming + // rather than acting + */ + iHeal = GetBestHeal( oHurt, iMin ); + tHeal = GetTalentSpell( TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH, iHeal ); + //if ( iHeal ) + if ( GetIsTalentValid( tHeal ) ) + { + //PrintString( "HEAL: " + GetName( OBJECT_SELF ) + " -> " + GetName( oHurt ) + " (" + IntToString( iHeal ) + ")" ); + SetLocalObject( oHurt, "#HEALER", OBJECT_SELF ); + DelayCommand( 6.0, DeleteLocalObject( oHurt, "#HEALER" ) ); + //ActionCastSpellAtObject( iHeal, oHurt ); + //ActionUseTalentOnObject( tHeal, oHurt ); + NO_ActionUseTalentOnObject( tHeal, oHurt ); + return TRUE; + } + } + } + return FALSE; +} + +int DoSpellRaise( object oT=OBJECT_INVALID ) +{ + //original raise code + object oHurt; + int iRaise; + + if ( GetHasRaisingAbility() ) + { + oHurt = ( GetIsObjectValid( oT ) && GetIsDead( oT ) ) ? oT : GetNearestDeadAllyNoRaiser( 30.0, OBJECT_SELF, TRUE ); + if ( GetIsObjectValid( oHurt ) ) + { + iRaise = GetBestRaise( TRUE ); + if ( iRaise ) + { + SetLocalObject( oHurt, "#RAISER", OBJECT_SELF ); + DelayCommand( 6.0, DeleteLocalObject( oHurt, "#RAISER" ) ); + //ActionCastSpellAtObject( iRaise, oHurt ); + NO_ActionCastSpellAtObject( iRaise, oHurt ); + return TRUE; + } + } + } + return FALSE; +} + +int DoSpellBreach( object oT=OBJECT_INVALID ) +{ + int iCnt = 1; + int iSpell = 0; + int iMaxLvl = 0; + int iMaxNum = 0; + struct sSpellDefStatus strMDef; + struct sPhysDefStatus strPDef; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + object oTarget = OBJECT_INVALID; + + //add breach check before doing search? + if ( GetIsObjectValid( oT ) ) + { + oTarget = oT; + } + else + { + while ( !GetIsObjectValid( oTarget ) && GetIsObjectValid( oSub ) ) + { + if ( !GetIsDead( oSub ) && !GetIsObjectValid( GetLocalObject( oSub, "BREACHER" ) ) ) + { + strMDef = EvaluateSpellDefenses( oSub ); + strPDef = EvaluatePhysicalDefenses( oSub ); + + if ( strMDef.iTotal + strPDef.iTotal > iMaxLvl ) + { + oTarget = oSub; + iMaxLvl = strMDef.iTotal + strPDef.iTotal; + } + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + } + + if ( GetIsObjectValid( oTarget ) ) + { + if ( iSpell = GetBestBreach( iMaxLvl ) ) + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + SetLocalObject( oTarget, "BREACHER", OBJECT_SELF ); + DelayCommand( 4.0, DeleteLocalObject( oTarget, "BREACHER" ) ); + return TRUE; + } + } + return FALSE; +} + +int DoSpellDirect( object oT=OBJECT_INVALID ) +{ + int iSpell = -1; + int iMinLvl = 0; + float fRange = 25.0; + object oHurt; + object oTarget; + float fRad; + float fRatio; + location lLoc; + talent tSpell; + + //go for least defended, failing that go for most damaged + //in practice GetLeastMagicDefendedEnemy should always return someone if any + //enemies are visible to caller + if ( GetIsObjectValid( oT ) ) + { + oTarget = oT; + } + else if ( !GetIsObjectValid( oTarget = GetLeastMagicDefendedEnemy( fRange ) ) ) + { + oTarget = GetTarget(); + if ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5) ) + { + oHurt = GetMostDamagedAlly( 20.0, oTarget, TRUE ); + } + if ( GetIsObjectValid( oHurt ) && GetObjectSeen( oHurt, OBJECT_SELF ) ) + { + oTarget = oHurt; + } + } + + //open up spell level selection range + iMinLvl = GetHitDice( oTarget ) / 3; + + //PrintString( GetName( OBJECT_SELF ) + " DS" + IntToString( iMinLvl ) ); + if ( GetIsObjectValid( oTarget ) && GetObjectSeen( oTarget, OBJECT_SELF ) ) + { + iSpell = GetDirectSpell( oTarget, FALSE, iMinLvl ); + } + if ( iSpell > -1 && ( fRad = GetAreaSpellRadius( iSpell ) ) > 0.0 ) + { + //direct spell has radius effect + //this code should be unnecessary now + fRatio = GetFriendFoeRatio( GetLocation( oTarget ), fRad ); + if ( fRatio < GetFriendFoeTolerance() ) + { + iSpell = GetDirectSpell( oTarget, TRUE, iMinLvl ); + } + } + //Testing immunity checks + //result: feh, doesn't work properly, 100% immunity to damage type doesn't count as "immunity". go figure. + //SpeakString( "IT " + GetName( oTarget ) + " " + IntToString( FortitudeSave( oTarget, 1000, SAVING_THROW_TYPE_FIRE ) ) ); + + /* Spell/Talent Issue + if ( iSpell > -1 ) + { + tSpell = TalentSpell( iSpell ); + } + */ + if ( iSpell > -1 ) + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + //ActionUseTalentOnObject( tSpell, oTarget ); + return TRUE; + } + return FALSE; +} + +int DoTouch( object oT=OBJECT_INVALID ) +{ + int iSpell = -1; + int iMinLvl = 0; + float fRange = 20.0; + object oHurt; + object oTarget; + + //go for least defended, failing that go for most damaged + //in practice GetLeastMagicDefendedEnemy should always return someone if any + //enemies are visible to caller + if ( GetIsObjectValid( oT ) ) + { + oTarget = oT; + } + else if ( !GetIsObjectValid( oTarget = GetLeastMagicDefendedEnemy( fRange ) ) ) + { + oTarget = GetTarget(); + if ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) ) + { + oHurt = GetMostDamagedAlly( 10.0, oTarget, TRUE ); + } + if ( GetIsObjectValid( oHurt ) && GetObjectSeen( oHurt, OBJECT_SELF ) ) + { + oTarget = oHurt; + } + } + + //open up spell level selection range + iMinLvl = GetHitDice( oTarget ) / 3; + + //PrintString( GetName( OBJECT_SELF ) + " TS" + IntToString( iMinLvl ) ); + if ( GetIsObjectValid( oTarget ) && GetObjectSeen( oTarget, OBJECT_SELF ) ) + { + iSpell = GetTouchSpell( oTarget, iMinLvl ); + } + + /* Spell/Talent Issue + if ( iSpell > -1 ) + { + tSpell = TalentSpell( iSpell ); + } + */ + if ( iSpell > -1 ) + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + //ActionUseTalentOnObject( tSpell, oTarget ); + return TRUE; + } + return FALSE; +} + +int DoSpellArea() +{ + int iCnt; + int iMinLvl = 0; + int iSpell = -1; + int iHostiles = GetHostileCount( 40.0 ); + float fRad; + float fRange; + float fRatio; + float fDist; + float fMinSearch = 0.0; + float fMaxSearch; + vector vU; + vector vT; + vector vS; + location lMark; + object oTarget; + object oD; + talent tSpell; + + if ( !iHostiles ) + { + return FALSE; + } + + //estimate average enemy hit dice to get an idea of what spell level range we should consider + iMinLvl = GetSafeAverageEnemyLevel(); + + if ( iHostiles == 1 ) + { + oTarget = GetTarget(); + if ( !GetIsObjectValid( oTarget ) ) + { + return FALSE; + } + else + { + fMaxSearch = GetDistanceBetween( OBJECT_SELF, oTarget ); + iSpell = GetAreaSpell( Vector( 0.0, 0.0, 0.0 ), FALSE, iMinLvl, fMaxSearch ); + if ( iSpell == -1 ) + { + return FALSE; + } + fRad = GetAreaSpellRadius( iSpell ); + vT = GetPosition( oTarget ) - GetPosition( OBJECT_SELF ); + } + } + else if ( iHostiles > 1 ) + { + //fMaxSearch = VectorMagnitude( GetHostileVector( 40.0 ) ); + /* + oD = GetMostDistantEnemy( 40.0 ); + if ( GetIsObjectValid( oD ) ) + { + fMaxSearch = GetDistanceBetween( OBJECT_SELF, oD ); + } + else + { + //apparently no enemies spotted, should be impossible at this point + fMaxSearch = 40.0; + } + */ + fMaxSearch = GetAverageDistanceToEnemy( 40.0 ); + //SpeakString( "ADtE: " + FloatToString( fMaxSearch ) + " AEL: " + IntToString( iMinLvl ) ); + iSpell = GetAreaSpell( Vector( 0.0, 0.0, 0.0 ), FALSE, iMinLvl, fMaxSearch ); + if ( iSpell < 0 ) + { + //SpeakString( "No spell" ); + return FALSE; + } + //SpeakString( "Spell: " + IntToString( iSpell ) ); + fRad = GetAreaSpellRadius( iSpell ); + vT = GetAreaTarget( iSpell, fRad, fMinSearch, fMaxSearch ); + vS = GetAverageEnemySaveInArea( vT, fRad ); + //SpeakString( "AES: " + FloatToString( vS.x ) + " " + FloatToString( vS.y ) + " " + FloatToString( vS.z ) ); + } + + //PrintString( GetName( OBJECT_SELF ) + " AS" + IntToString( iMinLvl ) ); + + fRange = GetSpellRange( iSpell ); + vU = GetPosition( OBJECT_SELF ); + //single target case + if ( iHostiles == 1 ) + { + lMark = GetLocation( OBJECT_SELF ); + if ( GetIsDiscriminantSpell( iSpell ) ) + { + if ( fRange == 0.0 ) + { + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark ); + } + else + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + } + return TRUE; + } + else + { + if ( fRange == 0.0 ) + { + fRatio = GetFriendFoeRatio( lMark, fRad ); + if ( fRatio < GetFriendFoeTolerance() ) + { + iSpell = GetAreaSpell( Vector( 0.0, 0.0, 0.0 ), TRUE, iMinLvl, fMaxSearch ); + if ( iSpell < 0 ) + { + //fRatio not acceptable, no discriminant spells + return FALSE; + } + } + //either fRatio is okay or we have a discriminant spell + fRange = GetSpellRange( iSpell ); + if ( fRange == 0.0 ) + { + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark ); + } + else + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + } + return TRUE; + } + fRatio = GetFriendFoeRatio( GetLocation( oTarget ), fRad ); + if ( fRatio < GetFriendFoeTolerance() ) + { + iSpell = GetAreaSpell( Vector( 0.0, 0.0, 0.0 ), TRUE, iMinLvl, fMaxSearch ); + if ( iSpell < 0 ) + { + return FALSE; + } + } + //either fRatio is okay or we have a discriminant spell + fRange = GetSpellRange( iSpell ); + if ( fRange == 0.0 ) + { + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark ); + } + else + { + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + } + return TRUE; + } + } + //multiple target case + if ( iHostiles > 1 ) + { + //PrintString( "AREA: " + GetName( OBJECT_SELF ) + FloatToString( fMaxSearch ) ); + if ( VectorMagnitude( vT ) == 0.0 ) + { + //SpeakString( "No target" ); + return FALSE; + } + /* + if ( 5 - GetAbilityModifier( ABILITY_INTELLIGENCE ) > 0 ) + { + lMark = Location( GetArea( OBJECT_SELF ), + vU + vT + VectorNormalize( AngleToVector( IntToFloat( Random( 360 ) ) ) ) * IntToFloat( Random( 5 - GetAbilityModifier( ABILITY_INTELLIGENCE ) ) ), + GetFacing( OBJECT_SELF ) ); + } + else + { + lMark = Location( GetArea( OBJECT_SELF ), vU + vT, GetFacing( OBJECT_SELF ) ); + } + */ + lMark = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + //SpeakString( GetName( OBJECT_SELF ) + " AS(" + IntToString( iSpell ) + ")" ); + if ( !GetIsDiscriminantSpell( iSpell ) ) + { + fRatio = GetFriendFoeRatio( lMark, fRad ); + //SpeakString( "AS FFR" + FloatToString( fRatio ) ); + if ( fRatio < GetFriendFoeTolerance() ) + { + iSpell = GetAreaSpell( Vector( 0.0, 0.0, 0.0 ), TRUE, iMinLvl, fMaxSearch ); //get discriminant area spell if possible + if ( iSpell < 0 ) + { + //SpeakString( GetName( OBJECT_SELF ) + " !iDisc " + FloatToString( fRatio ) ); + return FALSE; + } + //PrintString( GetName( OBJECT_SELF ) + " iDisc " + FloatToString( fRatio ) ); + } + else + { + //SpeakString( GetName( OBJECT_SELF ) + " FFOK " + FloatToString( fRatio ) ); + } + } + //either friendfoe ratio is acceptable or we have a discriminant spell + //if the spell is lightning or chain lightning target it at nearest creature + //do this sometimes with delayed blast fireball + if ( iSpell == SPELL_LIGHTNING_BOLT || iSpell == SPELL_CHAIN_LIGHTNING || iSpell == SPELL_GEDLEES_ELECTRIC_LOOP ) + { + oTarget = GetFirstObjectInShape( SHAPE_SPHERE, fRad, lMark ); + while ( GetIsObjectValid( oTarget ) ) + { + if ( GetObjectType( oTarget ) == OBJECT_TYPE_CREATURE || GetIsPC( oTarget ) ) + { + if ( GetObjectSeen( oTarget ) && !GetIsDead( oTarget ) && GetIsEnemy( oTarget ) ) + { + //PrintString( "AS LCL " + GetName( oTarget ) ); + break; + } + } + oTarget = GetNextObjectInShape( SHAPE_SPHERE, fRad, lMark ); + } + if ( GetIsObjectValid( oTarget ) ) //should always be valid + { + //PrintString( "AS CL" + GetName( oTarget ) ); + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + return TRUE; + } + } + //don't cast an area spell right next to myself + //maybe later add something to see if I am immune to the spell + //and cast anyway if so + //Spells with range of 0 should be okay to cast + else if ( GetIsDiscriminantSpell( iSpell ) || + ( GetSpellRange( iSpell ) > 0.0 && VectorMagnitude( vT ) > fRad ) || GetSpellRange( iSpell ) == 0.0 || + IsCone( iSpell ) ) + { + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark ); + return TRUE; + } + } + return FALSE; +} + +int DoSpellSummon() +{ + int iMinLvl = GetAverageEnemyLevel(); + int iSpell = GetSummonSpell( iMinLvl ); + int iA; + vector vT, vA; + object oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + + if ( iSpell && !GetLocalInt( OBJECT_SELF, "#SUMMONDEL" ) && !GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_SUMMONED ) ) ) + { + /* + vT = AngleToVector( GetFacing( OBJECT_SELF ) - 90.0 + IntToFloat( Random( 180 ) ) ); + //testing addition to stop summoning creatures into AOEs + if ( GetAOECount( 10.0 ) ) + { + vT = GetAOEVector( 10.0 ); + vT *= -1.0; + } + //end test code + vT = 3.0 * VectorNormalize( vT ); + vT = GetPosition( OBJECT_SELF ) + vT; + ActionCastSpellAtLocation( iSpell, Location( GetArea( OBJECT_SELF ), vT, GetFacing( OBJECT_SELF ) ) ); + */ + //ActionCastSpellAtLocation( iSpell, GetLocation( OBJECT_SELF ) ); + NO_ActionCastSpellAtLocation( iSpell, GetLocation( OBJECT_SELF ) ); + SetLocalInt( OBJECT_SELF, "#SUMMONDEL", 1 ); + DelayCommand( 6.0, DeleteLocalInt( OBJECT_SELF, "#SUMMONDEL" ) ); + DelayCommand( 6.0, SpeakString( "BC_FIGHTING", TALKVOLUME_SILENT_TALK ) ); + return TRUE; + } + return FALSE; +} + +int DoSpellCharm() +{ + //included in DoSpellDirect() + return FALSE; +} + +int DoFeatEnhance() +{ + //NOTE: should be okay to rely on enhance feats to be non-zero as Alertness should never be returned + int iFeat = GetEnhanceFeat(); + + if ( iFeat ) + { + ActionUseFeat( iFeat, OBJECT_SELF ); + return TRUE; + } + return FALSE; +} + +int DoDragonFlight() +{ + //unused due to lack of re-entry animation + /* + int iCnt = 1; + object oTarget = OBJECT_INVALID; + + if ( GetLocalInt( OBJECT_SELF, "FLIER" ) && GetHostileCount() > 3 ) + { + oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + while ( GetIsObjectValid( oTarget ) ) + { + if ( Random( 5 ) && GetDistanceBetween( OBJECT_SELF, oTarget ) > 10.0 ) + { + break; + } + oTarget = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + if ( GetIsObjectValid( oTarget ) ) + { + DoMoveToObject( oTarget ); + return TRUE; + } + } + */ + return FALSE; +} + +/* +int DoAvoidMelee() +{ + vector vT; + location lLoc; + + //don't bother if we have time stop + if ( GetHasSpellEffect( SPELL_TIME_STOP ) ) + { + return FALSE; + } + + //if ( GetAttackerCount( 5.0 ) ) + if ( GetHostileCount( 5.0 ) ) + { + vT = GetHostileEvacVector( GetHostileVector( 15.0 ) ); + if ( VectorMagnitude( vT ) > 5.0 ) + { + SetLocalLocation( OBJECT_SELF, "#LASTHOTSPOT", GetLocation( OBJECT_SELF ) ); + SetLocalFloat( OBJECT_SELF, "#LASTAMANGLE", VectorToAngle( vT ) ); + vT = GetPosition( OBJECT_SELF ) - vT; + lLoc = Location( GetArea( OBJECT_SELF ), vT, VectorToAngle( vT ) ); + DoMoveToLocation( lLoc, TRUE ); + return TRUE; + } + } + return FALSE; +} +*/ +int DoAvoidMelee() +{ + vector vT; + location lD; + + if ( GetHasSpellEffect( SPELL_TIME_STOP, OBJECT_SELF ) == TRUE ) + { + //don't bother if we have time stop, dish out some pain instead + return FALSE; + } + + if ( GetHostileCount( 5.0 ) ) + { + vT = ( -1.0 * ( 10.0 + IntToFloat( Random( 20 ) ) ) ) * VectorNormalize( GetHostileVector( 20.0 ) ); + lD = Location( GetArea( OBJECT_SELF ), vT + GetPosition( OBJECT_SELF ), VectorToAngle( vT ) ); + if ( GetLocalInt( OBJECT_SELF, "#LASTDEST" ) ) + { + if ( GetDistanceBetweenLocations( GetLocalLocation( OBJECT_SELF, "#LASTDEST" ), GetLocation( OBJECT_SELF ) ) < 5.0 ) + { + //close enough to target location + DeleteLocalInt( OBJECT_SELF, "#LASTDEST" ); + DeleteLocalLocation( OBJECT_SELF, "#LASTDEST" ); + } + else if ( GetDistanceBetweenLocations( GetLocalLocation( OBJECT_SELF, "#LASTDEST" ), GetLocation( OBJECT_SELF ) ) > 5.0 ) + { + //didn't make it close enough to our last desired location for some reason + vT = ( 10.0 + IntToFloat( Random( 20 ) ) ) * VectorNormalize( AngleToVector( VectorToAngle( vT ) - 90.0 + 180 * IntToFloat( Random( 2 ) ) ) ); + lD = Location( GetArea( OBJECT_SELF ), vT + GetPosition( OBJECT_SELF ), VectorToAngle( vT ) ); + } + } + SetLocalInt( OBJECT_SELF, "#LASTDEST", 1 ); + SetLocalLocation( OBJECT_SELF, "#LASTDEST", lD ); + DoMoveToLocation( lD, TRUE ); + /*XXX this queueing now handled by main combat loop + ActionDoCommand( DelayCommand( 1.0, DoCombat() ) ); + */ + return TRUE; + } + return FALSE; +} + +int DoTimeStop() +{ + int iEnemy = GetHostileCount( 40.0f ); + + if ( iEnemy ) + { + if ( GetHasSpell( SPELL_TIME_STOP ) && !GetHasSpellEffect( SPELL_TIME_STOP ) ) + { + //ActionCastSpellAtObject( SPELL_TIME_STOP, OBJECT_SELF ); + NO_ActionCastSpellAtObject( SPELL_TIME_STOP, OBJECT_SELF ); + return TRUE; + } + } + return FALSE; +} + +int DoVision() +{ + object oS; + int iCnt = 1; + int iSpell = 0; + + if ( !GetHasVisionSpells() ) + { + return FALSE; + } + + oS = GetVisionDeprived( 20.0 ); + if ( GetIsObjectValid( oS ) ) + { + iSpell = GetVisionSpellNeeded( oS ); + if ( iSpell ) + { + //oS should be creature that needs vision, iSpell is the spell needed + SetLocalObject( oS, "#VISION", OBJECT_SELF ); + DelayCommand( 6.0, DeleteLocalObject( oS, "#VISION" ) ); + //ActionCastSpellAtObject( iSpell, oS ); + NO_ActionCastSpellAtObject( iSpell, oS ); + return TRUE; + } + } + return FALSE; +} + +int DoBreathWeapon() +{ + int iSpell = GetBreathWeapon(); + int iHostiles; + float fRad = RADIUS_SIZE_LARGE; + float fMinSearch = 2.5; + float fMaxSearch = fRad; + vector vT; + object oT; + location lMark; + int iMeta= METAMAGIC_ANY; + int iCheat = TRUE; + + if ( iSpell && GetLocalInt( OBJECT_SELF, "#BDEL" ) == 0 ) + { + iHostiles = GetHostileCount( 50.0 ); + if ( iHostiles == 1 ) + { + //we have a breath weapon ready to go, single target + oT = GetTarget(); + if ( oT != OBJECT_INVALID ) + { + //ActionCastSpellAtObject( iSpell, oT, iMeta, iCheat ); + NO_ActionCastSpellAtObject( iSpell, oT, iMeta, iCheat, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE, FALSE ); + SetLocalInt( OBJECT_SELF, "#BDEL", 1 ); + DelayCommand( RoundsToSeconds( d4() ), DeleteLocalInt( OBJECT_SELF, "#BDEL" ) ); + return TRUE; + } + } + else if ( iHostiles > 1 ) + { + //we have a breath weapon ready to go, multiple targets + vT = GetAreaTarget( iSpell, fRad, fMinSearch, fMaxSearch ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lMark = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, GetFacing( OBJECT_SELF ) ); + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark, iMeta, iCheat, PROJECTILE_PATH_TYPE_DEFAULT, FALSE, FALSE ); + SetLocalInt( OBJECT_SELF, "#BDEL", 1 ); + DelayCommand( RoundsToSeconds( d4() ), DeleteLocalInt( OBJECT_SELF, "#BDEL" ) ); + return TRUE; + } + } + } + return FALSE; +} + +int DoTurning() +{ + int iTurn = GetHasFeat( FEAT_TURN_UNDEAD ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + location lLoc; + + if ( !iTurn ) + { + return FALSE; + } + + vT = GetTurningVector(); + if ( VectorMagnitude( vT ) > 0.0 ) + { + vT = GetPosition( OBJECT_SELF ) + vT; + lLoc = Location( GetArea( OBJECT_SELF ), vT, VectorToAngle( vT ) ); + DoMoveToLocation( lLoc, TRUE ); + ActionUseFeat( FEAT_TURN_UNDEAD, OBJECT_SELF ); + return TRUE; + } + return FALSE; +} + +int DoSpellCone() +{ + //moving this over to DoSpellArea() + /* + object oT; + int iSpell, iMinLvl; + float fRad = 10.0; + vector vT, vU, vX; + location lLoc, lMove; + + if ( GetIsObjectValid( oT = GetTarget() ) ) + { + iMinLvl = GetAverageEnemyLevel() / 3; + } + + if ( iSpell = GetConeSpell( iMinLvl ) ) + { + vU = GetPosition( OBJECT_SELF ); + vT = GetAreaTarget( iSpell, fRad ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + //extend slightly past center of area + vT = vT + 2.5 * VectorNormalize( vT ); + lLoc = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + ActionCastSpellAtLocation( iSpell, lLoc ); + return TRUE; + } + } + */ + return FALSE; +} + +int DoHealSelf() +{ + //Testing via talents, having to go via random seems kind of wasteful + //Look for another way to do this + int iHeal; + int iHealTalent; + int iCR; + int iFeat; + int iDam; + int iP; + int iLimit = 0; + talent tHeal, tP; + object oP, oHeal, oHealer; + event evHeal; + + oHealer = GetLocalObject( OBJECT_SELF, "#HEALER" ); + if ( GetIsObjectValid( oHealer ) ) + { + if ( GetDistanceBetween( OBJECT_SELF, oHealer ) < 10.0 ) + { + //got a healer who is close, don't double up, healing is on the way + return FALSE; + } + } + + iDam = GetMaxHitPoints() - GetCurrentHitPoints(); + if ( iDam == 0 ) + { + return FALSE; + } + //see if wholeness of body is an option + if ( GetHasFeat( FEAT_WHOLENESS_OF_BODY ) ) + { + iFeat = FEAT_WHOLENESS_OF_BODY; + if ( iDam < GetLevelByClass( CLASS_TYPE_MONK ) * 2 ) + { + iFeat = 0; + } + } + + //iCR = 20; + iCR = 10; + iHealTalent = 0; + if ( GetRacialType( OBJECT_SELF ) != RACIAL_TYPE_UNDEAD ) //undead do not use healing potions + { + //while ( iCR && GetIsTalentValid( tP = GetCreatureTalentBest( TALENT_CATEGORY_BENEFICIAL_HEALING_POTION, iCR-- ) ) ) + while ( iCR-- && GetIsTalentValid( tP = GetCreatureTalentRandom( TALENT_CATEGORY_BENEFICIAL_HEALING_POTION ) ) ) + { + if ( iP = GetTalentPotionHealAmount( tP ) ) + { + if ( iP > iHealTalent && iP < iDam ) + { + tHeal = tP; + iHealTalent = iP; + } + } + } + } + if ( iFeat ) + { + ActionUseFeat( iFeat, OBJECT_SELF ); + SetLocalObject( OBJECT_SELF, "#HEALER", OBJECT_SELF ); + DelayCommand( 4.0, DeleteLocalObject( OBJECT_SELF, "#HEALER" ) ); + return TRUE; + } + if ( iHealTalent && GetIsTalentValid( tHeal ) ) + { + ActionUseTalentOnObject( tHeal, OBJECT_SELF ); + SetLocalObject( OBJECT_SELF, "#HEALER", OBJECT_SELF ); + DelayCommand( 4.0, DeleteLocalObject( OBJECT_SELF, "#HEALER" ) ); + return TRUE; + } + return FALSE; +} + +int DoSpellGroupEnhance() +{ + int iSpell, iMinLvl; + float fRad = 0.0; + vector vT, vU, vX; + location lLoc, lMove; + object oT; + + if ( GetIsObjectValid( oT = GetTarget() ) ) + { + iMinLvl = GetAverageEnemyLevel() / 3; + } + + //try feats first + if ( iSpell = GetGroupEnhanceFeat() ) + { + fRad = GetGroupEnhanceFeatRadius( iSpell ); + vU = GetPosition( OBJECT_SELF ); + vT = GetFriendlyAreaTarget( fRad, iSpell, 1 ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lLoc = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lLoc, TRUE ); + ActionUseFeat( iSpell, OBJECT_SELF ); + return TRUE; + } + } + //then spells + if ( iSpell = GetGroupEnhanceSpell( iMinLvl ) ) + { + fRad = GetGroupEnhanceSpellRadius( iSpell ); + vU = GetPosition( OBJECT_SELF ); + vT = GetFriendlyAreaTarget( fRad, iSpell ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lLoc = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + //ActionCastSpellAtLocation( iSpell, lLoc ); + NO_ActionCastSpellAtLocation( iSpell, lLoc ); + return TRUE; + } + } + return FALSE; +} + +int DoSpellGroupHeal() +{ + int iSpell, iMinLvl, iHeal; + float fRad = 0.0; + vector vT, vU, vX; + location lLoc, lMove; + float fDam; + object oT; + + if ( GetIsObjectValid( oT = GetTarget() ) ) + { + iMinLvl = GetAverageEnemyLevel() / 3; + } + + if ( iSpell = GetGroupHealSpell( iMinLvl ) ) + { + iHeal = GetGroupHealSpellAmount( iSpell ); + fRad = GetGroupHealSpellRadius( iSpell ); + vU = GetPosition( OBJECT_SELF ); + vT = GetAreaHealTarget( fRad, iHeal ); + lLoc = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + fDam = GetAllyDamageStats( lLoc, fRad ); + if ( VectorMagnitude( vT ) > 0.0 && IntToFloat( iHeal ) < fDam ) + { + //ActionCastSpellAtLocation( iSpell, lLoc ); + NO_ActionCastSpellAtLocation( iSpell, lLoc ); + return TRUE; + } + } + return FALSE; +} + +int DoDispelPersAOE() +{ + vector vT, vU; + location lT; + int iD; + + if ( ( iD = GetDispelSpell() ) == -1 ) + { + //no dispel capability available + return FALSE; + } + + if ( GetHostileAOECount( 30.0 ) ) + { + vU = GetPosition( OBJECT_SELF ); + vT = GetHostileAOEVector( 30.0 ); + lT = Location( GetArea( OBJECT_SELF ), vU + vT, VectorToAngle( vT ) ); + //ActionCastSpellAtLocation( iD, lT ); + NO_ActionCastSpellAtLocation( iD, lT ); + return TRUE; + } + return FALSE; +} + +int DoDispelSingle() +{ + object oTarget; + int iAverage = 0; + int iSpell = 0; + int iCL = GetMaxDispelCasterLevel(); + + if ( GetIsObjectValid( oTarget = GetMostBuffedEnemy( 30.0 ) ) ) + { + iAverage = GetAverageEffectCasterLevel( oTarget ); + if ( ( iSpell = GetBestDispel( iAverage, iCL ) ) ) + { + //PrintString( "DISPEL: " + GetName( OBJECT_SELF ) + " " + IntToString( iSpell ) + " " + GetName( oTarget ) ); + //ActionCastSpellAtObject( iSpell, oTarget ); + NO_ActionCastSpellAtObject( iSpell, oTarget ); + return TRUE; + } + } + return FALSE; +} + +int DoDismissal() +{ + int iSpell; + float fRad = RADIUS_SIZE_COLOSSAL; + object oT; + vector vT; + location lT; + + //banishment and dismissal is next optimal choices for enemy summons + iSpell = GetHasSpell( SPELL_BANISHMENT, OBJECT_SELF ) ? SPELL_BANISHMENT : SPELL_DISMISSAL; + if ( GetHasSpell( iSpell, OBJECT_SELF ) ) + { + vT = GetEnemySummonedAssociatesVector( fRad ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lT = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, VectorToAngle( vT ) ); + //ActionCastSpellAtLocation( iSpell, lT ); + NO_ActionCastSpellAtLocation( iSpell, lT ); + return TRUE; + } + } + //next check is to look for Outsiders and Elementals and clear them out with Word of Faith + //this will pick up against summoned and non-summoned planars + iSpell = SPELL_WORD_OF_FAITH; + if ( GetHasSpell( iSpell, OBJECT_SELF ) ) + { + vT = GetEnemyPlanarVector( fRad ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lT = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, VectorToAngle( vT ) ); + //ActionCastSpellAtLocation( iSpell, lT ); + NO_ActionCastSpellAtLocation( iSpell, lT ); + return TRUE; + } + } + //no dismissal, look for a summoned associate owner to use dispel magic on if we have it + if ( iSpell = GetDispelSpell() ) + { + //we have a dispel + if ( GetIsObjectValid( oT = GetStrongestEnemySummonedAssociateOwner( 30.0 ) ) ) + { + //ActionCastSpellAtObject( iSpell, oT ); + NO_ActionCastSpellAtObject( iSpell, oT ); + return TRUE; + } + } + return FALSE; +} + +int DoFastBuffs() +{ + int iSpell = 0; + int iCnt; + + if ( !GetLocalInt( OBJECT_SELF, "#FASTBUFFER" ) || GetLocalInt( OBJECT_SELF, "#FASTBUFFED" ) ) + { + return FALSE; + } + + iCnt = GenerateFastBuffList(); + + while ( iCnt ) + { + iSpell = GetLocalInt( OBJECT_SELF, "#SPL_FB" + IntToString( iCnt ) ); + ActionCastSpellAtObject( iSpell, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE ); + DeleteLocalInt( OBJECT_SELF, "#SPL_FB" + IntToString( iCnt-- ) ); + } + + if ( iSpell ) + { + return TRUE; + } + return FALSE; +} + +/* +int DoFlee() +{ + vector vT; + location lLoc; + + //if we have time stop running use the time to flee + + //if ( GetAttackerCount( 5.0 ) ) + if ( GetHostileCount( 5.0 ) ) + { + vT = GetHostileEvacVector( GetHostileVector( 15.0 ) ); + if ( VectorMagnitude( vT ) > 5.0 ) + { + SetLocalLocation( OBJECT_SELF, "#LASTHOTSPOT", GetLocation( OBJECT_SELF ) ); + SetLocalFloat( OBJECT_SELF, "#LASTAMANGLE", VectorToAngle( vT ) ); + vT = GetPosition( OBJECT_SELF ) - vT; + lLoc = Location( GetArea( OBJECT_SELF ), vT, VectorToAngle( vT ) ); + DoMoveToLocation( lLoc, TRUE ); + return TRUE; + } + } + return FALSE; +} +*/ + +int DoMeleeAssist() +{ + object oF, oE, oT, oTarget; + int iCnt1, iCnt2, iF, iE, iChat, iSpecial; + float fAssistRange = 30.0; + float fMeleeRange = 3.0; + float fRatio, fT, fDist, fDistMin; + + oT = OBJECT_INVALID; + fT = 1.0; + //look for a friend who needs assistance in melee + iCnt1 = 0; + oF = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt1, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oF ) && GetDistanceBetween( OBJECT_SELF, oF ) < fAssistRange ) + { + if ( GetObjectSeen( oF ) || GetObjectHeard( oF ) ) + { + iF = GetHitDice( oF ) + GetAllyHD( fMeleeRange, oF ); + iE = GetHostileHD( fMeleeRange, oF ); + fRatio = IntToFloat( iE ) / IntToFloat( iF ); + if ( fRatio > fT ) + { + fT = fRatio; + oT = oF; + } + } + oF = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt1, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( GetIsObjectValid( oT ) ) + { + //found a friend in trouble, stored highest enemy concentration to aid friend + //should be closest friend in a given melee + //get nearest enemy fighting friend + fDistMin = 100.0; + iCnt1 = 0; + oTarget = OBJECT_INVALID; + oE = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT, ++iCnt1, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oE ) ) + { + if ( GetObjectSeen( oE ) || GetObjectHeard( oE ) ) + { + if ( ( fDist = GetDistanceBetween( OBJECT_SELF, oE ) ) < fDistMin ) + { + oTarget = oE; + fDistMin = fDist; + } + } + oE = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT, ++iCnt1, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + //should now have a valid enemy to target, closest to me in target group + if ( GetIsObjectValid( oTarget ) ) + { + //SpeakString( "Assisting " + GetName( oT ) ); + DoEquipMelee( oTarget ); + DoVoiceChat( NO_VC_MELEEASSIST ); + if ( iSpecial = GetBestMeleeSpecial( oTarget ) ) + { + //use special attack type + ActionUseFeat( iSpecial, oTarget ); + } + else + { + ActionAttack( oTarget ); + } + return TRUE; + } + } + + //either nobody needs help or I couldn't find a target + return FALSE; +} + +int DoFlank( object oE=OBJECT_INVALID ) +{ + object oF = OBJECT_INVALID; + location lL = GetLocation( OBJECT_SELF ); + int iCnt = 0; + + if ( GetIsObjectValid( oE ) ) + { + oF = oE; + } + else + { + oE = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oE ) && !GetIsObjectValid( oF ) ) + { + if ( GetObjectSeen( oE, OBJECT_SELF ) || GetObjectHeard( oE, OBJECT_SELF ) ) + { + if ( GetDistanceBetween( oE, OBJECT_SELF ) > 10.0 ) + { + //enemy is seen or heard and more than 10.0 away, flank it + oF = oE; + } + else + { + //creature is within minimum range, abort flank + break; + } + } + oE = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + } + if ( GetIsObjectValid( oF ) ) + { + lL = GetFlankLoc( oF, lL ); + DoMoveToLocation( lL, TRUE ); + /*XXX + ActionDoCommand( DelayCommand( 1.0, DoCombat() ) ); + */ + return TRUE; + } + return FALSE; +} + +int DoMindBlast() +{ + vector vT; + object oT; + int iSpell = -69; + int iEnemies = GetHostileCount( 40.0 ); + int iEff; + float fRad = 15.0; + float fMinSrch = 0.0; + float fMaxSrch = 30.0; + location lMark; + + if ( iEnemies == 1 ) + { + oT = GetTarget(); + if ( GetIsObjectValid( oT ) ) + { + iEff = GetEffectsOnObject( oT ); + if ( ( iEff & NO_EFFECT_STUNNED ) + ( iEff & NO_EFFECT_PARALYZE ) + ( iEff & NO_EFFECT_DAZED ) == 0 ) + { + //target not stunned, paralyzed or dazed + //should switch to direct targetting once function is available + //ActionMindBlast( oT, GetLocation( oT ) ); + //ActionCastSpellAtObject( 1522, oT, METAMAGIC_ANY, TRUE ); + ActionCastSpellAtObject( CODI_MIND_BLAST, oT, METAMAGIC_ANY, TRUE ); + return TRUE; + } + } + } + else if ( iEnemies > 1 ) + { + vT = GetAreaTarget( iSpell, fRad, fMinSrch, fMaxSrch ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lMark = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, VectorToAngle( vT ) ); + //ActionMindBlast( OBJECT_INVALID, lMark ); + //ActionCastSpellAtLocation( 1522, lMark, METAMAGIC_ANY, TRUE ); + ActionCastSpellAtLocation( CODI_MIND_BLAST, lMark, METAMAGIC_ANY, TRUE ); + return TRUE; + } + } + return FALSE; +} + +int DoBrainExtraction() +{ + float fScanRange = 30.0; + float fImmRange = 10.0; + object oT = GetNearestAddledEnemyNoExtractor( fScanRange ); + int iCnt = 0; + int iC = 0; + int iH = 0; + int iEff; + int iDo = TRUE; + + if ( !GetIsObjectValid( oT ) ) + { + //look for non-petrified enemy close by + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + while ( GetIsObjectValid( oT ) && GetDistanceBetween( OBJECT_SELF, oT ) < fImmRange ) + { + if ( IsBrainExtractable( oT ) ) + { + break; + } + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + //double check we aren't looking at a petrified enemy + if ( GetIsObjectValid( oT ) ) + { + if ( !IsBrainExtractable( oT ) ) + { + oT = OBJECT_INVALID; + } + } + //see if we have decent chances of extracting + if ( GetIsObjectValid( oT ) ) + { + iDo = FALSE; + int iAttNorm = GetCreatureAttackBonus( OBJECT_SELF ); + int iDefAC = GetAC( oT ) - 10; + if ( iAttNorm > iDefAC ) + { + int iAttGrap = GetGrappleBonus( OBJECT_SELF ); + int iDefGrap = GetGrappleBonus( oT ); + if ( iAttGrap > iDefGrap ) + { + //we will probably hit and probably win a grapple + iDo = TRUE; + } + } + } + } + if ( GetIsObjectValid( oT ) && iDo ) + { + //got a target, go for the brains + SetLocalInt( oT, "#EXTRACTING", 1 ); + DelayCommand( 12.0, DeleteLocalInt( oT, "#EXTRACTING" ) ); //death redundancy + if ( GetDistanceBetween( OBJECT_SELF, oT ) > 10.0 ) + { + DoMoveToObject( oT, TRUE, 2.1 ); + } + //ActionHeadSuck( oT ); + //ActionCastSpellAtObject( 1523, oT, METAMAGIC_ANY, TRUE ); + ActionCastSpellAtObject( CODI_BRAIN_EXTRACT, oT, METAMAGIC_ANY, TRUE ); + ActionDoCommand( DeleteLocalInt( oT, "#EXTRACTING" ) ); + return TRUE; + } + return FALSE; +} + +int DoAvoidEnemies() +{ + object oE = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + vector vE; + vector vT; + location lL; + + if ( GetIsObjectValid( oE ) && GetDistanceBetween( OBJECT_SELF, oE ) < 15.0 ) + { + vE = GetHostileVector( 20.0 ); + vT = -10.0 * VectorNormalize( vE ); + lL = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lL, TRUE ); + /*XXX + ActionDoCommand( DelayCommand( 1.0, DoCombat() ) ); + */ + return TRUE; + } + else + { + vE = GetHostileVector( 20.0 ); + if ( VectorMagnitude( vE ) > 0.0 ) + { + vT = -10.0 * VectorNormalize( vE ); + } + else + { + vT = 5.0 * VectorNormalize( AngleToVector( IntToFloat( Random( 360 ) ) ) ); + } + lL = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, VectorToAngle( vT ) ); + DoMoveToLocation( lL, TRUE ); + /*XXX + ActionDoCommand( DelayCommand( 1.0, DoCombat() ) ); + */ + return TRUE; + } + //should never get down here + return FALSE; +} + +int DoGrenade() +{ + return FALSE; +} + +int DoBeholderRays() +{ + float fM = GetFacing( OBJECT_SELF ); + float fH; + float fS = 5.5 / BEHOLDER_MAX_RAYS; + int iRep = 95; //chance to use multiple rays on one target if enemies < rays + int iH = GetHostileCount( 40.0 ); + int iC = 0; + int iQ1 = 0; + int iQ2 = 0; + int iQ3 = 0; + int iQ4 = 0; + int iR = 0; + int iS; + int iM; + object oT; + + InitializeBeholderRaySelection(); + + if ( GetHasSpellEffect( SPELL_HASTE, OBJECT_SELF ) || GetHasSpellEffect( SPELL_MASS_HASTE, OBJECT_SELF ) && GetHasFeatEffect( FEAT_EPIC_BLINDING_SPEED, OBJECT_SELF ) ) + { + fS *= 0.5; + } + + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, ++iC, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( iC <= iH && iR < BEHOLDER_MAX_RAYS ) + { + iM = TRUE; //default is that we will not target multiple rays at individual targets + if ( GetIsObjectValid( oT ) == FALSE ) + { + //run out of targets unexpectedly + break; + } + else if ( GetIsPerceived( oT, NO_PERCEPTION_SEEN ) == FALSE && GetIsPerceived( oT, NO_PERCEPTION_HEARD ) == FALSE ) + { + //can't see or hear this creature, ignore it + iC++; + } + else + { + SetLocalInt( OBJECT_SELF, "#EYERAYS", 1 ); //flag the beholder as being busy shooting eye rays + //oT is valid, we can see or hear it + fH = VectorToAngle( GetPosition( oT ) - GetPosition( OBJECT_SELF ) ); + fH = fH < fM ? fH + 360.0 : fH; + fH -= fM; + if ( fH > 315.0 || fH < 45.0 ) + { + if ( iQ1 < 3 && GetIsCentralEyeOpen() == FALSE ) + { + //first quadrant target, still have rays available in this quadrant + iS = MatchRayToTarget( oT ); + if ( iS != 0 ) + { + iQ1++; + iR++; + RemoveBeholderRayFromSelection( iS ); + DelayCommand( fS * iR, DoFireBeholderRay( iS, oT ) ); + if ( iH - iC < BEHOLDER_MAX_RAYS - iR ) //we have more rays left to fire than enemies remaining to fire them at + { + if ( iQ1 < 3 && Random( 100 ) < iRep ) //we have rays left in this quadrant, random chance to shoot another at this target + { + iM = FALSE; //we will shoot more rays at this target, not moving on + } + } + } + } + } + else if ( fH < 135.0 ) + { + if ( iQ2 < 3 ) + { + //second quadrant target, still have rays available in this quadrant + iS = MatchRayToTarget( oT ); + if ( iS != 0 ) + { + iQ2++; + iR++; + RemoveBeholderRayFromSelection( iS ); + DelayCommand( fS * iR, DoFireBeholderRay( iS, oT ) ); + if ( iH - iC < BEHOLDER_MAX_RAYS - iR ) //we have more rays left to fire than enemies remaining to fire them at + { + if ( iQ2 < 3 && Random( 100 ) < iRep ) //we have rays left in this quadrant, random chance to shoot another at this target + { + iM = FALSE; //we will shoot more rays at this target, not moving on + } + } + } + } + } + else if ( fH < 225.0 ) + { + if ( iQ3 < 3 ) + { + //third quadrant target, still have rays available in this quadrant + iS = MatchRayToTarget( oT ); + if ( iS != 0 ) + { + iQ3++; + iR++; + RemoveBeholderRayFromSelection( iS ); + DelayCommand( fS * iR, DoFireBeholderRay( iS, oT ) ); + if ( iH - iC < BEHOLDER_MAX_RAYS - iR ) //we have more rays left to fire than enemies remaining to fire them at + { + if ( iQ3 < 3 && Random( 100 ) < iRep ) //we have rays left in this quadrant, random chance to shoot another at this target + { + iM = FALSE; //we will shoot more rays at this target, not moving on + } + } + } + } + } + else if ( iQ4 < 3 ) + { + //fourth quadrant target, still have rays available in this quadrant + iS = MatchRayToTarget( oT ); + if ( iS != 0 ) + { + iQ4++; + iR++; + RemoveBeholderRayFromSelection( iS ); + DelayCommand( fS * iR, DoFireBeholderRay( iS, oT ) ); + if ( iH - iC < BEHOLDER_MAX_RAYS - iR ) //we have more rays left to fire than enemies remaining to fire them at + { + if ( iQ4 < 3 && Random( 100 ) < iRep ) //we have rays left in this quadrant, random chance to shoot another at this target + { + iM = FALSE; //we will shoot more rays at this target, not moving on + } + } + } + } + } + //we're either getting the same target again or moving onto the next target + iC += iM; //if iM is true we are moving onto next target, iC is incremented, otherwise it stays where it is + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, iC, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + DelayCommand( fS * ( iR + 1 ), DeleteLocalInt( OBJECT_SELF, "#EYERAYS" ) ); + + ClearBeholderRaySelection(); + + if ( iR > 0 ) + { + //we have fired some rays + return TRUE; + } + //we have not fired any rays + return FALSE; +} + +int DoBeholderCentralEye() +{ + int iSpell = SPELL_BEH_ANTIMAGIC_CONE; + int iHostiles; + float fRad = RADIUS_SIZE_MEDIUM; + float fMinSearch = 2.5; + float fMaxSearch = fRad; + vector vT; + object oT; + location lMark; + int iMeta= METAMAGIC_ANY; + int iCheat = TRUE; + + if ( iSpell && GetLastAction() != "+CENTRALEYE" ) + { + iHostiles = GetHostileCount( 50.0 ); + if ( iHostiles == 1 ) + { + //we have a breath weapon ready to go, single target + oT = GetTarget(); + if ( oT != OBJECT_INVALID ) + { + //ActionCastSpellAtObject( iSpell, oT, iMeta, iCheat ); + NO_ActionCastSpellAtObject( iSpell, oT, iMeta, iCheat, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE, FALSE ); + SetIsCentralEyeOpen( TRUE ); + DoBeholderRays(); + SetIsCentralEyeOpen( FALSE ); + return TRUE; + } + } + else if ( iHostiles > 1 ) + { + //we have a breath weapon ready to go, multiple targets + vT = GetAreaTarget( iSpell, fRad, fMinSearch, fMaxSearch ); + if ( VectorMagnitude( vT ) > 0.0 ) + { + lMark = Location( GetArea( OBJECT_SELF ), GetPosition( OBJECT_SELF ) + vT, GetFacing( OBJECT_SELF ) ); + //ActionCastSpellAtLocation( iSpell, lMark ); + NO_ActionCastSpellAtLocation( iSpell, lMark, iMeta, iCheat, PROJECTILE_PATH_TYPE_DEFAULT, TRUE, FALSE ); + SetIsCentralEyeOpen( TRUE ); + DoBeholderRays(); + SetIsCentralEyeOpen( FALSE ); + return TRUE; + } + } + } + return FALSE; +} \ No newline at end of file diff --git a/_module/nss/no_lib_analysis.nss b/_module/nss/no_lib_analysis.nss new file mode 100644 index 00000000..aa444a9f --- /dev/null +++ b/_module/nss/no_lib_analysis.nss @@ -0,0 +1,2901 @@ +#include "no_inc_ptypes" + +//functions +int GetAOEThreat( object oArea, object oEnt=OBJECT_SELF ) +{ + string sArea; + + if ( GetIsObjectValid( oArea ) ) + { + sArea = GetTag( oArea ); + } + else + { + return 0; + } + + + if ( sArea == "VFX_PER_CREEPING_DOOM" ) + { + return 1; + } + if ( sArea == "VFX_PER_DARKNESS" ) + { + if ( GetHasSpellEffect( SPELL_TRUE_SEEING, oEnt ) || GetHasSpellEffect( SPELL_DARKVISION, oEnt ) ) + { + return 0; + } + return 1; + } + if ( sArea == "VFX_PER_DELAYED_BLAST_FIREBALL" ) + { + return 1; + } + if ( sArea == "VFX_PER_ENTANGLE" ) + { + if ( GetIsEnemy( GetAreaOfEffectCreator( oArea ), oEnt ) ) + { + return 1; + } + return 0; + } + if ( sArea == "VFX_PER_EVARDS_BLACK_TENTACLES" ) + { + if ( GetIsEnemy( GetAreaOfEffectCreator( oArea ), oEnt ) ) + { + return 1; + } + return 0; + } + if ( sArea == "VFX_PER_FOGACID" ) + { + return 1; + } + if ( sArea == "VFX_PER_FOGFIRE" ) + { + return 1; + } + if ( sArea == "VFX_PER_FOGKILL" ) + { + return 1; + } + if ( sArea == "VFX_PER_FOGMIND" ) + { + return 1; + } + if ( sArea == "VFX_PER_FOGSTINK" ) + { + return 1; + } + if ( sArea == "VFX_PER_GREASE" ) + { + return 1; + } + if ( sArea == "VFX_PER_STORM" ) + { + return 1; + } + if ( sArea == "VFX_PER_WALLBLADE" ) + { + return 1; + } + if ( sArea == "VFX_PER_WALLFIRE" ) + { + return 1; + } + if ( sArea == "VFX_PER_WEB" ) + { + return 1; + } + if ( sArea == "VFX_PER_FOGBEWILDERMENT" ) + { + return 1; + } + if ( sArea == "VFX_PER_STONEHOLD" ) + { + return 1; + } + return 0; +} + +int GetAOECount( float fRad=10.0f, object oEnt=OBJECT_SELF ) +{ + int iLoop = 1; + int iCnt = 0; + object oArea; + + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + while ( GetIsObjectValid( oArea ) && GetDistanceBetween( oEnt, oArea ) <= fRad ) + { + if ( GetAOEThreat( oArea ) ) + { + iCnt++; + } + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + } + + return iCnt; +} + +vector GetAOEVector( float fRad=10.0f, object oEnt=OBJECT_SELF ) +{ + int iLoop = 1; + vector vU = GetPosition( oEnt ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + object oArea; + + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + while ( GetIsObjectValid( oArea ) && GetDistanceBetween( oEnt, oArea ) <= fRad ) + { + if ( GetAOEThreat( oArea ) ) + { + vT = vT + GetPosition( oArea ) - vU; + } + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + } + + return vT; +} + +int GetHostileAOECount( float fRad=10.0f, object oEnt=OBJECT_SELF ) +{ + int iLoop = 1; + int iCnt = 0; + object oArea; + + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + while ( GetIsObjectValid( oArea ) && GetDistanceBetween( oEnt, oArea ) <= fRad ) + { + if ( GetIsEnemy( GetAreaOfEffectCreator( oArea ) ) ) + { + iCnt++; + } + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + } + + return iCnt; +} + +vector GetHostileAOEVector( float fRad=10.0f, object oEnt=OBJECT_SELF ) +{ + int iLoop = 1; + vector vU = GetPosition( oEnt ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + object oArea; + + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + while ( GetIsObjectValid( oArea ) && GetDistanceBetween( oEnt, oArea ) <= fRad ) + { + if ( GetIsEnemy( GetAreaOfEffectCreator( oArea ) ) ) + { + vT = vT + GetPosition( oArea ) - vU; + } + oArea = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oEnt, iLoop++ ); + } + + return vT; +} + +vector GetAOEEvacVector( vector vS, object oEnt=OBJECT_SELF ) +{ + vector vU = GetPosition( oEnt ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + + if ( vS != Vector( 0.0, 0.0, 0.0 ) ) + { + if ( GetLocalLocation( oEnt, "LASTLOC" ) == GetLocation( oEnt ) ) + { + //we've had location flag set, if matches we haven't moved + //probably stuck between wall and AOEs or paralyzed in AOEs + vT = vU + 15.0 * VectorNormalize( vS ); + } + else + { + //proceed away from AOEs + vT = vU - 15.0 * VectorNormalize( vS ); + } + } + else + { + //we know there was at least 1 area, must be on self + vT = vU + 15.0 * VectorNormalize( AngleToVector( IntToFloat( Random( 360 ) ) ) ); + } + + return vT; +} + +object GetMostDamagedAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + //gives higher weighting to non-summoned allies + object oSubject = oEnt; + object oHurt = OBJECT_INVALID; + int iCnt = 1; + int iDamage = 0; + + while ( GetIsObjectValid( oSubject ) && GetDistanceBetween( oEnt, oSubject ) < fRad ) + { + if ( GetObjectSeen( oSubject, oEnt ) >= iSee ) + { + iDamage = GetMaxHitPoints( oSubject ) - GetCurrentHitPoints( oSubject ); + if ( iDamage ) + { + if ( oHurt == OBJECT_INVALID ) + { + oHurt = oSubject; + } + else if ( ( GetMaxHitPoints( oHurt ) - GetCurrentHitPoints( oHurt ) ) < iDamage ) + { + if ( GetLocalInt( oHurt, "SUMMONED" ) || !GetLocalInt( oSubject, "SUMMONED" ) ) + { + oHurt = oSubject; + } + } + } + } + oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++ ); + } + return oHurt; +} + +object GetLowestHPAlly( float fRad=15.0, int iLim=0, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + object oSub = oEnt; + object oHurt = OBJECT_INVALID; + int iCnt = 0; + int iHP = 0; + int iSubHP; + int iDam; + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) < fRad ) + { + iDam = GetMaxHitPoints( oSub ) - GetCurrentHitPoints( oSub ); + if ( GetObjectSeen( oSub, oEnt ) >= iSee && iDam >= iLim ) + { + iSubHP = GetCurrentHitPoints( oSub ); + if ( !iHP || iSubHP < iHP ) + { + //either we haven't got an oHurt yet, or we do and oSub is on less HP + iHP = iSubHP; + oHurt = oSub; + } + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, ++iCnt ); + } + return oHurt; +} + +object GetLowestHPAllyNoHealer( float fRad=15.0, int iLim=0, object oEnt=OBJECT_SELF, int iSee=FALSE, int iLive=TRUE ) +{ + object oSub = oEnt; + object oHurt = OBJECT_INVALID; + int iCnt = 0; + int iHP = 0; + int iSubHP; + int iDam; + int iU; + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) < fRad ) + { + iU = GetRacialType( oSub ) == RACIAL_TYPE_UNDEAD; + if ( ( iLive || iU ) && ( !iLive || !iU ) ) + { + iDam = GetMaxHitPoints( oSub ) - GetCurrentHitPoints( oSub ); + if ( !GetIsObjectValid( GetLocalObject( oSub, "#HEALER" ) ) && GetObjectSeen( oSub, oEnt ) >= iSee && iDam >= iLim ) + { + iSubHP = GetCurrentHitPoints( oSub ); + if ( !iHP || iSubHP < iHP ) + { + //either we haven't got an oHurt yet, or we do and oSub is on less HP + iHP = iSubHP; + oHurt = oSub; + } + } + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, ++iCnt ); + } + return oHurt; +} + +object GetNearestDeadAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + int iCnt = 1; + object oDead = OBJECT_INVALID; + //object oSubject = GetNearestObject( OBJECT_TYPE_CREATURE, oEnt, iCnt++ ); + object oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, FALSE ); + + while ( !GetIsObjectValid( oDead ) && GetIsObjectValid( oSubject ) && GetDistanceBetween( oEnt, oSubject ) <= fRad ) + { + if ( GetObjectSeen( oSubject, oEnt ) >= iSee ) + { + oDead = oSubject; + } + oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, FALSE ); + } + return oDead; +} + +object GetNearestDeadAllyNoRaiser( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + int iCnt = 1; + object oDead = OBJECT_INVALID; + //object oSubject = GetNearestObject( OBJECT_TYPE_CREATURE, oEnt, iCnt++ ); + object oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, FALSE ); + + while ( !GetIsObjectValid( oDead ) && GetIsObjectValid( oSubject ) && GetDistanceBetween( oEnt, oSubject ) <= fRad ) + { + if ( GetObjectSeen( oSubject, oEnt ) >= iSee && !GetIsObjectValid( GetLocalObject( oSubject, "#RAISER" ) ) ) + { + oDead = oSubject; + } + oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, FALSE ); + } + return oDead; +} + +object GetNearestPetrifiedAllyNoHelper( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + int iCnt = 1; + int iEff; + object oPet = OBJECT_INVALID; + //object oSubject = GetNearestObject( OBJECT_TYPE_CREATURE, oEnt, iCnt++ ); + object oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( !GetIsObjectValid( oPet ) && GetIsObjectValid( oSubject ) && GetDistanceBetween( oEnt, oSubject ) <= fRad ) + { + if ( GetObjectSeen( oSubject, oEnt ) >= iSee && !GetIsObjectValid( GetLocalObject( oSubject, "#FLESHER" ) ) ) + { + if ( GetEffectsOnObject( oPet ) & 8192 ) //check for petrify effect + { + oPet = oSubject; + } + } + oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oPet; +} + +int GetEffectsOnObject( object oEnt=OBJECT_SELF ) +{ + int iTally = 0; + int iType; + effect eSubj; + + eSubj = GetFirstEffect( oEnt ); + while ( GetIsEffectValid( eSubj ) ) + { + if ( GetIsFriend( GetEffectCreator( eSubj ) ) ) + { + //probably a side-effect or intentionally there, ignore it + } + else + { + iType = GetEffectType( eSubj ); + if ( iType == EFFECT_TYPE_ABILITY_DECREASE || + iType == EFFECT_TYPE_AC_DECREASE || + iType == EFFECT_TYPE_ATTACK_DECREASE || + iType == EFFECT_TYPE_DAMAGE_DECREASE || + iType == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || + iType == EFFECT_TYPE_SAVING_THROW_DECREASE ) + { + iTally += NO_EFFECT_GENERIC; + } + else if ( iType == EFFECT_TYPE_DISEASE ) + { + iTally += NO_EFFECT_DISEASE; + } + else if ( iType == EFFECT_TYPE_CURSE ) + { + iTally += NO_EFFECT_CURSE; + } + else if ( iType == EFFECT_TYPE_POISON ) + { + iTally += NO_EFFECT_POISON; + } + else if ( iType == EFFECT_TYPE_DEAF ) + { + iTally += NO_EFFECT_DEAF; + } + else if ( iType == EFFECT_TYPE_BLINDNESS ) + { + iTally += NO_EFFECT_BLINDNESS; + } + else if ( iType == EFFECT_TYPE_SILENCE ) + { + iTally += NO_EFFECT_SILENCE; + } + else if ( iType == EFFECT_TYPE_NEGATIVELEVEL ) + { + iTally += NO_EFFECT_NEGATIVELEVEL; + } + else if ( iType == EFFECT_TYPE_DAZED ) + { + iTally += NO_EFFECT_DAZED; + } + else if ( iType == EFFECT_TYPE_FRIGHTENED ) + { + iTally += NO_EFFECT_FRIGHTENED; + } + else if ( iType == EFFECT_TYPE_CONFUSED ) + { + iTally += NO_EFFECT_CONFUSED; + } + else if ( iType == EFFECT_TYPE_CHARMED ) + { + iTally += NO_EFFECT_CHARMED; + } + else if ( iType == EFFECT_TYPE_SLEEP ) + { + iTally += NO_EFFECT_SLEEP; + } + else if ( iType == EFFECT_TYPE_STUNNED ) + { + iTally += NO_EFFECT_STUNNED; + } + else if ( iType == EFFECT_TYPE_DOMINATED ) + { + iTally += NO_EFFECT_DOMINATED; + } + else if ( iType == EFFECT_TYPE_PETRIFY ) + { + iTally += NO_EFFECT_PETRIFY; + } + else if ( iType == EFFECT_TYPE_PARALYZE ) + { + iTally += NO_EFFECT_PARALYZE; + } + } + eSubj = GetNextEffect( oEnt ); + } + return iTally; +} + +object GetMostHamperedAlly( float fRad=15.0f, object oEnt=OBJECT_SELF, int iSee=FALSE ) +{ + object oSubject = oEnt; + object oHurt = OBJECT_INVALID; + int iCnt = 1; + int iEff = 0; + + while ( GetIsObjectValid( oSubject ) && GetDistanceBetween( oEnt, oSubject ) <= fRad ) + { + //if ( GetObjectSeen( oSubject, oEnt ) >= iSee && !GetIsObjectValid( GetLocalObject( oHurt, "HELPER" ) ) ) + if ( GetObjectSeen( oSubject, oEnt ) >= iSee && !GetIsObjectValid( GetLocalObject( oSubject, "HELPER" ) ) ) + { + iEff = GetEffectsOnObject( oSubject ); + if ( iEff ) + { + if ( GetIsObjectValid( oHurt ) ) + { + if ( GetEffectsOnObject( oHurt ) < iEff ) + { + oHurt = oSubject; + } + } + else + { + oHurt = oSubject; + } + } + } + oSubject = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++ ); + } + return oHurt; +} + +vector GetAreaTarget( int iS, float fRad, float fMinRad=7.5, float fMaxRad=30.0, int iEffChk=TRUE, object oCaster=OBJECT_SELF ) +{ + vector vU = GetPosition( oCaster ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + object oSub1 = OBJECT_INVALID; + object oSub2 = OBJECT_INVALID; + int iCnt1 = 0; + int iCnt2 = 0; + int iCnt3 = 0; + int iBestCnt = 0; + float fMinSearchRad = fMinRad; + float fMaxSearchRad = fMaxRad; + + oSub1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //first pad out to fMinSearchRad + while ( GetIsObjectValid( oSub1 ) && GetDistanceBetween( oCaster, oSub1 ) <= fMinSearchRad ) + { + oSub1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + //now scan from 7.5 out to 40.0 + while ( GetIsObjectValid( oSub1 ) && GetDistanceBetween( oCaster, oSub1 ) <= fMaxSearchRad ) + { + iCnt2 = 0; + iCnt3 = 0; + //don't count them as target if they're on the move + if ( GetCurrentAction( oSub1 ) != ACTION_MOVETOPOINT && ( !iEffChk || !GetHasSpellEffect( iS, oSub1 ) ) ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oSub1 ) - vU; + + //oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oSub2 ) && GetDistanceBetween( oSub1, oSub2 ) <= fRad ) + { + //SpeakString( "TH: " + GetName( oSub1 ) + " -> " + GetName( oSub2 ) ); + //don't count them as target if they're on the move + if ( GetObjectSeen( oSub2, oCaster ) && GetCurrentAction( oSub2 ) != ACTION_MOVETOPOINT && ( !iEffChk || !GetHasSpellEffect( iS, oSub2 ) ) ) + { + iCnt3++; + vT = vT + GetPosition( oSub2 ) - vU; + } + //oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + } + if ( iCnt3 > iBestCnt ) + { + vS = VectorNormalize( vT ) * ( VectorMagnitude( vT ) / IntToFloat( iCnt3 ) ); + iBestCnt = iCnt3; + } + oSub1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + //vS should now be averaged central vector to densest concentration of enemies + //iBestCnt is count of enemies within radius of spell at this point + if ( iBestCnt > 1 ) + //if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +vector GetFriendlyAreaTarget( float fRad, int iSpell=0, int iType=0, object oCaster=OBJECT_SELF ) +{ + vector vU = GetPosition( oCaster ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + object oSub1 = OBJECT_INVALID; + object oSub2 = OBJECT_INVALID; + int iCnt1 = 0; + int iCnt2 = 0; + int iCnt3 = 0; + int iBestCnt = 0; + float fMaxSearchRad = 30.0; + + oSub1 = oCaster; + while ( GetIsObjectValid( oSub1 ) && GetDistanceBetween( oCaster, oSub1 ) <= fMaxSearchRad ) + { + if ( ( !iType && !GetHasSpellEffect( iSpell, oSub1 ) ) || ( iType && !GetHasFeatEffect( iSpell, oSub1 ) ) ) + { + iCnt2 = 0; + iCnt3 = 0; + //don't count them as target if they're on the move + //if ( GetCurrentAction( oSub1 ) != ACTION_MOVETOPOINT ) + //temp for goblin test + if ( TRUE ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oSub1 ) - vU; + } + oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oSub2 ) && GetDistanceBetween( oSub1, oSub2 ) <= fRad ) + { + //don't count them as target if they're on the move + //if ( GetObjectSeen( oSub2, oCaster ) && GetCurrentAction( oSub2 ) != ACTION_MOVETOPOINT ) + if ( GetObjectSeen( oSub2, oCaster ) && + ( ( !iType && !GetHasSpellEffect( iSpell, oSub2 ) ) || ( iType && !GetHasFeatEffect( iSpell, oSub2 ) ) ) ) + { + iCnt3++; + vT = vT + GetPosition( oSub2 ) - vU; + } + oSub2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oSub1, ++iCnt2, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iCnt3 > iBestCnt ) + { + vS = vT / IntToFloat( iCnt3 ); + iBestCnt = iCnt3; + } + } + oSub1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + //vS should now be averaged central vector to densest concentration of enemies + //iBestCnt is count of enemies within radius + //if ( iBestCnt > 1 ) + if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +int CanAct( object oSelf=OBJECT_SELF ) +{ + int iType; + effect eEff = GetFirstEffect( oSelf ); + + if ( GetIsDead( oSelf ) || GetLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ) ) + { + return FALSE; + } + + while ( GetIsEffectValid( eEff ) ) + { + iType = GetEffectType( eEff ); + if ( iType == EFFECT_TYPE_CONFUSED || + iType == EFFECT_TYPE_DAZED || + iType == EFFECT_TYPE_FRIGHTENED || + iType == EFFECT_TYPE_PARALYZE || + iType == EFFECT_TYPE_PETRIFY || + iType == EFFECT_TYPE_SLEEP || + iType == EFFECT_TYPE_STUNNED || + iType == EFFECT_TYPE_TURNED || + GetLocalInt( oSelf, "DRAGONFLIGHTDEL" ) == TRUE + ) + { + return FALSE; + } + eEff = GetNextEffect( oSelf ); + } + return TRUE; +} + +int GetIsWeapon( object oWeapon ) +{ + int iType; + + if ( GetIsObjectValid( oWeapon ) && ( iType = GetBaseItemType( oWeapon ) ) != BASE_ITEM_INVALID ) + { + if ( + iType == BASE_ITEM_BASTARDSWORD || + iType == BASE_ITEM_BATTLEAXE || + iType == BASE_ITEM_CLUB || + iType == BASE_ITEM_DAGGER || + iType == BASE_ITEM_DART || + iType == BASE_ITEM_DIREMACE || + iType == BASE_ITEM_DOUBLEAXE || + iType == BASE_ITEM_GREATAXE || + iType == BASE_ITEM_GREATSWORD || + iType == BASE_ITEM_HALBERD || + iType == BASE_ITEM_HANDAXE || + iType == BASE_ITEM_HEAVYCROSSBOW || + iType == BASE_ITEM_HEAVYFLAIL || + iType == BASE_ITEM_KAMA || + iType == BASE_ITEM_KATANA || + iType == BASE_ITEM_KUKRI || + iType == BASE_ITEM_LIGHTFLAIL || + iType == BASE_ITEM_LIGHTHAMMER || + iType == BASE_ITEM_LIGHTMACE || + iType == BASE_ITEM_LONGBOW || + iType == BASE_ITEM_LONGSWORD || + iType == BASE_ITEM_MAGICSTAFF || + iType == BASE_ITEM_MORNINGSTAR || + iType == BASE_ITEM_QUARTERSTAFF || + iType == BASE_ITEM_RAPIER || + iType == BASE_ITEM_SCIMITAR || + iType == BASE_ITEM_SCYTHE || + iType == BASE_ITEM_SHORTBOW || + iType == BASE_ITEM_SHORTSPEAR || + iType == BASE_ITEM_SHORTSWORD || + iType == BASE_ITEM_SHURIKEN || + iType == BASE_ITEM_SICKLE || + iType == BASE_ITEM_SLING || + iType == BASE_ITEM_THROWINGAXE || + iType == BASE_ITEM_TORCH || + iType == BASE_ITEM_TWOBLADEDSWORD || + iType == BASE_ITEM_WARHAMMER + ) + { + return TRUE; + } + } + return FALSE; +} + +int GetIsLightWeapon( object oWeapon, int iCanBeInvalid=FALSE ) +{ + int iType; + + if ( GetIsObjectValid( oWeapon ) && ( iType = GetBaseItemType( oWeapon ) ) != BASE_ITEM_INVALID ) + { + if ( + //iType == BASE_ITEM_BASTARDSWORD || + //iType == BASE_ITEM_BATTLEAXE || + iType == BASE_ITEM_CLUB || + iType == BASE_ITEM_DAGGER || + //iType == BASE_ITEM_DART || + //iType == BASE_ITEM_DIREMACE || + //iType == BASE_ITEM_DOUBLEAXE || + //iType == BASE_ITEM_GREATAXE || + //iType == BASE_ITEM_GREATSWORD || + //iType == BASE_ITEM_HALBERD || + iType == BASE_ITEM_HANDAXE || + //iType == BASE_ITEM_HEAVYCROSSBOW || + //iType == BASE_ITEM_HEAVYFLAIL || + iType == BASE_ITEM_KAMA || + //iType == BASE_ITEM_KATANA || + iType == BASE_ITEM_KUKRI || + iType == BASE_ITEM_LIGHTFLAIL || + iType == BASE_ITEM_LIGHTHAMMER || + iType == BASE_ITEM_LIGHTMACE || + //iType == BASE_ITEM_LONGBOW || + //iType == BASE_ITEM_LONGSWORD || + //iType == BASE_ITEM_MAGICSTAFF || + //iType == BASE_ITEM_MORNINGSTAR || + //iType == BASE_ITEM_QUARTERSTAFF || + iType == BASE_ITEM_RAPIER || + //iType == BASE_ITEM_SCIMITAR || + //iType == BASE_ITEM_SCYTHE || + //iType == BASE_ITEM_SHORTBOW || + //iType == BASE_ITEM_SHORTSPEAR || + iType == BASE_ITEM_SHORTSWORD || + //iType == BASE_ITEM_SHURIKEN || + iType == BASE_ITEM_SICKLE //|| + //iType == BASE_ITEM_SLING || + //iType == BASE_ITEM_THROWINGAXE || + //iType == BASE_ITEM_TORCH || + //iType == BASE_ITEM_TWOBLADEDSWORD || + //iType == BASE_ITEM_WARHAMMER + ) + { + return TRUE; + } + } + else if ( !GetIsObjectValid( oWeapon ) && iCanBeInvalid ) + { + //special case for unarmed + return TRUE; + } + return FALSE; +} + +int GetIsDoubleWeapon( object oWeapon ) +{ + int iType; + + if ( GetIsObjectValid( oWeapon ) && ( iType = GetBaseItemType( oWeapon ) ) != BASE_ITEM_INVALID ) + { + if ( + //iType == BASE_ITEM_BASTARDSWORD || + //iType == BASE_ITEM_BATTLEAXE || + //iType == BASE_ITEM_CLUB || + //iType == BASE_ITEM_DAGGER || + //iType == BASE_ITEM_DART || + iType == BASE_ITEM_DIREMACE || + iType == BASE_ITEM_DOUBLEAXE || + //iType == BASE_ITEM_GREATAXE || + //iType == BASE_ITEM_GREATSWORD || + //iType == BASE_ITEM_HALBERD || + //iType == BASE_ITEM_HANDAXE || + //iType == BASE_ITEM_HEAVYCROSSBOW || + //iType == BASE_ITEM_HEAVYFLAIL || + //iType == BASE_ITEM_KAMA || + //iType == BASE_ITEM_KATANA || + //iType == BASE_ITEM_KUKRI || + //iType == BASE_ITEM_LIGHTFLAIL || + //iType == BASE_ITEM_LIGHTHAMMER || + //iType == BASE_ITEM_LIGHTMACE || + //iType == BASE_ITEM_LONGBOW || + //iType == BASE_ITEM_LONGSWORD || + //iType == BASE_ITEM_MAGICSTAFF || + //iType == BASE_ITEM_MORNINGSTAR || + //iType == BASE_ITEM_QUARTERSTAFF || + //iType == BASE_ITEM_RAPIER || + //iType == BASE_ITEM_SCIMITAR || + //iType == BASE_ITEM_SCYTHE || + //iType == BASE_ITEM_SHORTBOW || + //iType == BASE_ITEM_SHORTSPEAR || + //iType == BASE_ITEM_SHORTSWORD || + //iType == BASE_ITEM_SHURIKEN || + //iType == BASE_ITEM_SICKLE || + //iType == BASE_ITEM_SLING || + //iType == BASE_ITEM_THROWINGAXE || + //iType == BASE_ITEM_TORCH || + iType == BASE_ITEM_TWOBLADEDSWORD //|| + //iType == BASE_ITEM_WARHAMMER + ) + { + return TRUE; + } + } + return FALSE; +} + +int GetCasterCount( float fRad=5.0, object oEnt=OBJECT_SELF ) +{ + int iCnt = 1; + int iCast = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + + while ( GetIsObjectValid( oSub ) ) + { + if ( !GetIsDead( oSub ) && GetIsCaster( oSub ) ) + { + iCast++; + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + return iCast; +} + +int GetAttackerCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iAtk = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetAttackTarget( oSub ) == oEnt ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iAtk++; + } + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iAtk; +} + +int GetHostileCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iEnemy = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iEnemy++; + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iEnemy; +} + +int GetOmniscientHostileCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iEnemy = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + iEnemy++; + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iEnemy; +} + +int GetAllyCount( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iAlly = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iAlly++; + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iAlly; +} + +int GetAttackerHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iAtk = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetAttackTarget( oSub ) == oEnt ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iAtk += GetHitDice( oSub ); + } + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iAtk; +} + +int GetHostileHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iEnemy = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iEnemy += GetHitDice( oSub ); + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iEnemy; +} + +int GetAllyHD( float fRad=5.0, object oEnt=OBJECT_SELF, object oS=OBJECT_SELF ) +{ + int iCnt = 1; + int iAlly = 0; + object oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + if ( GetObjectSeen( oSub, oS ) || GetObjectHeard( oSub, oS ) ) + { + iAlly += GetHitDice( oSub ); + } + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return iAlly; +} + +vector GetHostileVector( float fRad=10.0f, object oEnt=OBJECT_SELF ) +{ + int iCnt = 1; + int iNum = 0; + vector vU = GetPosition( oEnt ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + object oSub; + + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oSub ) && GetDistanceBetween( oEnt, oSub ) <= fRad ) + { + iNum++; + vT = vT + GetPosition( oSub ) - vU; + oSub = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( iNum ) + { + vT = vT / IntToFloat( iNum ); + } + return vT; +} + +vector GetHostileEvacVector( vector vS, object oEnt=OBJECT_SELF ) +{ + vector vU = GetPosition( oEnt ); + vector vT = Vector( 0.0, 0.0, 0.0 ); + int iR = GetLocalInt( oEnt, "#LASTHSRETRIES" ); + + if ( VectorMagnitude( vS ) > 0.0 ) + { + if ( GetLocalLocation( oEnt, "#LASTHOTSPOT" ) == GetLocation( oEnt ) ) + { + if ( !iR ) + { + iR++; + vT = 10.0 * VectorNormalize( AngleToVector( GetLocalFloat( oEnt, "#LASTAMANGLE" ) - 90.0 + 180.0 * IntToFloat( Random( 2 ) ) ) ); + } + else + { + iR--; + } + } + else + { + + vT = 10.0 * VectorNormalize( vS ); + } + } + else + { + vT = 10.0 * VectorNormalize( AngleToVector( IntToFloat( Random( 360 ) ) ) ); + } + if ( iR ) + { + SetLocalInt( oEnt, "#LASTHSRETRIES", iR ); + } + else + { + DeleteLocalInt( oEnt, "#LASTHSRETRIES" ); + } + return vT; +} + +int GetIsCaster( object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + + if ( GetLevelByClass( CLASS_TYPE_BARD, oEnt ) || + GetLevelByClass( CLASS_TYPE_CLERIC, oEnt ) || + GetLevelByClass( CLASS_TYPE_DRUID, oEnt ) || + GetLevelByClass( CLASS_TYPE_PALADIN, oEnt ) > 4 || + GetLevelByClass( CLASS_TYPE_RANGER, oEnt ) > 4 || + GetLevelByClass( CLASS_TYPE_SORCERER, oEnt ) || + GetLevelByClass( CLASS_TYPE_WIZARD, oEnt ) || + GetLocalInt( oEnt, "#CASTER" ) ) + { + return TRUE; + } + return FALSE; +} + +int DoAbilityCheck( int iAbil, int iDC, object oEnt=OBJECT_SELF ) +{ + if ( d20() + GetAbilityModifier( iAbil, oEnt ) >= iDC ) + { + return TRUE; + } + return FALSE; +} + +int DoCombatKnowledgeCheck( int iBAB=FALSE, int iDC=10, object oE=OBJECT_SELF ) +{ + int iM = iBAB == TRUE ? GetBaseAttackBonus( oE ) : GetAbilityModifier( ABILITY_INTELLIGENCE, oE ); + + if ( d20() + iM >= iDC ) + { + return TRUE; + } + return FALSE; +} + +float GetFriendFoeRatio( location lLoc, float fRad, object oEnt=OBJECT_SELF ) +{ + object oSub; + int iEnemies = 0; + int iFriends = 0; + + oSub = GetFirstObjectInShape( SHAPE_SPHERE, fRad, lLoc ); + while ( GetIsObjectValid( oSub ) ) + { + if ( !GetIsDead( oSub ) ) + { + if ( GetIsEnemy( oSub ) ) + { + iEnemies++; + } + else if ( !GetIsReactionTypeFriendly( oSub, oEnt ) && !GetIsObjectValid( GetMaster( oSub ) ) ) + { + iFriends++; + } + } + oSub = GetNextObjectInShape( SHAPE_SPHERE, fRad, lLoc ); + } + if ( !iFriends ) + { + //no friends in area, ensure that this will be considered a good choice + return 100.0; + } + return IntToFloat( iEnemies ) / iFriends; +} + +float GetFriendFoeTolerance( object oEnt=OBJECT_SELF ) +{ + float fTol = 2.0; + int iGE = GetAlignmentGoodEvil( oEnt ); + int iLC = GetAlignmentLawChaos( oEnt ); + + if ( iGE == ALIGNMENT_GOOD ) + { + fTol *= 2.0; + } + else if ( iGE == ALIGNMENT_EVIL ) + { + fTol *= 0.5; + } + + if ( iLC == ALIGNMENT_LAWFUL ) + { + fTol *= 2.0; + } + else if ( iLC == ALIGNMENT_CHAOTIC ) + { + fTol *= 0.5; + } + + return fTol; +} + +object GetNearestEnemyCaster( int iMaxLvl=20, int iMinLvl=1, object oEnt=OBJECT_SELF ) +{ + int iCnt = 1; + object oC = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oC ) ) + { + if ( GetIsCaster( oC ) ) + { + break; + } + oC = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oC; +} + +int GetAverageEnemyLevel( float fRad=60.0, object oEnt=OBJECT_SELF ) +{ + int iNum = 0; + int iHD = 0; + int iCnt = 1; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oEnt, oT ) <= fRad ) + { + iHD += GetHitDice( oT ); + iNum++; + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( iNum ) + { + return iHD / iNum; + } + return 0; +} + +int GetSafeAverageEnemyLevel( float fRad=40.0, object oEnt=OBJECT_SELF ) +{ + int iNum = 0; + int iHD = 0; + int iHDTotal = 0; + int iMin = 100; + int iMax = 0; + int iCnt = 0; + int iLvl = 0; + float fHD; + float fLower, fUpper; + float fAvg = 0.0; + float fStd = 0.0; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + + //build list of enemy hit dice + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oEnt, oT ) <= fRad ) + { + iHD = GetHitDice( oT ); + iHDTotal += iHD; + iNum++; + if ( iHD < iMin ) + { + iMin = iHD; + } + if ( iHD > iMax ) + { + iMax = iHD; + } + //record the value + SetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( iNum ), iHD ); + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( iNum < 1 ) + { + //if we didn't count any enemies bail out here + iLvl = 0; + } + else + { + fAvg = IntToFloat( iHDTotal ) / iNum; + iLvl = FloatToInt( fAvg ); + + //check to see if pruning is necessary + if ( iMax - iMin > 5 ) + { + //wide range, may need some pruning + //get std dev + iCnt = 0; + iHD = GetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( ++iCnt ) ); + while ( iHD ) + { + fStd += pow( IntToFloat( iHD ) - fAvg, 2.0 ); + iHD = GetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( ++iCnt ) ); + } + fStd = sqrt( fStd / iNum ); + fLower = fAvg - fStd; + fUpper = fAvg + fStd; + iHDTotal = 0; + iCnt = 0; + iNum = 0; + iHD = GetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( ++iCnt ) ); + while ( iHD ) + { + fHD = IntToFloat( iHD ); + if ( fHD > fLower && fHD <= fUpper ) + { + iNum++; + iHDTotal += iHD; + } + iHD = GetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( ++iCnt ) ); + } + if ( !iNum ) + { + iLvl = iMax; + } + else + { + fAvg = IntToFloat( iHDTotal ) / iNum; + iLvl = FloatToInt( fAvg ); + } + } + } + //clean up local vars + iCnt = 0; + while ( GetLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( ++iCnt ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#SAELDATA_" + IntToString( iCnt ) ); + } + if ( iLvl == 0 ) + { + return iMax; + } + return iLvl; +} + +object GetLeastMagicDefendedEnemy( float fRad=5.0, object oEnt=OBJECT_SELF ) +{ + struct sSpellDefStatus strMDef; + object oS; + object oC; + int iCnt = 0; + int iDef = 100000; + + oC = OBJECT_INVALID; + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oS ) ) + { + strMDef = EvaluateSpellDefenses( oS ); + if ( strMDef.iTotal < iDef ) + { + oC = oS; + iDef = strMDef.iTotal; + } + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oC; +} + +vector GetTurningVector( object oEnt=OBJECT_SELF ) +{ + int iCnt1, iCnt2, iCnt3, iBestCnt; + float fRad = 20.0; + vector vT = Vector( 0.0, 0.0, 0.0 ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vU = GetPosition( oEnt ); + object oT1, oT2; + int iTurnLvl = GetTurningLevel( oEnt ); + + iCnt1 = 0; + iBestCnt = 0; + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //PrintString( "TU: " + GetName( oT1 ) ); + while ( GetIsObjectValid( oT1 ) && GetDistanceBetween( oEnt, oT1 ) <= 40.0f ) + { + iCnt2 = 0; + iCnt3 = 0; + if ( GetIsValidTurnTarget( oT1, iTurnLvl ) ) + { + //PrintString( "TUV: " + GetName( oT1 ) ); + if ( GetHasFeatEffect( FEAT_TURN_UNDEAD, oT1 ) == FALSE && GetCurrentAction( oT1 ) != ACTION_MOVETOPOINT ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oT1 ) - vU; + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oT2 ) && GetDistanceBetween( oT1, oT2 ) <= fRad ) + { + //don't count them as target if they're on the move + if ( GetHasFeatEffect( FEAT_TURN_UNDEAD, oT2 ) == FALSE && GetCurrentAction( oT2 ) != ACTION_MOVETOPOINT ) + { + if ( GetIsValidTurnTarget( oT2, iTurnLvl ) ) + { + iCnt3++; + vT = vT + GetPosition( oT2 ) - vU; + } + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iCnt3 > iBestCnt ) + { + vS = vT / IntToFloat( iCnt3 ); + iBestCnt = iCnt3; + } + } + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +int GetIsValidTurnTarget( object oT, int iL=0, object oEnt=OBJECT_SELF ) +{ + int iElemental; + int iVermin; + int iConstructs; + int iOutsider; + int iRace; + int iTurn = 0; + + //compare hit dice of this target to my turning level, if hd > turning level +4 we can't turn it, abort + if ( GetHitDice( oT ) > iL + 4 ) + { + return 0; + } + + iElemental = GetHasFeat( FEAT_AIR_DOMAIN_POWER ) + GetHasFeat( FEAT_EARTH_DOMAIN_POWER ) + GetHasFeat( FEAT_FIRE_DOMAIN_POWER ) + GetHasFeat( FEAT_WATER_DOMAIN_POWER ); + iVermin = GetHasFeat( FEAT_PLANT_DOMAIN_POWER ) + GetHasFeat( FEAT_ANIMAL_COMPANION ); + iConstructs = GetHasFeat( FEAT_DESTRUCTION_DOMAIN_POWER ); + iOutsider = GetHasFeat( FEAT_GOOD_DOMAIN_POWER ) + GetHasFeat( FEAT_EVIL_DOMAIN_POWER ); + iRace = GetRacialType( oT ); + + if ( iRace == RACIAL_TYPE_UNDEAD ) + { + iTurn = 1; + } + else if ( iRace == RACIAL_TYPE_ELEMENTAL && iElemental ) + { + iTurn = 1; + } + else if ( iRace == RACIAL_TYPE_VERMIN && iVermin ) + { + iTurn = 1; + } + else if ( iRace == RACIAL_TYPE_CONSTRUCT && iConstructs) + { + iTurn = 1; + } + else if ( iRace == RACIAL_TYPE_OUTSIDER && iOutsider ) + { + iTurn = 1; + } + + return iTurn; +} + +int GetPotionHealAmount( object oP ) +{ + int iHeal = 0; + string sP = GetResRef( oP ); + + if ( sP == "nw_it_mpotion002" ) + { + //cure light wounds + iHeal = 10; + } + else if ( sP == "nw_it_mpotion021" ) + { + //cure moderate wounds + iHeal = 20; + } + else if ( sP == "nw_it_mpotion003" ) + { + //cure serious wounds + iHeal = 30; + } + else if ( sP == "nw_it_mpotion004" ) + { + //cure critical wounds + iHeal = 40; + } + else if ( sP == "nw_it_mpotion013" ) + { + //heal + iHeal = 60; + } + return iHeal; +} + +int GetTalentPotionHealAmount( talent tP ) +{ + int iHeal = 0; + int iP = GetIdFromTalent( tP ); + + if ( iP == 32 ) + { + //cure light wounds + iHeal = 10; + } + else if ( iP == 34 ) + { + //cure moderate wounds + iHeal = 20; + } + else if ( iP == 35 ) + { + //cure serious wounds + iHeal = 30; + } + else if ( iP == 31 ) + { + //cure critical wounds + iHeal = 40; + } + else if ( iP == 79 ) + { + //heal + iHeal = 60; + } + return iHeal; +} + +/* +==================== +GetAreaHealTarget: + +Looks for a suitable group of allies to cast a particular group healing spell on. +==================== +*/ +vector GetAreaHealTarget( float fRad=0.0, int iH=0, object oEnt=OBJECT_SELF ) +{ + int iCnt1, iCnt2, iCnt3, iBestCnt, iDam; + vector vT = Vector( 0.0, 0.0, 0.0 ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vU = GetPosition( oEnt ); + object oT1, oT2; + float fMaxSearchRad = 30.0; + + iCnt1 = 0; + iBestCnt = 0; + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oT1 ) && GetDistanceBetween( oEnt, oT1 ) <= fMaxSearchRad ) + { + iCnt2 = 0; + iCnt3 = 0; + iDam = GetMaxHitPoints( oT1 ) - GetCurrentHitPoints( oT1 ); + if ( iDam >= iH ) + { + if ( GetCurrentAction( oT1 ) != ACTION_MOVETOPOINT ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oT1 ) - vU; + } + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oT2 ) && GetDistanceBetween( oT1, oT2 ) <= fRad ) + { + //don't count them as target if they're on the move + if ( GetCurrentAction( oT2 ) != ACTION_MOVETOPOINT ) + { + iDam = GetMaxHitPoints( oT2 ) - GetCurrentHitPoints( oT2 ); + if ( iDam <= iH ) + { + iCnt3++; + vT = vT + GetPosition( oT2 ) - vU; + } + } + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iCnt3 > iBestCnt ) + { + vS = vT / IntToFloat( iCnt3 ); + iBestCnt = iCnt3; + } + } + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +float GetAllyDamageStats( location lT, float fRad=0.0, object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iDam = 0; + float fDam = 0.0; + object oS = GetNearestObjectToLocation( OBJECT_TYPE_CREATURE, lT, ++iCnt ); + + while ( GetIsObjectValid( oS ) && GetDistanceBetween( oEnt, oS ) < fRad ) + { + iDam += GetMaxHitPoints( oS ) - GetCurrentHitPoints( oS ); + oS = GetNearestObjectToLocation( OBJECT_TYPE_CREATURE, lT, ++iCnt ); + } + iCnt--; + if ( iCnt ) + { + fDam = IntToFloat( iDam ) / IntToFloat( iCnt ); + } + return fDam; +} + +object GetMostBuffedEnemy( float fRad=10.0, object oEnt=OBJECT_SELF ) +{ + int iBuffs; + int iMax = 0; + int iCnt = 0; + object oT; + object oM = OBJECT_INVALID; + effect eT; + + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oT ) && GetDistanceBetween( OBJECT_SELF, oT ) < fRad ) + { + iBuffs = 0; + eT = GetFirstEffect( oT ); + while ( GetIsEffectValid( eT ) ) + { + //try this to narrow down to actual "buffs" + if ( GetEffectSubType( eT ) == SUBTYPE_MAGICAL && GetEffectDurationType( eT ) == DURATION_TYPE_TEMPORARY ) + { + iBuffs += GetIsBuffEffect( eT ); + } + eT = GetNextEffect( oT ); + } + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_SUMMONED, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_DOMINATED, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_FAMILIAR, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_ANIMALCOMPANION, oT ) ); + if ( iBuffs > iMax ) + { + iMax = iBuffs; + oM = oT; + } + + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oM; +} + +object GetLeastBuffedAlly( float fRad=10.0, int iMelee=FALSE, object oEnt=OBJECT_SELF ) +{ + int iBuffs; + int iMin = 100; + int iCnt = 0; + object oT; + object oM = OBJECT_INVALID; + effect eT; + + oT = oEnt; //start with self + while ( GetIsObjectValid( oT ) && GetDistanceBetween( OBJECT_SELF, oT ) < fRad ) + { + if ( !GetIsObjectValid( GetMaster( oT ) ) ) + { + //don't consider associates + if ( iMelee && ( GetDistanceBetween( oEnt, oT ) < 7.5 || !GetHostileCount( 5.0, oT ) ) ) + { + //don't buff those in the thick of melee + iBuffs = 0; + eT = GetFirstEffect( oT ); + while ( GetIsEffectValid( eT ) ) + { + //try this to narrow down to actual "buffs" + if ( GetEffectSubType( eT ) == SUBTYPE_MAGICAL && GetEffectDurationType( eT ) == DURATION_TYPE_TEMPORARY ) + { + iBuffs += GetIsBuffEffect( eT ); + } + eT = GetNextEffect( oT ); + } + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_SUMMONED, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_DOMINATED, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_FAMILIAR, oT ) ); + iBuffs += GetIsObjectValid( GetAssociate( ASSOCIATE_TYPE_ANIMALCOMPANION, oT ) ); + if ( iBuffs < iMin ) + { + iMin = iBuffs; + oM = oT; + } + } + } + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oM; +} + +int GetIsBuffEffect( effect eT ) +{ + if ( GetEffectSpellId( eT ) == -1 ) + { + return FALSE; + } + if ( GetEffectSpellId( eT ) == SPELL_GREATER_SPELL_MANTLE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PREMONITION ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MIND_BLANK ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SPELL_MANTLE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SHADOW_SHIELD ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION_FROM_SPELLS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_TRUE_SEEING ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_TENSERS_TRANSFORMATION ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MASS_HASTE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_GREATER_STONESKIN ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_GLOBE_OF_INVULNERABILITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_ETHEREAL_VISAGE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_LESSER_SPELL_MANTLE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_LESSER_MIND_BLANK ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_ENERGY_BUFFER ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_ELEMENTAL_SHIELD ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_STONESKIN ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_POLYMORPH_SELF ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MINOR_GLOBE_OF_INVULNERABILITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_IMPROVED_INVISIBILITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION_FROM_ELEMENTS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MAGIC_CIRCLE_AGAINST_GOOD ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MAGIC_CIRCLE_AGAINST_EVIL ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MAGIC_CIRCLE_AGAINST_CHAOS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MAGIC_CIRCLE_AGAINST_LAW ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_INVISIBILITY_SPHERE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_HASTE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_CLARITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SEE_INVISIBILITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_RESIST_ELEMENTS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_OWLS_WISDOM ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_INVISIBILITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_GHOSTLY_VISAGE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_FOXS_CUNNING ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_ENDURANCE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_EAGLE_SPLEDOR ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_DARKVISION ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_CATS_GRACE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_BULLS_STRENGTH ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION_FROM_GOOD ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION_FROM_EVIL ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION__FROM_CHAOS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PROTECTION_FROM_LAW ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_MAGE_ARMOR ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_FREEDOM_OF_MOVEMENT ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_DEATH_WARD ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_PRAYER ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_AID ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_VIRTUE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_BLESS ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SHAPECHANGE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_NATURES_BALANCE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_AURA_OF_VITALITY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_REGENERATE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SPELL_RESISTANCE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_AWAKEN ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_BARKSKIN ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_RESISTANCE ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_HOLY_AURA ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_UNHOLY_AURA ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_DIVINE_POWER ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_NEGATIVE_ENERGY_PROTECTION ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_SANCTUARY ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_REMOVE_FEAR ) + { + return TRUE; + } + if ( GetEffectSpellId( eT ) == SPELL_WAR_CRY ) + { + return TRUE; + } + return FALSE; +} + +int GetAverageEffectCasterLevel( object oT=OBJECT_SELF ) +{ + int iT = 0; + int iC = 0; + int iL = 0; + object oE; + object oB = OBJECT_INVALID; + effect eT = GetFirstEffect( oT ); + + while ( GetIsEffectValid( eT ) ) + { + //try this to narrow down to actual "buffs" + if ( GetEffectSubType( eT ) == SUBTYPE_MAGICAL && GetEffectDurationType( eT ) == DURATION_TYPE_TEMPORARY ) + { + if ( GetIsBuffEffect( eT ) ) + { + iC += 1; + //try this to reduce redundant checking + oE = GetEffectCreator( eT ); + if ( GetIsObjectValid( oE ) ) + { + if ( oE != oB ) + { + //new caster + iL = GetMaxDispelCasterLevel( oE ); + oB = oE; + } + iT += iL; + iC += 1; + } + else + { + //something has happened to effect creator, assume the worst + iT += 20; + iC += 1; + } + } + } + eT = GetNextEffect( oT ); + } + if ( iC ) + { + return iT / iC; + } + return 0; +} + +object GetStrongestEnemySummonedAssociateOwner( float fRad=10.0, object oEnt=OBJECT_SELF ) +{ + object oT, oC, oD, oM; + int iCnt = 0; + int iHD = 0; + int iT; + + oM = OBJECT_INVALID; + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oEnt, oT ) < fRad ) + { + if ( GetIsObjectValid( oC = GetAssociate( ASSOCIATE_TYPE_SUMMONED, oT ) ) ) + { + if ( ( iT = GetHitDice( oC ) ) > iHD ) + { + oD = oC; + iHD = iT; + } + } + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( GetIsObjectValid( oD ) ) + { + oM = GetMaster( oD ); + } + return oM; +} + +vector GetEnemySummonedAssociatesVector( float fRad=10.0, object oEnt=OBJECT_SELF ) +{ + int iCnt1, iCnt2, iCnt3, iBestCnt; + float fRad = 20.0; + vector vT = Vector( 0.0, 0.0, 0.0 ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vU = GetPosition( oEnt ); + object oT1, oT2, oM; + + iCnt1 = 0; + iBestCnt = 0; + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //PrintString( "GES: " + GetName( oT1 ) ); + while ( GetIsObjectValid( oT1 ) && GetDistanceBetween( oEnt, oT1 ) <= 30.0f ) + { + iCnt2 = 0; + iCnt3 = 0; + oM = GetMaster( oT1 ); + if ( GetIsObjectValid( oM ) && GetAssociate( ASSOCIATE_TYPE_SUMMONED, oM ) == oT1 ) + { + //PrintString( "GESV: " + GetName( oT1 ) ); + if ( GetCurrentAction( oT1 ) != ACTION_MOVETOPOINT ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oT1 ) - vU; + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oT2 ) && GetDistanceBetween( oT1, oT2 ) <= fRad ) + { + //don't count them as target if they're on the move + if ( GetCurrentAction( oT2 ) != ACTION_MOVETOPOINT ) + { + oM = GetMaster( oT2 ); + if ( GetIsObjectValid( oM ) && GetAssociate( ASSOCIATE_TYPE_SUMMONED, oM ) == oT2 ) + { + iCnt3++; + vT = vT + GetPosition( oT2 ) - vU; + } + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iCnt3 > iBestCnt ) + { + vS = vT / IntToFloat( iCnt3 ); + iBestCnt = iCnt3; + } + } + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +vector GetEnemyPlanarVector( float fRad=10.0, object oEnt=OBJECT_SELF ) +{ + int iCnt1, iCnt2, iCnt3, iBestCnt; + float fRad = 20.0; + vector vT = Vector( 0.0, 0.0, 0.0 ); + vector vS = Vector( 0.0, 0.0, 0.0 ); + vector vU = GetPosition( oEnt ); + object oT1, oT2, oM; + + iCnt1 = 0; + iBestCnt = 0; + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //PrintString( "GEP: " + GetName( oT1 ) ); + while ( GetIsObjectValid( oT1 ) && GetDistanceBetween( oEnt, oT1 ) <= 30.0f ) + { + iCnt2 = 0; + iCnt3 = 0; + if ( GetRacialType( oT1 ) == RACIAL_TYPE_OUTSIDER || GetRacialType( oT1 ) == RACIAL_TYPE_ELEMENTAL ) + { + //PrintString( "GEPV: " + GetName( oT1 ) ); + if ( GetCurrentAction( oT1 ) != ACTION_MOVETOPOINT ) + { + iCnt3 = 1; //starts at 1 to count oSub1 + vT = GetPosition ( oT1 ) - vU; + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + //this should not pick up dead creatures + while ( GetIsObjectValid( oT2 ) && GetDistanceBetween( oT1, oT2 ) <= fRad ) + { + //don't count them as target if they're on the move + if ( GetCurrentAction( oT2 ) != ACTION_MOVETOPOINT ) + { + if ( GetRacialType( oT2 ) == RACIAL_TYPE_OUTSIDER || GetRacialType( oT2 ) == RACIAL_TYPE_ELEMENTAL ) + { + iCnt3++; + vT = vT + GetPosition( oT2 ) - vU; + } + } + //oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + oT2 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT1, ++iCnt2, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iCnt3 > iBestCnt ) + { + vS = vT / IntToFloat( iCnt3 ); + iBestCnt = iCnt3; + } + } + oT1 = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, ++iCnt1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( iBestCnt ) + { + return vS; + } + return Vector( 0.0, 0.0, 0.0 ); +} + +object GetVisionDeprived( float fRad=10.0, object oT=OBJECT_SELF ) +{ + object oS = oT; + object oA; + object oP; + int iCnt = 0; + int iSpell = 0; + + while ( GetIsObjectValid( oS ) && GetDistanceBetween( oT, oS ) < fRad && !GetIsObjectValid( oP ) ) + { + if ( !GetIsObjectValid( GetLocalObject( oS, "#VISION" ) ) && ( iSpell = GetVisionSpellNeeded( oS ) ) ) + { + if ( GetIsObjectValid( GetMaster( oS ) ) ) + { + //associates + oA = oS; + } + else + { + //"real" allies + oP = oS; + } + } + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oT, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + if ( GetIsObjectValid( oP ) ) + { + //"real" allies take preference over associates + return oP; + } + return oA; +} + +object GetLeastDefendedAlly( float fRad=10.0, object oC=OBJECT_SELF ) +{ + object oT, oS; + int iD; + int iMinD; + int iCnt = 0; + struct sPhysDefStatus strP; + struct sSpellDefStatus strM; + + iMinD = 100; + oS = oC; //start with the caster + while ( GetIsObjectValid( oS ) && GetDistanceBetween( oC, oS ) < fRad ) + { + if ( !GetIsObjectValid( GetMaster( oS ) ) ) + { + //don't defend associates + strP = EvaluatePhysicalDefenses( oS ); + strM = EvaluateSpellDefenses( oS ); + iD = strM.iTotal < strP.iTotal ? strM.iTotal : strP.iTotal; + oT = iD < iMinD ? oS : oT; + iMinD = iD < iMinD ? iD : iMinD; + } + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oC, ++iCnt, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oT; +} + +int GetHasRangedCapability( object oEnt=OBJECT_SELF ) +{ + object oI = GetFirstItemInInventory(); + int iR = 0; + + while ( GetIsObjectValid( oI ) && !iR ) + { + iR = GetIsRangedWeapon( oI ); + oI = GetNextItemInInventory(); + } + return iR; +} + +int GetIsRangedWeapon( object oW ) +{ + int iS; + + if ( GetIsObjectValid( oW ) ) + { + iS = GetBaseItemType( oW ); + if ( iS == BASE_ITEM_DART || iS == BASE_ITEM_HEAVYCROSSBOW || iS == BASE_ITEM_LIGHTCROSSBOW || + iS == BASE_ITEM_LONGBOW || iS == BASE_ITEM_SHORTBOW || iS == BASE_ITEM_SHURIKEN || + iS == BASE_ITEM_SLING || iS == BASE_ITEM_THROWINGAXE ) + { + return TRUE; + } + } + return FALSE; +} + +object GetMostDistantEnemy( float fR=30.0, int iS=TRUE, object oC=OBJECT_SELF ) +{ + int iCnt = 1; + object oD = OBJECT_INVALID; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oC, iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oC, oT ) <= fR ) + { + if ( GetObjectSeen( oT, oC ) >= iS ) + { + oD = oT; + } + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oC, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oD; +} + +vector GetSaves( object oT=OBJECT_SELF ) +{ + vector vS = Vector( 0.0, 0.0, 0.0 ); + //int iC1, iC2, iC3, iL1, iL2, iL3; + //int iCon, iDex, iWis; + + /* + iC1 = GetClassByPosition( 1, oT ); + iC2 = GetClassByPosition( 2, oT ); + iC3 = GetClassByPosition( 3, oT ); + iL1 = GetLevelByPosition( 1, oT ); + iL2 = GetLevelByPosition( 2, oT ); + iL3 = GetLevelByPosition( 3, oT ); + iCon = GetAbilityModifier( ABILITY_CONSTITUTION, oT ); + iDex = GetAbilityModifier( ABILITY_DEXTERITY, oT ); + iWis = GetAbilityModifier( ABILITY_WISDOM, oT ); + */ + /* + vS += GetSavesByClass( iC1, iL1 ); + vS += GetSavesByClass( iC2, iL2 ); + vS += GetSavesByClass( iC3, iL3 ); + + vS.x += iCon + 2 * GetHasFeat( FEAT_GREAT_FORTITUDE, oT ); + vS.y += iDex + 2 * GetHasFeat( FEAT_LIGHTNING_REFLEXES, oT ); + vS.z += iWis + 2 * GetHasFeat( FEAT_IRON_WILL, oT ); + */ + vS.x = IntToFloat( GetFortitudeSavingThrow( oT ) ); + vS.y = IntToFloat( GetReflexSavingThrow( oT ) ); + vS.z = IntToFloat( GetWillSavingThrow( oT ) ); + + return vS; +} + +vector GetBaseSavesByClass( int iC, int iL ) +{ + vector vS = Vector( 0.0, 0.0, 0.0 ); + + if ( iC != CLASS_TYPE_INVALID ) + { + //fort save + if ( iC == CLASS_TYPE_ANIMAL || iC == CLASS_TYPE_BARBARIAN || iC == CLASS_TYPE_BEAST || + iC == CLASS_TYPE_CLERIC || iC == CLASS_TYPE_DRAGON || iC == CLASS_TYPE_DRUID || iC == CLASS_TYPE_FIGHTER || + iC == CLASS_TYPE_GIANT || iC == CLASS_TYPE_HUMANOID || iC == CLASS_TYPE_MAGICAL_BEAST || + iC == CLASS_TYPE_MONK || iC == CLASS_TYPE_OUTSIDER || iC == CLASS_TYPE_PALADIN || iC == CLASS_TYPE_RANGER || + iC == CLASS_TYPE_SHAPECHANGER || iC == CLASS_TYPE_VERMIN ) + { + vS.x += 2.0 + IntToFloat( iL / 2 ); + } + else + { + vS.x += IntToFloat( iL / 3 ); + } + //reflex save + if ( iC == CLASS_TYPE_ANIMAL || iC == CLASS_TYPE_BARD || iC == CLASS_TYPE_BEAST || iC == CLASS_TYPE_DRAGON || + iC == CLASS_TYPE_FEY || iC == CLASS_TYPE_MAGICAL_BEAST || iC == CLASS_TYPE_MONK || iC == CLASS_TYPE_MONSTROUS || + iC == CLASS_TYPE_OUTSIDER || iC == CLASS_TYPE_ROGUE || iC == CLASS_TYPE_SHAPECHANGER ) + { + vS.y += 2.0 + IntToFloat( iL / 2 ); + } + else + { + vS.y += IntToFloat( iL / 3 ); + } + //will save + if ( iC == CLASS_TYPE_ABERRATION || iC == CLASS_TYPE_BARD || iC == CLASS_TYPE_CLERIC || iC == CLASS_TYPE_DRAGON || + iC == CLASS_TYPE_DRUID || iC == CLASS_TYPE_ELEMENTAL || iC == CLASS_TYPE_FEY || iC == CLASS_TYPE_MONK || + iC == CLASS_TYPE_MONSTROUS || iC == CLASS_TYPE_OUTSIDER || iC == CLASS_TYPE_SHAPECHANGER || + iC == CLASS_TYPE_SORCERER || iC == CLASS_TYPE_WIZARD ) + { + vS.z += 2.0 + IntToFloat( iL / 2 ); + } + else + { + vS.z += IntToFloat( iL / 3 ); + } + } + + return vS; +} + +vector GetAverageEnemySaveInArea( vector vP, float fR=5.0, object oC=OBJECT_SELF ) +{ + vector vS = Vector( 0.0, 0.0, 0.0 ); + location lL = Location( GetArea( oC ), GetPosition( oC ) + vP, VectorToAngle( vP ) ); + int iCnt = 0; + object oT; + + oT = GetFirstObjectInShape( SHAPE_SPHERE, fR, lL ); + while ( GetIsObjectValid( oT ) ) + { + if ( GetIsEnemy( oT ) && ( GetObjectSeen( oT, oC ) || GetObjectHeard( oT, oC ) ) ) + { + iCnt++; + vS += GetSaves( oT ); + } + oT = GetNextObjectInShape( SHAPE_SPHERE, fR, lL ); + } + if ( iCnt ) + { + vS.x = vS.x / IntToFloat( iCnt ); + vS.y = vS.y / IntToFloat( iCnt ); + vS.z = vS.z / IntToFloat( iCnt ); + } + return vS; +} + +//Function imported from SoU x0_i0_spells +int IsImmuneToPetrification(object oCreature) +{ + int nAppearance = GetAppearanceType(oCreature); + int bFlesh = FALSE; + switch (nAppearance) + { + case APPEARANCE_TYPE_BASILISK: + case APPEARANCE_TYPE_COCKATRICE: + case APPEARANCE_TYPE_MEDUSA: + case APPEARANCE_TYPE_ALLIP: + case APPEARANCE_TYPE_ELEMENTAL_AIR: + case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_EARTH: + case APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_FIRE: + case APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_WATER: + case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: + case APPEARANCE_TYPE_GOLEM_STONE: + case APPEARANCE_TYPE_GOLEM_IRON: + case APPEARANCE_TYPE_GOLEM_CLAY: + case APPEARANCE_TYPE_GOLEM_BONE: + case APPEARANCE_TYPE_GORGON: + case APPEARANCE_TYPE_HEURODIS_LICH: + case APPEARANCE_TYPE_LANTERN_ARCHON: + case APPEARANCE_TYPE_SHADOW: + case APPEARANCE_TYPE_SHADOW_FIEND: + case APPEARANCE_TYPE_SHIELD_GUARDIAN: + case APPEARANCE_TYPE_SKELETAL_DEVOURER: + case APPEARANCE_TYPE_SKELETON_CHIEFTAIN: + case APPEARANCE_TYPE_SKELETON_COMMON: + case APPEARANCE_TYPE_SKELETON_MAGE: + case APPEARANCE_TYPE_SKELETON_PRIEST: + case APPEARANCE_TYPE_SKELETON_WARRIOR: + case APPEARANCE_TYPE_SKELETON_WARRIOR_1: + case APPEARANCE_TYPE_SPECTRE: + case APPEARANCE_TYPE_WILL_O_WISP: + case APPEARANCE_TYPE_WRAITH: + case APPEARANCE_TYPE_BAT_HORROR: + + bFlesh = TRUE; + } + return bFlesh; +} + +object GetNearestAddledEnemy( float fRange=10.0, object oE=OBJECT_SELF ) +{ + object oS = OBJECT_INVALID; + int iCnt = 0; + int iEff = 0; + + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + while ( GetIsObjectValid( oS ) && GetDistanceBetween( oE, oS ) < fRange ) + { + iEff = GetEffectsOnObject( oS ); + //can't extract from petrified enemies + if ( ( iEff & NO_EFFECT_PETRIFY ) == 0 ) + { + if ( iEff & NO_EFFECT_STUNNED || iEff & NO_EFFECT_DAZED || iEff & NO_EFFECT_PARALYZE || iEff & NO_EFFECT_SLEEP || + iEff & NO_EFFECT_CONFUSED ) + { + //creature is an addled enemy + return oS; + } + } + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + return OBJECT_INVALID; +} + +object GetNearestAddledEnemyNoExtractor( float fRange=10.0, object oE=OBJECT_SELF ) +{ + object oS = OBJECT_INVALID; + int iCnt = 0; + int iEff = 0; + + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + while ( GetIsObjectValid( oS ) && GetDistanceBetween( oE, oS ) < fRange ) + { + iEff = GetEffectsOnObject( oS ); + //can't extract from petrified enemies + if ( IsBrainExtractable( oS ) ) + { + if ( iEff & NO_EFFECT_STUNNED || iEff & NO_EFFECT_DAZED || iEff & NO_EFFECT_PARALYZE || iEff & NO_EFFECT_SLEEP ) + { + //creature is an addled enemy + return oS; + } + } + oS = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN ); + } + return OBJECT_INVALID; +} + +int IsBrainExtractable( object oT ) +{ + int iEff, iR; + int iE = TRUE; + + if ( GetIsObjectValid( oT ) ) + { + iEff = GetEffectsOnObject( oT ); + iR = GetRacialType( oT ); + + if ( iEff & NO_EFFECT_PETRIFY || GetLocalInt( oT, "#EXTRACTING" ) || + iR == RACIAL_TYPE_CONSTRUCT || iR == RACIAL_TYPE_ELEMENTAL || iR == RACIAL_TYPE_UNDEAD || iR == RACIAL_TYPE_VERMIN ) + { + iE = FALSE; + } + } + return iE; +} + +int GetCreatureAttackBonus( object oC=OBJECT_SELF ) +{ + int iA = GetBaseAttackBonus( oC ); + if ( GetHasFeat( FEAT_WEAPON_FINESSE, oC ) ) + { + iA += GetAbilityModifier( ABILITY_DEXTERITY, oC ); + } + else + { + iA += GetAbilityModifier( ABILITY_STRENGTH, oC ); + } + iA += GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + return iA; +} + +int GetGrappleBonus( object oC=OBJECT_SELF ) +{ + return GetBaseAttackBonus( oC ) + GetAbilityModifier( ABILITY_STRENGTH, oC ) + 4 * ( GetCreatureSize( oC ) - CREATURE_SIZE_MEDIUM ); +} + +int GetIsMaster( object oM, object oE=OBJECT_SELF ) +{ + if ( GetIsObjectValid( oM ) && GetMaster( oE ) == oM ) + { + return TRUE; + } + return FALSE; +} + +int GetIsPerceived( object oP, int iP=0, object oE=OBJECT_SELF ) +{ + float fR = 0.0; + int iR = FALSE; + + if ( !GetIsObjectValid( oP ) ) + { + return FALSE; + } + + if ( iP == NO_PERCEPTION_SEEN || iP == 0 ) + { + fR = GetPerceptionRange( NO_PERCEPTION_SEEN ); + if ( GetObjectSeen( oP ) && GetDistanceBetween( oE, oP ) < fR ) + { + iR = TRUE; + } + } + if ( iP == NO_PERCEPTION_HEARD || iP == 0 ) + { + fR = GetPerceptionRange( NO_PERCEPTION_HEARD ); + if ( GetObjectHeard( oP ) && GetDistanceBetween( oE, oP ) < fR ) + { + iR = TRUE; + } + } + if ( iP == NO_PERCEPTION_VANISHED || iP == 0 ) + { + fR = GetPerceptionRange( NO_PERCEPTION_VANISHED ); + if ( !GetIsPerceived( oP, NO_PERCEPTION_SEEN ) && !GetIsPerceived( oP, NO_PERCEPTION_HEARD ) && GetDistanceBetween( oE, oP ) < fR ) + { + iR = TRUE; + } + } + //return TRUE; + return iR; +} + +object GetNearestPerceivedCreature( int iP=NO_PERCEPTION_SEEN, object oE=OBJECT_SELF ) +{ + object oP; + + //NOT FINISHED + + return oP; +} + +object GetNearestActiveAlly( object oE=OBJECT_SELF ) +{ + int iCnt = 0; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oT ) && !GetLocalInt( oT, "#ACTIVE" ) ) + { + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, OBJECT_SELF, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oT; +} + +object GetFurthestActiveAlly( float fD=50.0, object oE=OBJECT_SELF ) +{ + int iCnt = 0; + object oA; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oE, oT ) < fD ) + { + if ( GetLocalInt( oT, "#ACTIVE" ) ) + { + oA = oT; + } + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oE, ++iCnt, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + return oA; +} + +int EstimateAttackBonus( object oC=OBJECT_SELF ) +{ + int iA = GetBaseAttackBonus( oC ); + object oR = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ); + object oL = GetItemInSlot( INVENTORY_SLOT_LEFTHAND ); + + //weapon focus + iA += GetHasWeaponFocus( oR ); + + //strength bonus or weapon finesse + if ( GetHasFeat( FEAT_WEAPON_FINESSE, oC ) && GetIsLightWeapon( oR, TRUE ) ) + { + iA += GetAbilityModifier( ABILITY_DEXTERITY, oC ); + } + else + { + iA += GetAbilityModifier( ABILITY_STRENGTH, oC ); + } + + //dual wielding modifiers + if ( ( GetIsWeapon( oR ) && GetIsWeapon( oL ) ) || GetIsDoubleWeapon( oR ) ) + { + //dual wielding + iA += GetDualWieldingPenalty( oC, oL ); + } + + return iA; +} + +int GetDualWieldingPenalty( object oC=OBJECT_SELF, object oR=OBJECT_INVALID, object oL=OBJECT_INVALID ) +{ + int iL = GetIsLightWeapon( oL ); + int iA = GetHasFeat( FEAT_AMBIDEXTERITY, oC ); + int iT = GetHasFeat( FEAT_TWO_WEAPON_FIGHTING, oC ); + int iP = 0; + + if ( !GetIsObjectValid( oL ) ) + { + //no weapon in left hand + if ( GetIsDoubleWeapon( oR ) ) + { + //right hand weapon is double weapon, effectively light offhand + iL = 1; + } + else + { + //not wielding an offhand weapon, not dual wielding, no penalty, finish here + return 0; + } + } + + if ( iA && iT ) + { + //ambidex, two weapon fighting + if ( iL ) + { + //light offhand + iP = -2; + } + else + { + //non-light offhand + iP = -4; + } + } + else if ( iA ) //no iT + { + //ambidex, no two weapon + if ( iL ) + { + //light offhand + iP = -4; + } + else + { + //non-light offhand + iP = -6; + } + } + else if ( iT ) //no iA + { + //two weapon, no ambidex + if ( iL ) + { + //light offhand + iP = -2; + } + else + { + //non-light offhand + -4; + } + } + else //no iA, no iT + { + //no two weapon, no ambidex + if ( iL ) + { + //light offhand + iP = -4; + } + else + { + //non-light offhand + iP = -6; + } + } + return iP; +} + +int GetHasWeaponFocus( object oR, object oC=OBJECT_SELF ) +{ + int iF = 0; + + switch ( GetBaseItemType( oR ) ) + { + case BASE_ITEM_BASTARDSWORD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_BASTARD_SWORD, oC ); + break; + case BASE_ITEM_BATTLEAXE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_BATTLE_AXE, oC ); + break; + case BASE_ITEM_CLUB: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_CLUB, oC ); + break; + case BASE_ITEM_DAGGER: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_DAGGER, oC ); + break; + case BASE_ITEM_DART: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_DART, oC ); + break; + case BASE_ITEM_DIREMACE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_DIRE_MACE, oC ); + break; + case BASE_ITEM_DOUBLEAXE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_DOUBLE_AXE, oC ); + break; + case BASE_ITEM_GREATAXE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_GREAT_AXE, oC ); + break; + case BASE_ITEM_GREATSWORD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_GREAT_SWORD, oC ); + break; + case BASE_ITEM_HALBERD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_HALBERD, oC ); + break; + case BASE_ITEM_HANDAXE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_HAND_AXE, oC ); + break; + case BASE_ITEM_HEAVYCROSSBOW: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oC ); + break; + case BASE_ITEM_HEAVYFLAIL: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_HEAVY_FLAIL, oC ); + break; + case BASE_ITEM_KAMA: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_KAMA, oC ); + break; + case BASE_ITEM_KATANA: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_KATANA, oC ); + break; + case BASE_ITEM_KUKRI: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_KUKRI, oC ); + break; + case BASE_ITEM_LIGHTFLAIL: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_LIGHT_FLAIL, oC ); + break; + case BASE_ITEM_LIGHTHAMMER: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_LIGHT_HAMMER, oC ); + break; + case BASE_ITEM_LIGHTMACE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_LIGHT_MACE, oC ); + break; + case BASE_ITEM_LONGBOW: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_LONGBOW, oC ); + break; + case BASE_ITEM_LONGSWORD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_LONG_SWORD, oC ); + break; + case BASE_ITEM_MORNINGSTAR: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_MORNING_STAR, oC ); + break; + case BASE_ITEM_QUARTERSTAFF: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_STAFF, oC ); + break; + case BASE_ITEM_RAPIER: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_RAPIER, oC ); + break; + case BASE_ITEM_SCIMITAR: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SCIMITAR, oC ); + break; + case BASE_ITEM_SCYTHE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SCYTHE, oC ); + break; + case BASE_ITEM_SHORTBOW: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SHORTBOW, oC ); + break; + case BASE_ITEM_SHORTSPEAR: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SPEAR, oC ); + break; + case BASE_ITEM_SHORTSWORD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SHORT_SWORD, oC ); + break; + case BASE_ITEM_SHURIKEN: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SHURIKEN, oC ); + break; + case BASE_ITEM_SICKLE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SICKLE, oC ); + break; + case BASE_ITEM_SLING: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_SLING, oC ); + break; + case BASE_ITEM_THROWINGAXE: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_THROWING_AXE, oC ); + break; + case BASE_ITEM_TWOBLADEDSWORD: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD, oC ); + break; + case BASE_ITEM_WARHAMMER: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_WAR_HAMMER, oC ); + break; + case BASE_ITEM_CBLUDGWEAPON: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + break; + case BASE_ITEM_CPIERCWEAPON: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + break; + case BASE_ITEM_CSLASHWEAPON: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + break; + case BASE_ITEM_CSLSHPRCWEAP: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + break; + case BASE_ITEM_INVALID: + iF = GetHasFeat( FEAT_WEAPON_FOCUS_UNARMED_STRIKE, oC ) || GetHasFeat( FEAT_WEAPON_FOCUS_CREATURE, oC ); + break; + } + return iF; +} + +int GetIsArmed( object oEnt=OBJECT_SELF ) +{ + if ( GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oEnt ) ) || GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_LEFTHAND, oEnt ) ) ) + { + return TRUE; + } + return FALSE; +} + +int GetRelativeEnemyWeaponSize( object oT, object oEnt=OBJECT_SELF ) +{ + int iM = GetWeaponSize( oEnt ); + int iT = GetWeaponSize( oT ); + int iR = 0; + + if ( iM > iT ) + { + iR = 1; + } + else if ( iM < iT ) + { + iR = -1; + } + return iR; +} + +int GetWeaponSize( object oEnt=OBJECT_SELF ) +{ + //0=small, 1=medium, 2=large + int iS = 0; + int iType; + object oR = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ); + + if ( GetIsObjectValid( oR ) && ( iType = GetBaseItemType( oR ) ) != BASE_ITEM_INVALID ) + { + if ( + iType == BASE_ITEM_CLUB || + iType == BASE_ITEM_DAGGER || + iType == BASE_ITEM_DART || + iType == BASE_ITEM_KAMA || + iType == BASE_ITEM_HANDAXE || + iType == BASE_ITEM_KUKRI || + iType == BASE_ITEM_LIGHTFLAIL || + iType == BASE_ITEM_LIGHTHAMMER || + iType == BASE_ITEM_LIGHTMACE || + iType == BASE_ITEM_RAPIER || + iType == BASE_ITEM_SHORTSWORD || + iType == BASE_ITEM_SHURIKEN || + iType == BASE_ITEM_SICKLE || + iType == BASE_ITEM_SLING || + iType == BASE_ITEM_THROWINGAXE || + iType == BASE_ITEM_TORCH + ) + { + iS = 0; + } + else if ( + iType == BASE_ITEM_BASTARDSWORD || + iType == BASE_ITEM_BATTLEAXE || + iType == BASE_ITEM_KATANA || + iType == BASE_ITEM_LONGSWORD || + iType == BASE_ITEM_MORNINGSTAR || + iType == BASE_ITEM_SCIMITAR || + iType == BASE_ITEM_SHORTBOW || + iType == BASE_ITEM_SHORTSPEAR || + iType == BASE_ITEM_WARHAMMER + ) + { + iS = 1; + } + else if ( + iType == BASE_ITEM_DIREMACE || + iType == BASE_ITEM_DOUBLEAXE || + iType == BASE_ITEM_GREATAXE || + iType == BASE_ITEM_GREATSWORD || + iType == BASE_ITEM_HALBERD || + iType == BASE_ITEM_HEAVYCROSSBOW || + iType == BASE_ITEM_HEAVYFLAIL || + iType == BASE_ITEM_LONGBOW || + iType == BASE_ITEM_QUARTERSTAFF || + iType == BASE_ITEM_SCYTHE || + iType == BASE_ITEM_TWOBLADEDSWORD + ) + { + iS = 2; + } + } + return iS; +} + +float GetAverageDistanceToEnemy( float fRad=60.0, object oEnt=OBJECT_SELF ) +{ + int iNum = 0; + float fDist = 0.0; + int iCnt = 1; + object oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + + while ( GetIsObjectValid( oT ) && GetDistanceBetween( oEnt, oT ) <= fRad ) + { + fDist += GetDistanceBetween( oEnt, oT ); + iNum++; + oT = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oEnt, iCnt++, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE ); + } + + if ( iNum ) + { + return fDist / iNum; + } + return 0.0; +} + +int GetCombatModeModifier( int iMode=0 ) +{ + int iMod = 0; + + if ( iMode > 0 ) + { + switch ( iMode ) + { + case FEAT_POWER_ATTACK: + iMod = -5; + break; + case FEAT_IMPROVED_POWER_ATTACK: + iMod = -10; + break; + case FEAT_FLURRY_OF_BLOWS: + iMod = -2; + break; + case FEAT_EXPERTISE: + iMod = -5; + break; + case FEAT_IMPROVED_EXPERTISE: + iMod = -10; + break; + case FEAT_RAPID_SHOT: + iMod = -2; + break; + } + } + return iMod; +} + +int GetCombatConcentration( object oE=OBJECT_SELF ) +{ + int iC = GetSkillRank( SKILL_CONCENTRATION, oE ) //RANKS + + GetAbilityModifier( ABILITY_CONSTITUTION, oE ) //CONSTITUTION MODIFIER + + 2 * GetHasFeat( FEAT_SKILL_AFFINITY_CONCENTRATION, oE ) //SKILL AFFINITY FOR CONCENTRATION + - 4 * ( 1 - GetHasFeat( FEAT_COMBAT_CASTING, oE ) ) //COMBAT CASTING NEGATES -4 PENALTY + + 3 * GetHasFeat( FEAT_SKILL_FOCUS_CONCENTRATION, oE ) //SKILL FOCUS CONCENTRATION + + 10 * GetHasFeat( FEAT_EPIC_SKILL_FOCUS_CONCENTRATION, oE ); //EPIC SKILL FOCUS CONCENTRATION + + return iC; +} + +int GetTurningLevel( object oC=OBJECT_SELF ) +{ + int iC = GetLevelByClass( CLASS_TYPE_CLERIC, oC ); + int iP = GetLevelByClass( CLASS_TYPE_PALADIN, oC ); + int iB = GetLevelByClass( CLASS_TYPE_BLACKGUARD, oC ); + //get the higher of the levels out of BLK and PAL, subtract 2 for effective turning level + int iA = iB > iP ? iB - 2 : iP - 2; + //add this to turning level if it is > 0 + iC += iA > 0 ? iA : 0; + + return iC; +} + +void SetIsCentralEyeOpen( int iS=FALSE, object oB=OBJECT_SELF ) +{ + SetLocalInt( oB, s_BEHOLDER_CENTRAL_EYE_FLAG, iS ); +} + +int GetIsCentralEyeOpen( object oB=OBJECT_SELF ) +{ + return GetLocalInt( oB, s_BEHOLDER_CENTRAL_EYE_FLAG ); +} \ No newline at end of file diff --git a/_module/nss/no_lib_bio.nss b/_module/nss/no_lib_bio.nss new file mode 100644 index 00000000..633fa5b6 --- /dev/null +++ b/_module/nss/no_lib_bio.nss @@ -0,0 +1,2173 @@ +/* +==================== +A subset of the Bioware functions included for use without including all of them. +Some changes have been made to these functions where necessary. +==================== +*/ + +#include "x0_i0_behavior" +#include "x0_i0_modes" +#include "x0_i0_position" +#include "x0_i0_voice" +#include "no_inc_ptypes" + +//Master Constants +int NW_FLAG_SPECIAL_CONVERSATION = 0x00000001; +int NW_FLAG_SHOUT_ATTACK_MY_TARGET = 0x00000002; +int NW_FLAG_STEALTH = 0x00000004; +int NW_FLAG_SEARCH = 0x00000008; +int NW_FLAG_SET_WARNINGS = 0x00000010; +int NW_FLAG_ESCAPE_RETURN = 0x00000020; //Failed +int NW_FLAG_ESCAPE_LEAVE = 0x00000040; +int NW_FLAG_TELEPORT_RETURN = 0x00000080; //Failed +int NW_FLAG_TELEPORT_LEAVE = 0x00000100; +int NW_FLAG_PERCIEVE_EVENT = 0x00000200; +int NW_FLAG_ATTACK_EVENT = 0x00000400; +int NW_FLAG_DAMAGED_EVENT = 0x00000800; +int NW_FLAG_SPELL_CAST_AT_EVENT = 0x00001000; +int NW_FLAG_DISTURBED_EVENT = 0x00002000; +int NW_FLAG_END_COMBAT_ROUND_EVENT = 0x00004000; +int NW_FLAG_ON_DIALOGUE_EVENT = 0x00008000; +int NW_FLAG_RESTED_EVENT = 0x00010000; +int NW_FLAG_DEATH_EVENT = 0x00020000; +int NW_FLAG_SPECIAL_COMBAT_CONVERSATION = 0x00040000; +int NW_FLAG_AMBIENT_ANIMATIONS = 0x00080000; +int NW_FLAG_HEARTBEAT_EVENT = 0x00100000; +int NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS = 0x00200000; +int NW_FLAG_DAY_NIGHT_POSTING = 0x00400000; +int NW_FLAG_AMBIENT_ANIMATIONS_AVIAN = 0x00800000; +int NW_FLAG_APPEAR_SPAWN_IN_ANIMATION = 0x01000000; +int NW_FLAG_SLEEPING_AT_NIGHT = 0x02000000; +int NW_FLAG_FAST_BUFF_ENEMY = 0x04000000; + +//Additional constants for SoU animation craziness +const int CLEAR_DEBUG = FALSE; + +string sAnimCondVarname = "NW_ANIM_CONDITION"; + +float ANIM_LOOPING_LENGTH = 4.0; +float ANIM_LOOPING_SPEED = 1.0; + +string ANIM_CONVERSATION = "x0_npc_homeconv"; + +int NW_ANIM_FLAG_INITIALIZED = 0x00000001; +int NW_ANIM_FLAG_CONSTANT = 0x00000002; +int NW_ANIM_FLAG_CHATTER = 0x00000004; +int NW_ANIM_FLAG_IS_ACTIVE = 0x00000008; +int NW_ANIM_FLAG_IS_INTERACTING = 0x00000010; +int NW_ANIM_FLAG_IS_INSIDE = 0x00000020; +int NW_ANIM_FLAG_HAS_HOME = 0x00000040; +int NW_ANIM_FLAG_IS_TALKING = 0x00000080; +int NW_ANIM_FLAG_IS_MOBILE = 0x00000100; +int NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE = 0x00000200; +int NW_ANIM_FLAG_IS_CIVILIZED = 0x00000400; +int NW_ANIM_FLAG_CLOSE_DOORS = 0x00001000; + +const int CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior1 = 11; +const int CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior2 = 12; +const int CLEAR_X0_I0_ANIMS_PlayMobile = 16; +const int CLEAR_X0_I0_ANIMS_PlayRandomMobile = 17; +const int CLEAR_X0_I0_ANIMS_PlayRandomCloseRange1 = 18; +const int CLEAR_X0_I0_ANIMS_PlayRandomCloseRange2 = 19; +const int CLEAR_X0_I0_ANIMS_AnimActionPlayRandomMobile1 = 20; +const int CLEAR_X0_I0_ANIMS_AnimActionPlayRandomMobile2 = 21; +const int CLEAR_X0_I0_ANIMS_AnimActionPlayRandomUncivilized =22; +const int CLEAR_X0_I0_ANIMS_AnimActionGetUpFromChair = 23; +const int CLEAR_X0_I0_ANIMS_AnimActionGoToStop = 24; +const int CLEAR_X0_I0_ANIMS_AnimActionRest1 = 25; +const int CLEAR_X0_I0_ANIMS_AnimActionRest2 = 26; +const int CLEAR_X0_I0_ANIMS_GoHome = 27; +const int CLEAR_X0_I0_ANIMS_AnimActionLeaveHome = 28; +const int CLEAR_X0_I0_ANIMS_AnimActionChallengeIntruder = 29; + +//:://///////////////////////////////////////////// +//:: Master Local Get and Set +//:: FileName +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All On Spawn in conditions in the game are now + being stored within one local. The get and set + changed or checks the condition of this one + Hex local. The NW_FLAG_XXX variables above + allow for the user of these functions throughout + the generic scripts. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 14, 2001 +//::////////////////////////////////////////////// + +void SetSpawnInCondition(int nCondition, int bValid = TRUE) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER"); + if(bValid == TRUE) + { + nPlot = nPlot | nCondition; + SetSpawnInLocals(nCondition); + SetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER", nPlot); + } + else if (bValid == FALSE) + { + nPlot = nPlot & ~nCondition; + SetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER", nPlot); + } +} + +int GetSpawnInCondition(int nCondition) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER"); + if(nPlot & nCondition) + { + return TRUE; + } + return FALSE; +} + +void SetSpawnInLocals(int nCondition) +{ + if(nCondition == NW_FLAG_SHOUT_ATTACK_MY_TARGET) + { + SetListenPattern(OBJECT_SELF, "NW_ATTACK_MY_TARGET", 5); + } + else if(nCondition == NW_FLAG_ESCAPE_RETURN) + { + SetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT", GetLocation(OBJECT_SELF)); + } + else if(nCondition == NW_FLAG_TELEPORT_LEAVE) + { + SetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT", GetLocation(OBJECT_SELF)); + } +} + +//:://///////////////////////////////////////////// +//:: SetListeningPatterns +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Sets the correct listen checks on the NPC by + determining what talents they possess or what + class they use. + + This is also a good place to set up all of + the sleep and appear disappear animations for + various models. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 24, 2001 +//::////////////////////////////////////////////// + +void SetListeningPatterns() +{ + if(GetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION)) + { + effect eAppear = EffectAppear(); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eAppear, OBJECT_SELF); + } + + SetListening(OBJECT_SELF, TRUE); + + //NO: Broadcast listen patterns + SetListenPattern( OBJECT_SELF, "BC_DEAD", 691 ); + SetListenPattern( OBJECT_SELF, "BC_FIGHTING", 699 ); + + SetListenPattern(OBJECT_SELF, "NW_I_WAS_ATTACKED", 1); + + //This sets the commoners listen pattern to mob under + //certain conditions + if(GetLevelByClass(CLASS_TYPE_COMMONER) > 0) + { + SetListenPattern(OBJECT_SELF, "NW_MOB_ATTACK", 2); + } + SetListenPattern(OBJECT_SELF, "NW_I_AM_DEAD", 3); + + SetListenPattern(OBJECT_SELF, "inventory",101); + + //Set a custom listening pattern for the creature so that placables with + //"NW_BLOCKER" + Blocker NPC Tag will correctly call to their blockers. + string sBlocker = "NW_BLOCKER_BLK_" + GetTag(OBJECT_SELF); + SetListenPattern(OBJECT_SELF, sBlocker, 4); + SetListenPattern(OBJECT_SELF, "NW_CALL_TO_ARMS", 6); +} + +//************************************************************************************************************************************ +//************************************************************************************************************************************ +// +//WAY POINT WALK FUNCTIONS +// +//************************************************************************************************************************************ +//************************************************************************************************************************************ + +//:://///////////////////////////////////////////// +//:: Walk Way Point Path +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows specified person walk a waypoint path +*/ +//::////////////////////////////////////////////// +//:: Created By: Aidan Scanlan +//:: Created On: July 10, 2001 +//::////////////////////////////////////////////// + +void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) //Run first circuit +{ + ClearAllActions(); + string DayWayString; + string NightWayString; + string DayPostString; + string NightPostString; + string sWay; + string sPost; + + //The block of code below deals with night and day cycle for postings and walkway points. + if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) + { + DayWayString = "WP_"; + NightWayString = "WN_"; + DayPostString = "POST_"; + NightPostString = "NIGHT_"; + } + else + { + DayWayString = "WP_"; + NightWayString = "WP_"; + DayPostString = "POST_"; + NightPostString = "POST_"; + } + + if(GetIsDay() || GetIsDawn()) + { + SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX", DayWayString); + SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX", DayPostString); + } + else + { + SetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX", NightWayString); + SetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX", NightPostString); + } + + + sWay = GetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX"); + sPost = GetLocalString(OBJECT_SELF, "NW_GENERIC_POSTING_PREFIX"); + + //I have now determined what the prefixs for the current walkways and postings are and will use them instead + // of POST_ and WP_ + + if(GetSpawnInCondition(NW_FLAG_STEALTH)) + { + //MyPrintString("GENERIC SCRIPT DEBUG STRING ********** " + "Attempting to Activate Stealth"); + ActionUseSkill(SKILL_HIDE, OBJECT_SELF); + } + if(GetSpawnInCondition(NW_FLAG_SEARCH)) + { + //MyPrintString("GENERIC SCRIPT DEBUG STRING ********** " + "Attempting to Activate Search"); + ActionUseSkill(SKILL_SEARCH, OBJECT_SELF); + } + + //Test if OBJECT_SELF has waypoints to walk + string sWayTag = GetTag( OBJECT_SELF ); + sWayTag = sWay + sWayTag + "_01"; + object oWay1 = GetNearestObjectByTag(sWayTag); + if(!GetIsObjectValid(oWay1)) + { + oWay1 = GetObjectByTag(sWayTag); + } + if(GetIsObjectValid(oWay1) && GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)) + { + //turn off the ambient animations if the creature should walk way points. + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE); + SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, FALSE); + } + + if(GetIsObjectValid(oWay1)) + { + int nNth = 1; + int nTens; + int nNum; + object oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT, OBJECT_SELF, nNth); + while (GetIsObjectValid(oNearest)) + { + string sNearestTag = GetTag(oNearest); + //removes the first 3 and last three characters from the waypoint's tag + //and checks it against his own tag. Waypoint tag format is WP_MyTag_XX. + if( GetSubString( sNearestTag, 3, GetStringLength( sNearestTag ) - 6 ) == GetTag( OBJECT_SELF ) ) + { + string sTens = GetStringRight(GetTag(oNearest),2); + nTens = StringToInt(sTens)/10; + nNum= StringToInt(GetStringRight(GetTag(oNearest),1)); + oNearest = OBJECT_INVALID; + } + else + { + nNth++; + oNearest = GetNearestObject(OBJECT_TYPE_WAYPOINT,OBJECT_SELF,nNth); + } + } + RunCircuit(nTens, nNum, nRun, fPause); //*************************************** + ActionWait(fPause); + ActionDoCommand(RunNextCircuit(nRun, fPause)); + //ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(2))); + } + else + { + sWayTag = GetTag( OBJECT_SELF ); + sWayTag = sPost + sWayTag; + oWay1 = GetNearestObjectByTag(sWayTag); + if(!GetIsObjectValid(oWay1)) + { + oWay1 = GetObjectByTag(sWayTag); + } + + if(GetIsObjectValid(oWay1)) + { + ActionForceMoveToObject(oWay1, nRun, 1.0, 60.0); + float fFacing = GetFacing(oWay1); + ActionDoCommand(SetFacing(fFacing)); + } + } + if(GetIsObjectValid(oWay1) && GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)) + { + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE); + SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, FALSE); + } +} + +void RunNextCircuit(int nRun = FALSE, float fPause = 1.0) +{ + RunCircuit(0,1, nRun, fPause); //*************************************** + ActionWait(fPause); + ActionDoCommand(RunNextCircuit(nRun, fPause)); + //ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(2))); +} + +//:://///////////////////////////////////////////// +//:: Run Circuit +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Calculates the proper path to follow along a + predetermined set of way points +*/ +//::////////////////////////////////////////////// +//:: Created By: Aidan Scanlan +//:: Created On: July 10, 2001 +//::////////////////////////////////////////////// + +void RunCircuit(int nTens, int nNum, int nRun = FALSE, float fPause = 1.0) +{ + // starting at a given way point, move sequentialy through incrementally + // increasing points until there are no more valid ones. + string sWay = GetLocalString(OBJECT_SELF, "NW_GENERIC_WALKWAYS_PREFIX"); + + object oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) +IntToString(nNum)); + + while(GetIsObjectValid(oTargetPoint)) + { + ActionWait(fPause); + ActionMoveToObject(oTargetPoint, nRun); + nNum++; + if (nNum > 9) + { + nTens++; + nNum = 0; + } + oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) +IntToString(nNum)); + } + // once there are no more waypoints available, decriment back to the last + // valid point. + nNum--; + if (nNum < 0) + { + nTens--; + nNum = 9; + } + + // start the cycle again going back to point 01 + oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) +IntToString(nNum)); + while(GetIsObjectValid(oTargetPoint)) + { + ActionWait(fPause); + ActionMoveToObject(oTargetPoint, nRun); + nNum--; + if (nNum < 0) + { + nTens--; + nNum = 9; + } + oTargetPoint = GetWaypointByTag(sWay + GetTag(OBJECT_SELF) + "_" + IntToString(nTens) +IntToString(nNum)); + } +} + +//:://///////////////////////////////////////////// +//:: Check Walkways +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function checks the passed in object to + see if they are supposed to be walking to + day or night postings. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Feb 26, 2002 +//::////////////////////////////////////////////// + +int CheckWayPoints(object oWalker = OBJECT_SELF) +{ + object oWay1; + object oWay2; + object oWay3; + object oWay4; + string sTag = GetTag(oWalker); + if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) + { + oWay2 = GetWaypointByTag("NIGHT_" + sTag); + oWay4 = GetWaypointByTag("WN_" + sTag + "_01"); + } + + oWay1 = GetWaypointByTag("POST_" + sTag); + oWay3 = GetWaypointByTag("WP_" + sTag + "_01"); + + if(GetIsObjectValid(oWay2) || GetIsObjectValid(oWay4) || GetIsObjectValid(oWay1) || GetIsObjectValid(oWay3)) + { + + return TRUE; + } + return FALSE; +} + +//:://///////////////////////////////////////////// +//:: Check for Walkways +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function checks if the passed in object + has waypoints using their tag. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: MAy 13, 2002 +//::////////////////////////////////////////////// +/* + if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING)) + { + DayWayString = "WP_"; + NightWayString = "WN_"; + DayPostString = "POST_"; + NightPostString = "NIGHT_"; + } + else + { + DayWayString = "WP_"; + NightWayString = "WP_"; + DayPostString = "POST_"; + NightPostString = "POST_"; + } +*/ +int GetIsPostOrWalking(object oWalker = OBJECT_SELF) +{ + string sTag = GetTag(oWalker); + + object oPost = GetWaypointByTag("POST_" + sTag); + if(!GetIsObjectValid(oPost)) + { + oPost = GetWaypointByTag("NIGHT_" + sTag); + if(!GetIsObjectValid(oPost)) + { + oPost = GetWaypointByTag("WP_" + sTag + "_01"); + if(!GetIsObjectValid(oPost)) + { + oPost = GetWaypointByTag("WN_" + sTag + "_01"); + if(!GetIsObjectValid(oPost)) + { + return FALSE; + } + } + } + } + return TRUE; +} + +//::////////////////////////////////////////////////////////////////////////////////////////////// +//:: Special Behavior Functions +//:: Copyright (c) 2001 Bioware Corp. +//::///////////////////////////////////////////////////////////////////////////////////////////// +/* + These commands handle the setting and getting of the Behavioral Master + If these special behaviors are used they will override the normal behavior expected + the animals normal Neutral Faction. +*/ +//::///////////////////////////////////////////////////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Dec 10, 2001 +//::///////////////////////////////////////////////////////////////////////////////////////////// +/* +void SetBehaviorState(int nCondition, int bValid = TRUE) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(bValid == TRUE) + { + nPlot = nPlot | nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } + else if (bValid == FALSE) + { + nPlot = nPlot & ~nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } +} + +int GetBehaviorState(int nCondition) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(nPlot & nCondition) + { + return TRUE; + } + return FALSE; +} +*/ + +//:://///////////////////////////////////////////// +//:: Play Mobile Ambient Animations +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Used for spawned creatures to not look like + zombies +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 23, 2001 +//::////////////////////////////////////////////// + +void PlayMobileAmbientAnimations() +{ + if(!GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) { + // not a bird + PlayMobileAmbientAnimations_NonAvian(); + } else { + // a bird + PlayMobileAmbientAnimations_Avian(); + } +} + +//:://///////////////////////////////////////////// +//:: Determine Special Behavior +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines the special behavior used by the NPC. + Generally all NPCs who you want to behave differently + than the defualt behavior. + For these behaviors, passing in a valid object will + cause the creature to become hostile the the attacker. + + MODIFIED February 7 2003: + - Rearranged logic order a little so that the creatures + will actually randomwalk when not fighting +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Dec 14, 2001 +//::////////////////////////////////////////////// + +void DetermineSpecialBehavior(object oIntruder = OBJECT_INVALID) +{ + //object oTarget = GetNearestSeenEnemy(); + object oTarget = GetTarget(); + if(GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE)) + { + int bAttack = FALSE; + if(!GetIsObjectValid(oIntruder)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && + !GetIsObjectValid(GetAttemptedSpellTarget()) && + !GetIsObjectValid(GetAttackTarget())) + { + if(GetIsObjectValid(oTarget) && GetDistanceToObject(oTarget) <= 8.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetIsTemporaryEnemy(oTarget, OBJECT_SELF, FALSE, 20.0); + bAttack = TRUE; + //DetermineCombatRound(oTarget); + InitCombat(oTarget); + } + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + bAttack = TRUE; + //DetermineCombatRound(oIntruder); + InitCombat(oIntruder); + } + + // * if not attacking, the wander + if (bAttack == FALSE) + { + ClearActions(CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior1); + ActionRandomWalk(); + return; + } + } + else if(GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && + !GetIsObjectValid(GetAttemptedSpellTarget()) && + !GetIsObjectValid(GetAttackTarget())) + { + if(GetIsObjectValid(oTarget) && GetDistanceToObject(oTarget) <= 6.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + //TalentFlee(oTarget); + DoAvoidEnemies(); + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + ClearActions(CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior2); + ActionRandomWalk(); + return; + } + } +} + +//:://///////////////////////////////////////////// +//:: ClearActions +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This is a wrapper for ClearAllActions. + Added to try and track down some bugs in + the AI. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 6, 2003 +//::////////////////////////////////////////////// +void ClearActions(int nClearConstant=0, int bClearCombat=FALSE) +{ + // SpeakString ("Clearing Action # " + IntToString(bClearConstant)); + if (CLEAR_DEBUG == TRUE) + { + SpeakString("Clearing all actions in State # " + IntToString(nClearConstant)); + } + ClearAllActions(bClearCombat); +} + +/********************************************************************** + * FUNCTION DEFINITIONS + **********************************************************************/ + +// Debugging function. Will be commented out for final. +void AnimDebug(string sMsg) +{ + //ActionSpeakString("ANIM: " + GetName(OBJECT_SELF) + " " + sMsg); + //SpeakString("ANIM: " + GetName(OBJECT_SELF) + " " + sMsg); + //PrintString("ANIM: " + GetName(OBJECT_SELF) + ": " + sMsg); +} + +// TRUE if the given creature has the given condition set +int GetAnimationCondition(int nCondition, object oCreature=OBJECT_SELF) +{ + return (GetLocalInt(oCreature, sAnimCondVarname) & nCondition); +} + +// Mark that the given creature has the given condition set +void SetAnimationCondition(int nCondition, int bValid=TRUE, object oCreature=OBJECT_SELF) +{ + int nCurrentCond = GetLocalInt(oCreature, sAnimCondVarname); + if (bValid) { + SetLocalInt(oCreature, sAnimCondVarname, nCurrentCond | nCondition); + } else { + SetLocalInt(oCreature, sAnimCondVarname, nCurrentCond & ~nCondition); + } +} + +// Returns TRUE if the creature is busy talking or interacting +// with a placeable. +int GetIsBusyWithAnimation(object oCreature) +{ + int bReturn = GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oCreature) + || GetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING, oCreature) + || GetCurrentAction(oCreature) != ACTION_INVALID; + +// if (bReturn == TRUE) AssignCommand(oCreature, SpeakString("Busy with anim")); + return bReturn; +} + +// Get a random nearby friend within the specified distance limit, +// that isn't busy doing something else. +object GetRandomFriend(float fMaxDistance) +{ + object oFriend = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND, + OBJECT_SELF, d2(), + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN); + + if (GetIsObjectValid(oFriend) + && !GetIsPC(oFriend) + //&& !GetIsBusyWithAnimation(oFriend) BK Feb 2003: There's not enough talking happening + && GetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE, oFriend) + && !IsInConversation(oFriend) + && !GetIsInCombat(oFriend) + && GetDistanceToObject(oFriend) <= fMaxDistance) + { + return oFriend; + } + + return OBJECT_INVALID; +} + +// Get a random nearby object within the specified distance with +// the specified tag. +object GetRandomObjectByTag(string sTag, float fMaxDistance) +{ + int nNth; + if (fMaxDistance == DISTANCE_SHORT) { + nNth = d2(); + } else if (fMaxDistance == DISTANCE_MEDIUM) { + nNth = d4(); + } else { + nNth = d6(); + } + object oObj = GetNearestObjectByTag(sTag, OBJECT_SELF, nNth); + if (GetIsObjectValid(oObj) && GetDistanceToObject(oObj) <= fMaxDistance) + return oObj; + return OBJECT_INVALID; +} + +// Get a random nearby object within the specified distance with +// the specified type. +// nObjType: Any of the OBJECT_TYPE_* constants +object GetRandomObjectByType(int nObjType, float fMaxDistance) +{ + int nNth; + if (fMaxDistance == DISTANCE_SHORT) { + nNth = d2(); + } else if (fMaxDistance == DISTANCE_LARGE) { + nNth = d4(); + } else { + nNth = d6(); + } + AnimDebug("looking for random object: " + IntToString(nNth)); + object oObj = GetNearestObject(nObjType, OBJECT_SELF, nNth); + if (GetIsObjectValid(oObj) && GetDistanceToObject(oObj) <= fMaxDistance) + return oObj; + return OBJECT_INVALID; +} + +// Get a random "NW_STOP" object in the area. +// If fMaxDistance is non-zero, will return OBJECT_INVALID +// if the stop is too far away. +// The first time this is called in a given area, it cycles +// through all the stops in the area and stores them. +object GetRandomStop(float fMaxDistance) +{ + object oStop; + object oArea = GetArea(OBJECT_SELF); + if (! GetLocalInt(oArea, "ANIM_STOPS_INITIALIZED") ) { + AnimDebug("Initializing stops in area " + GetName(oArea)); + // first time -- look up all the stops in the area and store them + int nNth = 1; + oStop = GetNearestObjectByTag("NW_STOP"); + while (GetIsObjectValid(oStop)) { + AnimDebug("Stop found"); + SetLocalObject(oArea, "ANIM_STOP_" + IntToString(nNth), oStop); + nNth++; + oStop = GetNearestObjectByTag("NW_STOP", OBJECT_SELF, nNth); + } + SetLocalInt(oArea, "ANIM_STOPS", nNth-1); + SetLocalInt(oArea, "ANIM_STOPS_INITIALIZED", TRUE); + } + + int nStop = Random(GetLocalInt(oArea, "ANIM_STOPS")) + 1; + oStop = GetLocalObject(oArea, "ANIM_STOP_" + IntToString(nStop)); + AnimDebug("Stop: " + IntToString(nStop) + + ": " + GetTag(oStop) + + ": " + FloatToString(GetDistanceToObject(oStop))); + if (GetIsObjectValid(oStop) && GetDistanceToObject(oStop) <= fMaxDistance) + return oStop; + return OBJECT_INVALID; +} + +// Check for a waypoint marked NW_HOME in the area; if it +// exists, mark it as the caller's home waypoint. +void SetCreatureHomeWaypoint() +{ + object oHome = GetNearestObjectByTag("NW_HOME"); + if (GetIsObjectValid(oHome)) { + SetAnimationCondition(NW_ANIM_FLAG_HAS_HOME); + SetLocalObject(OBJECT_SELF, "NW_ANIM_HOME", oHome); + } +} + +// Get a creature's home waypoint; returns OBJECT_INVALID if none set. +object GetCreatureHomeWaypoint() +{ + if (GetAnimationCondition(NW_ANIM_FLAG_HAS_HOME)) { + return GetLocalObject(OBJECT_SELF, "NW_ANIM_HOME"); + } + return OBJECT_INVALID; +} + + +// Set a specific creature (or OBJECT_INVALID to clear) as the caller's "friend" +void SetCurrentFriend(object oFriend) +{ + if (!GetIsObjectValid(oFriend)) { + DeleteLocalObject(OBJECT_SELF, "NW_ANIM_FRIEND"); + } else { + SetLocalObject(OBJECT_SELF, "NW_ANIM_FRIEND", oFriend); + } +} + +// Get the caller's current friend, if set; OBJECT_INVALID otherwise +object GetCurrentFriend() +{ + return GetLocalObject(OBJECT_SELF, "NW_ANIM_FRIEND"); +} + +// Set an object (or OBJECT_INVALID to clear) as the caller's interactive +// target. +void SetCurrentInteractionTarget(object oTarget) +{ + if (!GetIsObjectValid(oTarget)) { + DeleteLocalObject(OBJECT_SELF, "NW_ANIM_TARGET"); + } else { + SetLocalObject(OBJECT_SELF, "NW_ANIM_TARGET", oTarget); + } +} + +// Get the caller's current interaction target, if set; OBJECT_INVALID otherwise +object GetCurrentInteractionTarget() +{ + return GetLocalObject(OBJECT_SELF, "NW_ANIM_TARGET"); +} + + +// Mark the caller as civilized based on its racialtype. +// This will not unset the NW_ANIM_FLAG_IS_CIVILIZED flag +// if it was set outside. +void CheckIsCivilized() +{ + int nRacialType = GetRacialType(OBJECT_SELF); + switch (nRacialType) { + case RACIAL_TYPE_ELF : + case RACIAL_TYPE_GNOME : + case RACIAL_TYPE_HALFELF : + case RACIAL_TYPE_HALFLING : + case RACIAL_TYPE_HALFORC : + case RACIAL_TYPE_HUMAN : + case RACIAL_TYPE_HUMANOID_GOBLINOID : + case RACIAL_TYPE_HUMANOID_REPTILIAN : + case RACIAL_TYPE_HUMANOID_ORC: + SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + } +} + +// Check to see if we should switch on detect/stealth mode +void CheckCurrentModes() +{ + object oWay = GetNearestObject(OBJECT_TYPE_WAYPOINT); + string sTag = GetTag(oWay); + if (sTag == "NW_STEALTH") { + if (GetModeActive(NW_MODE_STEALTH)) { + // turn off stealth mode + SetModeActive(NW_MODE_STEALTH, FALSE); + } else { + // turn on stealth mode + SetModeActive(NW_MODE_STEALTH); + } + } else if (sTag == "NW_DETECT") { + if (GetModeActive(NW_MODE_DETECT)) { + // turn off detect mode + SetModeActive(NW_MODE_DETECT); + } else { + // turn on detect mode + SetModeActive(NW_MODE_DETECT); + } + } +} + + +// Check if the creature should be active and turn off if not, +// returning FALSE. This respects the NW_ANIM_FLAG_CONSTANT +// setting. +int CheckIsAnimActive(object oCreature) +{ + // Unless we're set to be constant, turn off if there's + // no PC in the area + if ( ! GetAnimationCondition(NW_ANIM_FLAG_CONSTANT)) { + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, + PLAYER_CHAR_IS_PC); + if ( !GetIsObjectValid(oPC) || GetArea(oPC) != GetArea(OBJECT_SELF)) { + // turn off + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE, FALSE); + return FALSE; + } + } + return TRUE; +} + + +// Check to see if we're in the middle of some action +// so we don't interrupt or pile actions onto the queue. +// Returns TRUE if in the middle of an action, FALSE otherwise. +int CheckCurrentAction() +{ + int nAction = GetCurrentAction(); + if (nAction == ACTION_SIT) { + // low prob of getting up, so we don't bop up and down constantly + if (Random(10) == 0) { + AnimActionGetUpFromChair(); + } + return TRUE; + } else if (nAction != ACTION_INVALID) { + // we're doing *something*, don't switch + AnimDebug("performing action"); + return TRUE; + } + return FALSE; +} + +// General initialization for animations. +// Called from all the Play_* functions. +void AnimInitialization() +{ + // If we've been set to be constant, flag us as + // active. + // if (GetAnimationCondition(NW_ANIM_FLAG_CONSTANT)) + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); + + // Set our home, if we have one + SetCreatureHomeWaypoint(); + + // Mark whether we're civilized or not + CheckIsCivilized(); + + SetAnimationCondition(NW_ANIM_FLAG_INITIALIZED); + +} + +// This function should be used for mobile NPCs and monsters +// other than avian ones. It should be called by the creature +// that you want to perform the animations. +// +// Creatures will interact with each other and move around, +// possibly even moving between areas. +// +// Creatures who are spawned in an area with the "NW_HOME" tag +// will mark that area as their home, leave from the nearest +// door during the day, and return at night. +// +// Injured creatures will go to the nearest "NW_SAFE" waypoint +// in their immediate area and rest there. +// +// If at any point the nearest waypoint is "NW_DETECT" or +// "NW_STEALTH", the creature will toggle search/stealth mode +// respectively. +// +// Creatures who are spawned in an outdoor area (for instance, +// in city streets) will go inside areas that have one of the +// interior waypoints (NW_TAVERN, NW_SHOP), if those areas +// are connected by an unlocked door. They will come back out +// as well. +// +// Creatures will also move randomly between objects in their +// area that have the tag "NW_STOP". +// +// Mobile creatures will have all the same behaviors as immobile +// creatures, just tending to move around more. +void PlayMobileAmbientAnimations_NonAvian() +{ + + if (!GetAnimationCondition(NW_ANIM_FLAG_INITIALIZED)) { + // General initialization + AnimInitialization(); + + // Mark us as mobile + SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE); + } + + // Short-circuit everything if we're not active yet + if (!GetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE)) + return; + AnimDebug("currently active"); + + // Check if we should turn off + if (!CheckIsAnimActive(OBJECT_SELF)) + return; + + AnimDebug("staying active"); + + //SpawnScriptDebugger(); + int nCurrentAction = GetCurrentAction(); + + // Check current actions so we don't interrupt something in progress + // Feb 14 2003: Because of the random walkthere needs to be a chance + // to stop walking. + if (CheckCurrentAction() && (nCurrentAction != ACTION_MOVETOPOINT)&& (nCurrentAction != ACTION_WAIT)) { + return; + } + + // Go someplace safe and rest if we are hurt + if (AnimActionRest()) { + AnimDebug("resting"); + return; + } + + // Check if current modes should change + CheckCurrentModes(); + UseStealthMode(); + UseDetectMode(); + + int bIsCivilized = GetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + if (bIsCivilized) + { + + + // Challenge an intruding PC + if (AnimActionChallengeIntruder()) { + return; + } + + // Check if we should go home + if (AnimActionGoHome()) { + AnimDebug("going home"); + return; + } + + // Check if we should leave home + if (AnimActionLeaveHome()) { + AnimDebug("leaving home"); + return; + } + + // Otherwise, do something random + AnimActionPlayRandomMobile(); + } else + { + AnimDebug("uncivilized"); + AnimActionPlayRandomUncivilized(); + } +} + +// Avian creatures will fly around randomly. +void PlayMobileAmbientAnimations_Avian() +{ + int nRoll = d4(); + object oFriend = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND, + OBJECT_SELF, + nRoll, + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN); + + effect eBird; + int nBird = d4(); + ClearActions(CLEAR_X0_I0_ANIMS_PlayMobile); + if(GetIsObjectValid(oFriend)) { + if(nBird == 1) { + ActionMoveToObject(oFriend, TRUE); + } else if (nBird == 2 || nBird == 3) { + AnimActionRandomMoveAway(oFriend, 100.0); + } else { + eBird = EffectDisappearAppear(GetLocation(oFriend)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBird, OBJECT_SELF, 4.0); + AnimActionRandomMoveAway(oFriend, 100.0); + } + } else { + ActionRandomWalk(); + } +} + +// This function should be used for any NPCs that should +// not move around. It should be called by the creature +// that you want to perform the animations. +// +// Creatures who call this function will never leave the +// area they spawned in. +// +// Injured creatures will rest at their starting location. +// +// Creatures who have the NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE +// flag set will move around slightly within the area. +// Creatures in an area with an "interior" waypoint (NW_HOME, +// NW_SHOP, NW_TAVERN) will be set to have this flag automatically. +// +// Close-range creatures will move around the area, frequently +// returning to their starting point, interacting with other +// creatures and placeables. They will visit NW_STOP waypoints +// in their immediate vicinity, and they will close opened doors. +// +// In all other cases, the creature will not move from its starting +// position. They will turn around randomly, turn to and 'talk' to +// other NPCs in their immediate vicinity, and interact with +// placeables in their immediate vicinity. +// +void PlayImmobileAmbientAnimations() +{ + if (!GetAnimationCondition(NW_ANIM_FLAG_INITIALIZED)) { + // General initialization + AnimInitialization(); + + // if we are at home, make us mobile in close-range + if (GetIsObjectValid(GetCreatureHomeWaypoint())) { + SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + } + + // also save our starting location + SetLocalLocation(OBJECT_SELF, + "ANIM_START_LOCATION", + GetLocation(OBJECT_SELF)); + } + + // Short-circuit everything if we're not active yet + if (!GetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE)) + return; + + AnimDebug("currently active"); + + // Check if we should turn off + if (!CheckIsAnimActive(OBJECT_SELF)) + return; + + AnimDebug("staying active"); + + // Check current actions so we don't interrupt something in progress + if (CheckCurrentAction()) { + return; + } + + // First check: go back to starting position and rest if we are hurt + if (AnimActionRest()) { + AnimDebug("resting"); + return; + } + + // Check if current modes should change + CheckCurrentModes(); + UseStealthMode(); + UseDetectMode(); + + // Challenge an intruding PC + if (AnimActionChallengeIntruder()) { + return; + } + + int bIsCivilized = GetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE)) { + AnimDebug("close range"); + AnimActionPlayRandomCloseRange(); + } else { + AnimDebug("immobile"); + AnimActionPlayRandomImmobile(); + } +} + + +// Perform a strictly immobile action. +// Includes: +// - turn towards a nearby unoccupied friend and 'talk' +// - turn towards a nearby placeable and interact +// - turn around randomly +// - play a random animation +void AnimActionPlayRandomImmobile() +{ + int nRoll = Random(12); + + //SpawnScriptDebugger(); + + + // If we're talking, either keep going or stop. + // Low prob of stopping, since both parties have + // a chance and conversations are cool. + if (GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING)) { + object oFriend = GetCurrentFriend(); + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + + if (nRoll == 0) { + AnimActionStopTalking(oFriend, nHDiff); + } else { + AnimActionPlayRandomTalkAnimation(nHDiff); + } + return; + } + + // If we're interacting with a placeable, either keep going or + // stop. High probability of stopping, since looks silly to + // constantly turn something on-and-off. + if (GetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING)) { + if (nRoll < 4) { + AnimActionStopInteracting(); + } else { + AnimActionPlayRandomInteractAnimation(GetCurrentInteractionTarget()); + } + return; + } + + // If we got here, we're not busy at the moment. + + // Clean out the action queue + ClearActions(CLEAR_X0_I0_ANIMS_PlayRandomMobile); + if (nRoll <=9) { + if (AnimActionFindFriend(DISTANCE_LARGE)) + return; + } + + if (nRoll > 9) { + // Try and interact with a nearby placeable + if (AnimActionFindPlaceable(DISTANCE_SHORT)) + return; + } + + // Default: clear our action queue and play a random animation + if ( nRoll < 5 ) { + // Turn around and play a random animation + + // BK Feb 2003: I got rid of this because I've never seen it look appropriate + // it always looks out of place and unrealistic + AnimActionTurnAround(); + AnimActionPlayRandomAnimation(); + } else { + // Just play a random animation + AnimActionPlayRandomAnimation(); + } +} + +// Perform a random close-range action. +// This will include: +// - any of the immobile actions +// - close any nearby doors, then return to current position +// - go to a nearby placeable and interact with it +// - go to a nearby friend and interact with them +// - walk to a nearby 'NW_STOP' waypoint +// - going back to starting point +void AnimActionPlayRandomCloseRange() +{ + if (GetIsBusyWithAnimation(OBJECT_SELF)) { + // either we're already in conversation or + // interacting with something, so continue -- + // all handled already in RandomImmobile. + AnimActionPlayRandomImmobile(); + return; + } + + // If we got here, we're not busy + + // Clean out the action queue + ClearActions(CLEAR_X0_I0_ANIMS_PlayRandomCloseRange1); + + // Possibly close open doors + if (GetAnimationCondition(NW_ANIM_FLAG_CLOSE_DOORS) && AnimActionCloseRandomDoor()) { + return; + } + + // For the rest of these, we check for specific rolls, + // to ensure that we don't do a lot of lookups on any one + // given pass. + + int nRoll = Random(6); + + // Possibly start talking to a friend + if (nRoll == 0 || nRoll == 1) { + if (AnimActionFindFriend(DISTANCE_LARGE)) + return; + // fall through to default + } + + // Possibly start fiddling with a placeable + if (nRoll == 2) { + if (AnimActionFindPlaceable(DISTANCE_LARGE)) + return; + // fall through if no placeable found + } + + // Possibly sit down + if (nRoll == 3) { + if (AnimActionSitInChair(DISTANCE_LARGE)) + return; + } + + // Go to a nearby stop + if (nRoll == 4) { + if (AnimActionGoToStop(DISTANCE_LARGE)) { + return; + } + + // No stops, so do a random walk and then come back + // to our current location + ClearActions(CLEAR_X0_I0_ANIMS_PlayRandomCloseRange2); + location locCurr = GetLocation(OBJECT_SELF); + ActionRandomWalk(); + ActionMoveToLocation(locCurr); + } + + if (nRoll == 5 && !GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE)) { + // Move back to starting point, saved at initialization + ActionMoveToLocation(GetLocalLocation(OBJECT_SELF, + "ANIM_START_LOCATION")); + return; + } + + // Default: do a random immobile animation + AnimActionPlayRandomImmobile(); +} + +// Perform a mobile action. +// Includes: +// - walk to an 'NW_STOP' waypoint in the area +// - walk to an area door and possibly go inside +// - go outside if previously went inside +// - fall through to AnimActionPlayRandomCloseRange +void AnimActionPlayRandomMobile() +{ + if (GetIsBusyWithAnimation(OBJECT_SELF)) { + // either we're already in conversation or + // interacting with something, so continue -- + // all handled already in RandomImmobile. + AnimActionPlayRandomImmobile(); + return; + } + + // If we got here, we're not busy + + // Clean out the action queue + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionPlayRandomMobile1); + + int nRoll = Random(9); + + if (nRoll == 0) { + // If we're inside, possibly leave + if (AnimActionGoOutside()) + return; + } + + if (nRoll == 1) { + // Possibly go into an interior area + if (AnimActionGoInside()) + return; + } + + // If we fell through or got a random number + // less than 7, go to a stop waypoint, or random + // walk if no stop waypoints were found. + if (nRoll < 5) { + // Pass in a huge number so any stop will be valid + if (AnimActionGoToStop(1000.0)) + return; + + // If no stops, do a random walk + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionPlayRandomMobile2); + ActionRandomWalk(); + return; + } + + // Default: do something close-range +// AnimActionPlayRandomCloseRange(); + + // MODIFIED February 14 2003. Will play an immobile animation, if nothing else found to do + + PlayImmobileAmbientAnimations(); +} + +// Perform a mobile action for an uncivilized creature. +// Includes: +// - perform random limited animations +// - walk to an 'NW_STOP' waypoint in the area +// - random walk if none available +void AnimActionPlayRandomUncivilized() +{ + int nRoll = Random(6); + + if (nRoll != 5) { + if (AnimActionGoToStop(1000.0)) + return; + // no stops, so random walk + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionPlayRandomUncivilized); + ActionRandomWalk(); + } + + // Play one of our few random animations + AnimActionPlayRandomBasicAnimation(); +} + +/********************************************************************** + ********************************************************************** + * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE + * The functions below here are building blocks used in the main + * functions above. + * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE + ********************************************************************** + **********************************************************************/ + + +// Start interacting with a placeable object +void AnimActionStartInteracting(object oPlaceable) +{ + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE) + || GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE)) + { + ActionMoveToObject(oPlaceable, FALSE, DISTANCE_TINY); + } + ActionDoCommand(SetFacingPoint(GetPosition(oPlaceable))); + SetCurrentInteractionTarget(oPlaceable); + + AnimActionPlayRandomInteractAnimation(oPlaceable); +} + +// Stop interacting with a placeable object +void AnimActionStopInteracting() +{ + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE)) { + AnimActionRandomMoveAway(GetCurrentInteractionTarget(), DISTANCE_LARGE); + } + SetCurrentInteractionTarget(OBJECT_INVALID); + + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING, FALSE); + + AnimActionTurnAround(); + AnimActionPlayRandomAnimation(); +} + +// Start talking with a friend +void AnimActionStartTalking(object oFriend, int nHDiff=0) +{ + AnimDebug("started talking to " + GetName(oFriend)); + object oMe = OBJECT_SELF; + + // Say hello and move to each other if we're not immobile + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE) + || GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE)) + { + ActionMoveToObject(oFriend, FALSE, DISTANCE_TINY); + AnimActionPlayRandomGreeting(nHDiff); + } + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE, oFriend) + || GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE, oFriend)) + { + AssignCommand(oFriend, + ActionMoveToObject(oMe, FALSE, DISTANCE_TINY)); + AssignCommand(oFriend, AnimActionPlayRandomGreeting(0 - nHDiff)); + } + + SetCurrentFriend(oFriend); + AssignCommand(oFriend, SetCurrentFriend(oMe)); + ActionDoCommand(SetFacingPoint(GetPosition(oFriend))); + AssignCommand(oFriend, ActionDoCommand(SetFacingPoint(GetPosition(oMe)))); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, TRUE, oFriend); +} + +// Stop talking to the given friend +void AnimActionStopTalking(object oFriend, int nHDiff=0) +{ + AnimDebug("stopped talking to " + GetName(oFriend)); + object oMe = OBJECT_SELF; + + // Say goodbye and move away if we're not immobile + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE)) { + AnimActionPlayRandomGoodbye(nHDiff); + AnimActionRandomMoveAway(oFriend, DISTANCE_LARGE); + } else { + AnimActionTurnAround(); + AnimActionPlayRandomAnimation(); + } + + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE, oFriend)) { + AssignCommand(oFriend, AnimActionPlayRandomGoodbye(0 - nHDiff)); + AssignCommand(oFriend, + AnimActionRandomMoveAway(oMe, DISTANCE_HUGE)); + } else { + AssignCommand(oFriend, AnimActionTurnAround()); + AssignCommand(oFriend, AnimActionPlayRandomAnimation()); + } + + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE, oFriend); + +} + +// Play a greeting animation and possibly voicechat. +// If a negative hit dice difference (HD caller - HD greeted) is +// passed in, the caller will bow. +void AnimActionPlayRandomGreeting(int nHDiff=0) +{ + if (Random(2) == 0 && GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceHello(); + } + + if (nHDiff < 0 || Random(4) == 0) + ActionPlayAnimation(ANIMATION_FIREFORGET_BOW); + else + ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING); +} + +// Play a random farewell animation and possibly voicechat. +// If a negative hit dice difference is passed in, the +// caller will bow. +void AnimActionPlayRandomGoodbye(int nHDiff) +{ + if (Random(2) == 0 && GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceGoodbye(); + } + + if (nHDiff < 0 || Random(4) == 0) + ActionPlayAnimation(ANIMATION_FIREFORGET_BOW); + else + ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING); +} + +// Randomly move away from an object the specified distance. +// This is mainly because ActionMoveAwayFromLocation isn't working. +void AnimActionRandomMoveAway(object oSource, float fDistance) +{ + location lTarget = GetRandomLocation(GetArea(OBJECT_SELF), oSource, fDistance); + + ActionMoveToLocation(lTarget); +} + +// Play animation of shaking head "no" to left & right +void AnimActionShakeHead() +{ + ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 3.0); + ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT, 3.0); +} + +// Play animation of looking to left and right +void AnimActionLookAround() +{ + ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 0.75); + ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT, 0.75); +} + +// Turn around to face a random direction +void AnimActionTurnAround() +{ +// BK Feb 2003: This never looks good. Don't do it. +// ActionDoCommand(SetFacing(IntToFloat(Random(360)))); +} + + + +// Go through a door and close it behind you, +// then walk a short distance away. +// This assumes the door exists, is unlocked, etc. +void AnimActionGoThroughDoor(object oDoor) +{ + AnimDebug("going through door " + GetTag(oDoor)); + SetLocalInt(oDoor, "BEING_CLOSED", TRUE); + object oDest = GetTransitionTarget(oDoor); + ActionMoveToObject(oDest); + ActionDoCommand(AssignCommand(oDest, ActionCloseDoor(oDest))); + ActionDoCommand(AssignCommand(oDoor, ActionCloseDoor(oDoor))); + ActionDoCommand(SetLocalInt(oDoor, "BEING_CLOSED", FALSE)); + DelayCommand(10.0, SetLocalInt(oDoor, "BEING_CLOSED", FALSE)); + AnimActionRandomMoveAway(oDest, DISTANCE_MEDIUM); +} + +/********************************************************************** + * The following AnimAction functions have a possibility of failing + * and not assigning any actions. + * They return TRUE on success, FALSE on failure. See notes up in the + * prototype section for details. + **********************************************************************/ + + +// If there's an open door nearby, possibly go close it, +// then come back to our current spot. +int AnimActionCloseRandomDoor() +{ + if (Random(4) != 0) return FALSE; + + int nNth = 1; + object oDoor = GetNearestObject(OBJECT_TYPE_DOOR); + location locCurrent = GetLocation(OBJECT_SELF); + while (GetIsObjectValid(oDoor)) { + // make sure everyone doesn't run to close the same door + if (GetIsOpen(oDoor) && !GetLocalInt(oDoor, "BEING_CLOSED")) { + AnimDebug("closing door: " + GetTag(oDoor)); + SetLocalInt(oDoor, "BEING_CLOSED", TRUE); + ActionCloseDoor(oDoor); + ActionDoCommand(SetLocalInt(oDoor, "BEING_CLOSED", FALSE)); + ActionMoveToLocation(locCurrent); + return TRUE; + } else { + AnimDebug("closed or being closed: " + GetTag(oDoor)); + } + nNth++; + oDoor = GetNearestObject(OBJECT_TYPE_DOOR, OBJECT_SELF, nNth); + } + return FALSE; +} + +// Sit in a random nearby chair if available. +// Looks for items with tag: Chair +int AnimActionSitInChair(float fMaxDistance) +{ + object oChair = GetRandomObjectByTag("Chair", fMaxDistance); + if (GetIsObjectValid(oChair) && !GetIsObjectValid(GetSittingCreature(oChair))) { + ActionSit(oChair); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + return TRUE; + } + return FALSE; +} + +// Get up from a chair if we're sitting +int AnimActionGetUpFromChair() +{ + AnimDebug("getting up from chair"); + if (GetCurrentAction() == ACTION_SIT) { + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionGetUpFromChair); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING, FALSE); + AnimActionRandomMoveAway(GetNearestObject(OBJECT_TYPE_PLACEABLE), DISTANCE_SHORT); + AnimDebug("got up from chair"); + return TRUE; + } + return FALSE; +} + +// Go through a nearby door if appropriate. +// This will be done if the door is unlocked and +// the area the door leads to contains a waypoint +// with one of these tags: +// NW_TAVERN, NW_SHOP +int AnimActionGoInside() +{ + // Don't go inside a second area, since we'll never get + // back to our original one if we do that. + if (GetAnimationCondition(NW_ANIM_FLAG_IS_INSIDE)) { + AnimDebug("is inside already"); + return FALSE; + } + + object oDoor = GetRandomObjectByType(OBJECT_TYPE_DOOR, 1000.0); + if (!GetIsObjectValid(oDoor) || GetLocked(oDoor)) { + AnimDebug("Failed to enter door: " + GetTag(oDoor)); + return FALSE; + } + + object oDest = GetTransitionTarget(oDoor); + AnimDebug("Destination: " + GetTag(oDest)); + object oWay = GetNearestObjectByTag("NW_TAVERN", oDest); + if (!GetIsObjectValid(oWay)) + oWay = GetNearestObjectByTag("NW_SHOP", oDest); + if (GetIsObjectValid(oWay)) { + AnimDebug("Valid waypoint found: " + GetTag(oWay)); + AnimActionGoThroughDoor(oDoor); + SetAnimationCondition(NW_ANIM_FLAG_IS_INSIDE); + SetLocalObject(OBJECT_SELF, "NW_ANIM_DOOR", oDest); + return TRUE; + } + + return FALSE; +} + +// Leave area if appropriate. +// This only works for NPCs that entered an area that +// has a waypoint with one of these tags: +// NW_TAVERN, NW_SHOP +// If the NPC entered through a door, they will exit through +// that door. +int AnimActionGoOutside() +{ + if (GetAnimationCondition(NW_ANIM_FLAG_IS_INSIDE)) { + object oDoor = GetLocalObject(OBJECT_SELF, "NW_ANIM_DOOR"); + if (GetIsObjectValid(oDoor)) { + DeleteLocalObject(OBJECT_SELF, "NW_ANIM_DOOR"); + AnimActionGoThroughDoor(oDoor); + SetAnimationCondition(NW_ANIM_FLAG_IS_INSIDE, FALSE); + return TRUE; + } + } + return FALSE; +} + +// Go to a nearby waypoint or placeable marked with the +// tag "NW_STOP". +int AnimActionGoToStop(float fMaxDistance) +{ + object oStop = GetRandomStop(fMaxDistance); + if (GetIsObjectValid(oStop)) { + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionGoToStop); + ActionMoveToObject(oStop, FALSE, DISTANCE_SHORT); + return TRUE; + } + return FALSE; +} + +// Find a friend within the given distance and talk to them. +// Returns TRUE on success, FALSE on failure. +int AnimActionFindFriend(float fMaxDistance) +{ + // If we had a friend recently, make sure we don't start talking + // again right away +// if (GetIsObjectValid(GetCurrentFriend())) { +// SetCurrentFriend(OBJECT_INVALID); +// } else + { + // Try and find a friend to talk to + object oFriend = GetRandomFriend(fMaxDistance); + if (GetIsObjectValid(oFriend) && !GetIsBusyWithAnimation(oFriend)) { + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + AnimActionStartTalking(oFriend, nHDiff); + return 1; + } + } + return 0; +} + +// Find a placeable within the given distance and interact +// with it. +// Returns TRUE on success, FALSE on failure. +int AnimActionFindPlaceable(float fMaxDistance) +{ + object oPlaceable = GetRandomObjectByTag("NW_INTERACTIVE", DISTANCE_SHORT); + if (GetIsObjectValid(oPlaceable)) { + AnimActionStartInteracting(oPlaceable); + return 1; + } + return 0; +} + +// If injured, find the nearest "NW_SAFE" object, +// go to it, and rest. +// Returns TRUE on success, FALSE on failure. +int AnimActionRest() +{ + if (GetCurrentHitPoints() < GetMaxHitPoints()) { + object oSafe = GetNearestObjectByTag("NW_SAFE"); + if (GetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE) && GetIsObjectValid(oSafe)) { + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionRest1); + ActionMoveToObject(oSafe); + //ActionRest(); + return TRUE; + } else { + location lStart = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionRest2); + ActionMoveToLocation(lStart); + //ActionRest(); + return TRUE; + } + } + return FALSE; +} + +// If it is night, go back to our home waypoint, if we have one. +// This is only meaningful for mobile NPCs who would have left +// their homes during the day. +// Returns TRUE on success, FALSE on failure. +int AnimActionGoHome() +{ + object oHome = GetCreatureHomeWaypoint(); + if ( GetIsObjectValid(oHome) && !GetIsDay() && GetArea(OBJECT_SELF) != GetArea(oHome)) { + ClearActions(CLEAR_X0_I0_ANIMS_GoHome); + AnimActionGoOutside(); + AnimActionGoThroughDoor(GetLocalObject(OBJECT_SELF, + "NW_ANIM_DOOR_HOME")); + return TRUE; + } + return FALSE; +} + +// If it is day, leave our home area, if we have one. +// This is only meaningful for mobile NPCs. +// Returns TRUE on success, FALSE on failure. +int AnimActionLeaveHome() +{ + object oHome = GetCreatureHomeWaypoint(); + if ( GetIsObjectValid(oHome) && GetIsDay() && GetArea(OBJECT_SELF) == GetArea(oHome)) { + // Find the nearest door and walk out + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionLeaveHome); + object oDoor = GetNearestObject(OBJECT_TYPE_DOOR); + if (!GetIsObjectValid(oDoor) || GetLocked(oDoor)) + return FALSE; + + object oDest = GetTransitionTarget(oDoor); + if (GetIsObjectValid(oDest)) { + SetLocalObject(OBJECT_SELF, "NW_ANIM_DOOR_HOME", oDest); + AnimActionGoThroughDoor(oDoor); + return TRUE; + } + } + return FALSE; +} + + +// If a PC is in the NPC's home and has not been challenged before, +// challenge them. +// This involves speaking a one-liner conversation from the +// conversation file ANIM_CONVERSATION, set above. +// Returns TRUE on success, FALSE on failure. +int AnimActionChallengeIntruder() +{ + object oHome = GetCreatureHomeWaypoint(); + if (GetIsObjectValid(oHome) && GetArea(OBJECT_SELF) == GetArea(oHome)) { + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); + if (GetIsObjectValid(oPC) && !GetLocalInt(OBJECT_SELF, GetName(oPC) + "_CHALLENGED")) { + ClearActions(CLEAR_X0_I0_ANIMS_AnimActionChallengeIntruder); + ActionDoCommand(SetFacingPoint(GetPosition(oPC))); + ActionDoCommand(SpeakOneLinerConversation(ANIM_CONVERSATION, oPC)); + SetLocalInt(OBJECT_SELF, GetName(oPC) + "_CHALLENGED", TRUE); + return TRUE; + } + } + return FALSE; +} + + +/********************************************************************** + ********************************************************************** + * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE + * The functions stuck below here are generally just big ugly + * switch statements to choose between a bunch of random + * animations. + * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE * NOTE + ********************************************************************** + **********************************************************************/ + +// Interact with a placeable object. +// This will activate/deactivate the placeable object if a valid +// one is passed in. +// KLUDGE: If a placeable object without an inventory should +// still be opened/shut instead of de/activated, set +// its Will Save to 1. +void AnimActionPlayRandomInteractAnimation(object oPlaceable) +{ + int nRoll = Random(5); + + if (nRoll == 0) { + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); + return; + } + + // See where the placeable is in relation to us, height-wise + vector vPos = GetPosition(oPlaceable); + vector vMyPos = GetPosition(OBJECT_SELF); + float fZDiff = vMyPos.z - vPos.z; + if ( fZDiff > 0.0 ) { + // we're above the placeable + ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + } else { + ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + } + + // KLUDGE! KLUDGE! KLUDGE! + // Because of placeables like the trap doors, etc, that should be + // "opened" rather than "activated", but don't have an inventory, + // we use this ugly hack: set the "Will" saving throw of a placeable + // to the value 1 if it should be opened rather than activated. + if (GetHasInventory(oPlaceable) || GetWillSavingThrow(oPlaceable) == 1) { + if (GetIsOpen(oPlaceable)) { + AssignCommand(oPlaceable, + DelayCommand(ANIM_LOOPING_LENGTH, + ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE))); + } else { + AssignCommand(oPlaceable, + DelayCommand(ANIM_LOOPING_LENGTH, + ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN))); + } + } else { + int bIsActive = GetLocalInt(oPlaceable, "NW_ANIM_PLACEABLE_ACTIVE"); + if (bIsActive) { + AssignCommand(oPlaceable, + DelayCommand(ANIM_LOOPING_LENGTH, + ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE))); + SetLocalInt(oPlaceable, "NW_ANIM_PLACEABLE_ACTIVE", FALSE); + } else { + AssignCommand(oPlaceable, + DelayCommand(ANIM_LOOPING_LENGTH, + ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE))); + SetLocalInt(oPlaceable, "NW_ANIM_PLACEABLE_ACTIVE", TRUE); + } + } + + return; +} + +// Play a random talk gesture animation. +// If a hit dice difference (should be the hit dice of the caller +// minus the hit dice of the person being talked to) is passed in, +// the caller will play slightly different animations if they are +// weaker. +void AnimActionPlayRandomTalkAnimation(int nHDiff) +{ + int nRoll = Random(9); +//SpeakString("Talk " + IntToString(nRoll)); + switch (nRoll) { + case 0: + if (GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceYes(); + } + // deliberate fall-through! + case 1: + ActionPlayAnimation(ANIMATION_LOOPING_LISTEN, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 2: + case 3: + ActionPlayAnimation(ANIMATION_LOOPING_TALK_NORMAL, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 4: + if (nHDiff < 0) + ActionPlayAnimation(ANIMATION_LOOPING_TALK_PLEADING, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + else { + if (Random(2) == 0 && GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceLaugh(); + } + ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + } + break; + case 5: + // BK Feb 2003 Salutes look stupid + // if (nHDiff < 0) + // ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 0.75); + // else + ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 6: + if (GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceNo(); + } + // deliberate fall-through! + case 7: + AnimActionShakeHead(); + break; + case 8: + if (nHDiff > 0) + ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT); + else { + if (Random(2) == 0 && GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceLaugh(); + } + ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + } + break; + } + + return; +} + +// Play a random animation that all creatures should have. +void AnimActionPlayRandomBasicAnimation() +{ + int nRoll = Random(2); + switch (nRoll) { + case 0: + // BK Feb 2003: This always looks dumb + // ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, + // ANIM_LOOPING_SPEED, + // ANIM_LOOPING_LENGTH); + break; + case 1: + ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT); + break; + } +} + + +// Play a random animation. +void AnimActionPlayRandomAnimation() +{ + int nRoll; + int bInTavern=FALSE; + int bInHome=FALSE; + int bNearAltar=FALSE; + + object oWay = GetNearestObjectByTag("NW_TAVERN"); + if (GetIsObjectValid(oWay)) { + bInTavern = TRUE; + } else { + oWay = GetNearestObjectByTag("NW_HOME"); + if (GetIsObjectValid(oWay)) { + bInHome = TRUE; + } else { + oWay = GetNearestObjectByTag("NW_ALTAR"); + if (GetIsObjectValid(oWay) && GetDistanceToObject(oWay) < DISTANCE_SHORT) { + bNearAltar = TRUE; + } + } + } + + if (bInTavern) { + nRoll = Random(15); + switch (nRoll) { + case 0: + case 1: + ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK); break; + case 2: + if (GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoicePoisoned(); + } + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 3: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 4: + ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1); break; + case 5: + ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2); break; + case 6: + ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3); break; + case 7: + case 8: + if (GetAnimationCondition(NW_ANIM_FLAG_CHATTER)) { + VoiceLaugh(); + } + ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 9: + case 10: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED); break; + case 11: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); break; + case 12: + case 13: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_TIRED, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 14: + AnimActionLookAround(); break; + } + } else if (bNearAltar) { + nRoll = Random(10); + switch (nRoll) { + case 0: + ActionPlayAnimation(ANIMATION_FIREFORGET_READ); break; + case 1: + case 2: + case 3: + ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH * 2); + break; + case 4: + case 5: + ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH * 2); + break; + case 6: + ActionPlayAnimation(ANIMATION_LOOPING_LISTEN, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 7: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 8: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE2, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 9: + AnimActionLookAround(); break; + } + } else if (bInHome) { + nRoll = Random(6); + switch (nRoll) { + case 0: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 1: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE2, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 2: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_TIRED, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 3: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED); break; + case 4: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); break; + case 5: + AnimActionLookAround(); break; + } + } else { + // generic set, for the street + nRoll = Random(8); + switch (nRoll) { + case 0: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 1: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE2, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 2: + /* Bk Feb 2003: Looks dumb + ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break;*/ + case 3: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED); break; + case 4: + ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); break; + case 5: + ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_TIRED, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 6: + ActionPlayAnimation(ANIMATION_LOOPING_LOOK_FAR, + ANIM_LOOPING_SPEED, + ANIM_LOOPING_LENGTH); + break; + case 7: + AnimActionLookAround(); break; + } + } + return; +} \ No newline at end of file diff --git a/_module/nss/no_lib_data.nss b/_module/nss/no_lib_data.nss new file mode 100644 index 00000000..d435949b --- /dev/null +++ b/_module/nss/no_lib_data.nss @@ -0,0 +1,15 @@ +struct sSpellDefStatus { + int iTotal; + int iMantle; + int iElem; + int iDeath; + int iMind; + int iInvis; + int iBlocker; +}; + +struct sPhysDefStatus { + int iTotal; + int iDamred; + int iConceal; +}; \ No newline at end of file diff --git a/_module/nss/no_lib_feat.nss b/_module/nss/no_lib_feat.nss new file mode 100644 index 00000000..2acb3062 --- /dev/null +++ b/_module/nss/no_lib_feat.nss @@ -0,0 +1,95 @@ +#include "no_inc_ptypes" + +//functions +int GetEnhanceFeat( object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iFeat = 0; + + if ( GetHasFeat( FEAT_EMPTY_BODY, oEnt ) && !GetHasFeatEffect( FEAT_EMPTY_BODY, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_EMPTY_BODY ); + } + if ( GetHasFeat( FEAT_MIGHTY_RAGE, oEnt ) ) + { + if ( !GetHasFeatEffect( FEAT_MIGHTY_RAGE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_MIGHTY_RAGE ); + } + } + else if ( GetHasFeat( FEAT_BARBARIAN_RAGE, oEnt ) && !GetHasFeatEffect( FEAT_BARBARIAN_RAGE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_BARBARIAN_RAGE ); + } + if ( GetHasFeat( FEAT_BARD_SONGS, oEnt ) && !GetHasFeatEffect( FEAT_BARD_SONGS, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_BARD_SONGS ); + } + if ( GetHasFeat( FEAT_CURSE_SONG, oEnt ) && !GetHasFeatEffect( FEAT_CURSE_SONG, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_CURSE_SONG ); + } + if ( GetHasFeat( FEAT_DIVINE_WRATH, oEnt ) && GetAbilityModifier( ABILITY_CHARISMA, oEnt ) > 0 && !GetHasFeatEffect( FEAT_DIVINE_WRATH, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_DIVINE_WRATH ); + } + if ( GetHasFeat( FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE, oEnt ) && !GetHasFeatEffect( FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE ); + } + if ( GetHasFeat( FEAT_EPIC_BLINDING_SPEED, oEnt ) && !GetHasFeatEffect( FEAT_EPIC_BLINDING_SPEED, oEnt ) && + !GetHasSpellEffect( SPELL_HASTE, oEnt ) && !GetHasSpellEffect( SPELL_MASS_HASTE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_EPIC_BLINDING_SPEED ); + } + if ( GetHasFeat( FEAT_SHADOW_EVADE, oEnt ) && !GetHasFeatEffect( FEAT_SHADOW_EVADE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_SHADOW_EVADE ); + } + if ( GetHasFeat( FEAT_DIVINE_MIGHT, oEnt ) && GetHasFeat( FEAT_TURN_UNDEAD, oEnt ) && !GetHasFeatEffect( FEAT_DIVINE_MIGHT, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_DIVINE_MIGHT ); + } + if ( GetHasFeat( FEAT_DIVINE_SHIELD, oEnt ) && GetHasFeat( FEAT_TURN_UNDEAD, oEnt ) && !GetHasFeatEffect( FEAT_DIVINE_SHIELD, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_DIVINE_SHIELD ); + } + if ( GetHasFeat( FEAT_TYMORAS_SMILE, oEnt ) && !GetHasFeatEffect( FEAT_TYMORAS_SMILE, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_TYMORAS_SMILE ); + } + + iFeat = GetLocalInt( oEnt, "#FEAT_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#FEAT_" + IntToString( iCnt-- ) ); + } + return iFeat; +} + +int GetGroupEnhanceFeat( object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iFeat = 0; + + if ( GetHasFeat( FEAT_BARD_SONGS, oEnt ) && !GetHasFeatEffect( FEAT_BARD_SONGS, oEnt ) ) + { + SetLocalInt( oEnt, "#FEAT_" + IntToString( ++iCnt ), FEAT_BARD_SONGS ); + } + + iFeat = GetLocalInt( oEnt, "#FEAT_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#FEAT_" + IntToString( iCnt-- ) ); + } + return iFeat; +} + +float GetGroupEnhanceFeatRadius( int iFeat ) +{ + if ( iFeat == FEAT_BARD_SONGS ) + { + return RADIUS_SIZE_COLOSSAL; + } + return 0.0; +} \ No newline at end of file diff --git a/_module/nss/no_lib_magic.nss b/_module/nss/no_lib_magic.nss new file mode 100644 index 00000000..c6533b72 --- /dev/null +++ b/_module/nss/no_lib_magic.nss @@ -0,0 +1,3982 @@ +#include "no_inc_ptypes" + +//functions +int GetBestMagicDefenseSelf( object oEnt=OBJECT_SELF ) +{ + int iR; + + if (!GetHasSpellEffect( SPELL_LESSER_SPELL_MANTLE, oEnt ) && + !GetHasSpellEffect( SPELL_SPELL_MANTLE, oEnt ) && + !GetHasSpellEffect( SPELL_GREATER_SPELL_MANTLE, oEnt ) ) + { + iR = Random( 3 ) + 1; + if ( GetHasSpell( SPELL_LESSER_SPELL_MANTLE, oEnt ) && iR == 1 ) + { + return SPELL_LESSER_SPELL_MANTLE; + } + if ( GetHasSpell( SPELL_SPELL_MANTLE, oEnt ) && iR == 2 ) + { + return SPELL_SPELL_MANTLE; + } + if ( GetHasSpell( SPELL_GREATER_SPELL_MANTLE, oEnt ) && iR == 3 ) + { + return SPELL_GREATER_SPELL_MANTLE; + } + } + // Don't have mantles active or available + // No reliable defense against high level spells available + // Do the best we can with other spells + // resistance from spells + if ( !GetHasSpellEffect( SPELL_SPELL_RESISTANCE, oEnt ) ) + { + if ( GetHasSpell( SPELL_SPELL_RESISTANCE, oEnt ) ) + { + return SPELL_SPELL_RESISTANCE; + } + } + // protection from spells + if ( !GetHasSpellEffect( SPELL_PROTECTION_FROM_SPELLS, oEnt ) ) + { + if ( GetHasSpell( SPELL_PROTECTION_FROM_SPELLS, oEnt ) ) + { + return SPELL_PROTECTION_FROM_SPELLS; + } + } + // Shadow Shield/Death Ward for negation of death effects + if ( !GetHasSpellEffect( SPELL_SHADOW_SHIELD, oEnt ) && + !GetHasSpellEffect( SPELL_DEATH_WARD, oEnt ) ) + { + if ( GetHasSpell( SPELL_SHADOW_SHIELD, oEnt ) ) + { + return SPELL_SHADOW_SHIELD; + } + if ( GetHasSpell( SPELL_DEATH_WARD, oEnt ) ) + { + return SPELL_DEATH_WARD; + } + } + // Next go for elemental protection + if (!GetHasSpellEffect( SPELL_ENDURE_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_RESIST_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_PROTECTION_FROM_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_ENERGY_BUFFER, oEnt ) ) + { + iR = Random( 4 ) + 1; + if ( GetHasSpell( SPELL_ENDURE_ELEMENTS, oEnt ) && iR == 1 ) + { + return SPELL_ENDURE_ELEMENTS; + } + if ( GetHasSpell( SPELL_RESIST_ELEMENTS, oEnt ) && iR == 2 ) + { + return SPELL_RESIST_ELEMENTS; + } + if ( GetHasSpell( SPELL_PROTECTION_FROM_ELEMENTS, oEnt ) && iR == 3 ) + { + return SPELL_PROTECTION_FROM_ELEMENTS; + } + if ( GetHasSpell( SPELL_ENERGY_BUFFER, oEnt ) && iR == 4 ) + { + return SPELL_ENERGY_BUFFER; + } + } + // Next go for elemental shield + if ( !GetHasSpellEffect( SPELL_ELEMENTAL_SHIELD, oEnt ) ) + { + if ( GetHasSpell( SPELL_ELEMENTAL_SHIELD, oEnt ) ) + { + return SPELL_ELEMENTAL_SHIELD; + } + } + // Next try any other defenses + if (!GetHasSpellEffect( SPELL_LESSER_MIND_BLANK, oEnt ) && + !GetHasSpellEffect( SPELL_MIND_BLANK, oEnt ) ) + { + // ramp up mind blanks + // LATER: add check for allies, use mind blank appropriately + if ( GetHasSpell( SPELL_LESSER_MIND_BLANK, oEnt ) ) + { + return SPELL_LESSER_MIND_BLANK; + } + /* used in group stuff + if ( GetHasSpell( SPELL_MIND_BLANK, oEnt ) ) + { + return SPELL_MIND_BLANK; + } + */ + } + // globes, biggest first + if ( !GetHasSpellEffect( SPELL_GLOBE_OF_INVULNERABILITY, oEnt ) ) + { + if ( GetHasSpell( SPELL_GLOBE_OF_INVULNERABILITY, oEnt ) ) + { + return SPELL_GLOBE_OF_INVULNERABILITY; + } + } + if ( !GetHasSpellEffect( SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oEnt ) ) + { + if ( GetHasSpell( SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oEnt ) ) + { + return SPELL_MINOR_GLOBE_OF_INVULNERABILITY; + } + } + // scraping the bottom of the barrel now + if (!GetHasSpellEffect( SPELL_GLOBE_OF_INVULNERABILITY, oEnt ) && + !GetHasSpellEffect( SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oEnt ) && + !GetHasSpellEffect( SPELL_ETHEREAL_VISAGE, oEnt ) ) + { + if ( GetHasSpell( SPELL_ETHEREAL_VISAGE, oEnt ) ) + { + return SPELL_ETHEREAL_VISAGE; + } + if ( !GetHasSpellEffect( SPELL_GHOSTLY_VISAGE, oEnt ) && GetHasSpell( SPELL_GHOSTLY_VISAGE, oEnt ) ) + { + return SPELL_GHOSTLY_VISAGE; + } + } + return FALSE; +} + +int GetBestMagicDefenseSingle( object oEnt=OBJECT_SELF, object oC=OBJECT_SELF ) +{ + int iR; + + if ( !GetHasSpellEffect( SPELL_SPELL_RESISTANCE, oEnt ) ) + { + if ( GetHasSpell( SPELL_SPELL_RESISTANCE, oC ) ) + { + return SPELL_SPELL_RESISTANCE; + } + } + // Shadow Shield/Death Ward for negation of death effects + if ( !GetHasSpellEffect( SPELL_SHADOW_SHIELD, oEnt ) && + !GetHasSpellEffect( SPELL_DEATH_WARD, oEnt ) ) + { + /* + if ( GetHasSpell( SPELL_SHADOW_SHIELD, oC ) ) + { + return SPELL_SHADOW_SHIELD; + } + */ + if ( GetHasSpell( SPELL_DEATH_WARD, oC ) ) + { + return SPELL_DEATH_WARD; + } + } + // Next go for elemental protection + if (!GetHasSpellEffect( SPELL_ENDURE_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_RESIST_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_PROTECTION_FROM_ELEMENTS, oEnt ) && + !GetHasSpellEffect( SPELL_ENERGY_BUFFER, oEnt ) ) + { + iR = 3; + if ( oEnt == oC ) + { + iR = 4; + } + iR = Random( iR ) + 1; + if ( GetHasSpell( SPELL_ENDURE_ELEMENTS, oC ) && iR == 1 ) + { + return SPELL_ENDURE_ELEMENTS; + } + if ( GetHasSpell( SPELL_RESIST_ELEMENTS, oC ) && iR == 2 ) + { + return SPELL_RESIST_ELEMENTS; + } + if ( GetHasSpell( SPELL_PROTECTION_FROM_ELEMENTS, oC ) && iR == 3 ) + { + return SPELL_PROTECTION_FROM_ELEMENTS; + } + if ( GetHasSpell( SPELL_ENERGY_BUFFER, oC ) && iR == 4 ) + { + return SPELL_ENERGY_BUFFER; + } + } + if (!GetHasSpellEffect( SPELL_LESSER_MIND_BLANK, oEnt ) && + !GetHasSpellEffect( SPELL_MIND_BLANK, oEnt ) ) + { + if ( GetHasSpell( SPELL_LESSER_MIND_BLANK, oC ) ) + { + return SPELL_LESSER_MIND_BLANK; + } + } + return FALSE; +} + +int GetBestPhysDefenseSelf( object oEnt=OBJECT_SELF ) +{ + //function not finished + //Epic warding and epic mage armour do not currently work for non PCs, GetCasterLevel() reports 0 for them + if (//!GetHasSpellEffect( SPELL_EPIC_WARDING, oEnt ) && + !GetHasSpellEffect( SPELL_STONESKIN, oEnt ) && + !GetHasSpellEffect( SPELL_GREATER_STONESKIN, oEnt ) && + !GetHasSpellEffect( SPELL_PREMONITION, oEnt ) ) + { + if ( GetHasSpell( SPELL_EPIC_WARDING, oEnt ) ) + { + return SPELL_EPIC_WARDING; + } + if ( GetHasSpell( SPELL_GREATER_STONESKIN, oEnt ) ) + { + return SPELL_GREATER_STONESKIN; + } + if ( GetHasSpell( SPELL_PREMONITION, oEnt ) ) + { + return SPELL_PREMONITION; + } + if ( GetHasSpell( SPELL_STONESKIN, oEnt ) ) + { + return SPELL_STONESKIN; + } + } + return FALSE; +} + +int GetBestPhysDefenseSingle( object oEnt=OBJECT_SELF, object oC=OBJECT_SELF ) +{ + //function not finished + if (!GetHasSpellEffect( SPELL_STONESKIN, oEnt ) && + !GetHasSpellEffect( SPELL_GREATER_STONESKIN, oEnt ) && + !GetHasSpellEffect( SPELL_PREMONITION, oEnt ) ) + { + if ( GetHasSpell( SPELL_STONESKIN, oC ) ) + { + return SPELL_STONESKIN; + } + } + return FALSE; +} + +int GetBestGenericProtection( object oEnt=OBJECT_SELF ) +{ + //TESTING FOR GATE PROTECTIONS + //Currently not in use because of casting bugs + if ( !GetHasSpellEffect( SPELL_HOLY_AURA, oEnt ) && + !GetHasSpellEffect( SPELL_MAGIC_CIRCLE_AGAINST_EVIL, oEnt ) && + !GetHasSpellEffect( SPELL_PROTECTION_FROM_EVIL, oEnt ) ) + { + if ( GetHasSpell( SPELL_HOLY_AURA, oEnt ) ) + { + return SPELL_HOLY_AURA; + } + if ( GetHasSpell( SPELL_MAGIC_CIRCLE_AGAINST_EVIL, oEnt ) ) + { + return SPELL_MAGIC_CIRCLE_AGAINST_EVIL; + } + if ( GetHasSpell( SPELL_PROTECTION_FROM_EVIL, oEnt ) ) + { + return SPELL_PROTECTION_FROM_EVIL; + } + } + return FALSE; +} + +struct sSpellDefStatus EvaluateSpellDefenses( object oTarget=OBJECT_SELF ) +{ + struct sSpellDefStatus sDef; + + if ( GetHasSpellEffect( SPELL_GREATER_SPELL_MANTLE, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 9; + sDef.iMantle = sDef.iMantle + 9; + } + if ( GetHasSpellEffect( SPELL_SPELL_MANTLE, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 7; + sDef.iMantle = sDef.iMantle + 7; + } + if ( GetHasSpellEffect( SPELL_LESSER_SPELL_MANTLE, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 5; + sDef.iMantle = sDef.iMantle + 5; + } + if ( GetHasSpellEffect( SPELL_ENERGY_BUFFER, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 5; + sDef.iElem = sDef.iElem + 5; + } + if ( GetHasSpellEffect( SPELL_PROTECTION_FROM_ELEMENTS, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 3; + sDef.iElem = sDef.iElem + 3; + } + if ( GetHasSpellEffect( SPELL_RESIST_ELEMENTS, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 2; + sDef.iElem = sDef.iElem + 2; + } + if ( GetHasSpellEffect( SPELL_ENDURE_ELEMENTS, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 1; + sDef.iElem = sDef.iElem + 1; + } + if ( GetHasSpellEffect( SPELL_SHADOW_SHIELD, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 7; + sDef.iDeath = sDef.iDeath + 7; + } + if ( GetHasSpellEffect( SPELL_MIND_BLANK, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 8; + sDef.iMind = sDef.iMind + 8; + } + if ( GetHasSpellEffect( SPELL_LESSER_MIND_BLANK, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 5; + sDef.iMind = sDef.iMind + 5; + } + if ( GetHasSpellEffect( SPELL_CLARITY, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 3; + sDef.iMind = sDef.iMind + 3; + } + if ( GetHasSpellEffect( SPELL_GHOSTLY_VISAGE, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 2; + sDef.iMind = sDef.iBlocker + 2; + } + if ( GetHasSpellEffect( SPELL_ETHEREAL_VISAGE, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 6; + sDef.iMind = sDef.iBlocker + 6; + } + if ( GetHasSpellEffect( SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 4; + sDef.iMind = sDef.iBlocker + 4; + } + if ( GetHasSpellEffect( SPELL_GLOBE_OF_INVULNERABILITY, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 6; + sDef.iMind = sDef.iBlocker + 6; + } + + return sDef; +} + +struct sPhysDefStatus EvaluatePhysicalDefenses( object oTarget=OBJECT_SELF ) +{ + //function not finished + struct sPhysDefStatus sDef; + + if ( GetHasSpellEffect( SPELL_STONESKIN, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 4; + sDef.iDamred = sDef.iDamred + 4; + } + if ( GetHasSpellEffect( SPELL_GREATER_STONESKIN, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 6; + sDef.iDamred = sDef.iDamred + 6; + } + if ( GetHasSpellEffect( SPELL_PREMONITION, oTarget ) ) + { + sDef.iTotal = sDef.iTotal + 8; + sDef.iDamred = sDef.iDamred + 8; + } + + return sDef; +} + +int GetBestHeal( object oEnt=OBJECT_SELF, int iMin=10 ) +{ + int iDamage = 0; + + if ( GetIsObjectValid( oEnt ) ) + { + iDamage = GetMaxHitPoints( oEnt ) - GetCurrentHitPoints( oEnt ); + if ( iDamage < iMin ) + { + return 0; + } + if ( iDamage >= 60 && GetHasSpell( SPELL_HEAL ) ) + { + return SPELL_HEAL; + } + if ( iDamage >= 40 ) + { + if ( GetHasSpell( SPELL_CURE_CRITICAL_WOUNDS ) ) + { + return SPELL_CURE_CRITICAL_WOUNDS; + } + if ( GetHasFeat( FEAT_LAY_ON_HANDS ) ) + { + return FEAT_LAY_ON_HANDS; + } + } + if ( iDamage >= 30 && GetHasSpell( SPELL_CURE_SERIOUS_WOUNDS ) ) + { + return SPELL_CURE_SERIOUS_WOUNDS; + } + if ( iDamage >= 20 && GetHasSpell( SPELL_CURE_MODERATE_WOUNDS ) ) + { + return SPELL_CURE_MODERATE_WOUNDS; + } + if ( iDamage >= 10 && GetHasSpell( SPELL_CURE_LIGHT_WOUNDS ) ) + { + return SPELL_CURE_LIGHT_WOUNDS; + } + } + return 0; +} + +int GetGroupHealSpell( int iMinLvl=0, object oCaster=OBJECT_SELF ) +{ + int iHeal = 0; + + if ( !iHeal || iMinLvl >= 5 ) + { + if ( GetHasSpell( SPELL_HEALING_CIRCLE, oCaster ) ) + { + return SPELL_HEALING_CIRCLE; + } + } + if ( !iHeal || iMinLvl >= 8 ) + { + if ( GetHasSpell( SPELL_MASS_HEAL, oCaster ) ) + { + return SPELL_MASS_HEAL; + } + } + return FALSE; +} + +int GetGroupHealSpellAmount( int iH=0, object oCaster=OBJECT_SELF ) +{ + int iHeal = 0; + + if ( iH == SPELL_HEALING_CIRCLE ) + { + iHeal = 20; + } + else if ( iH == SPELL_MASS_HEAL ) + { + iHeal = 60; + } + return iHeal; +} + +float GetGroupHealSpellRadius( int iH=0 ) +{ + float fRad = 0.0; + + if ( iH == SPELL_HEALING_CIRCLE ) + { + fRad = RADIUS_SIZE_MEDIUM; + } + else if ( iH == SPELL_MASS_HEAL ) + { + fRad = RADIUS_SIZE_LARGE; + } + return fRad; +} + +int GetBestRaise( int iCombat=FALSE ) +{ + //full resurrection is preference in combat situation + if ( iCombat ) + { + if ( GetHasSpell( SPELL_RESURRECTION ) ) + { + return SPELL_RESURRECTION; + } + if ( GetHasSpell( SPELL_RAISE_DEAD ) ) + { + return SPELL_RAISE_DEAD; + } + } + else + { + if ( GetHasSpell( SPELL_RAISE_DEAD ) ) + { + return SPELL_RAISE_DEAD; + } + if ( GetHasSpell( SPELL_RESURRECTION ) ) + { + return SPELL_RESURRECTION; + } + } + return 0; +} + +int GetHasHealingAbility( object oCaster=OBJECT_SELF ) +{ + int iHeal = 0; + + if ( GetHasSpell( SPELL_CURE_MINOR_WOUNDS, oCaster ) ) + { + iHeal += 1; + } + if ( GetHasSpell( SPELL_CURE_LIGHT_WOUNDS, oCaster ) ) + { + iHeal += 2; + } + if ( GetHasSpell( SPELL_CURE_MODERATE_WOUNDS, oCaster ) ) + { + iHeal += 4; + } + if ( GetHasSpell( SPELL_CURE_SERIOUS_WOUNDS, oCaster ) ) + { + iHeal += 8; + } + if ( GetHasFeat( FEAT_LAY_ON_HANDS, oCaster ) ) + { + iHeal += 16; + } + if ( GetHasSpell( SPELL_CURE_CRITICAL_WOUNDS, oCaster ) ) + { + iHeal += 32; + } + if ( GetHasSpell( SPELL_HEAL, oCaster ) ) + { + iHeal += 64; + } + return iHeal; +} + +int GetHasRaisingAbility( object oCaster=OBJECT_SELF ) +{ + int iHeal = 0; + + if ( GetHasSpell( SPELL_RAISE_DEAD, oCaster ) ) + { + iHeal += 1; + } + if ( GetHasSpell( SPELL_RESURRECTION, oCaster ) ) + { + iHeal += 2; + } + return iHeal; +} + +int GetHasHelpingAbility( object oCaster=OBJECT_SELF ) +{ + int iHelp = 0; + + if ( !GetIsObjectValid( oCaster ) ) + { + return 0; + } + + if ( GetHasSpell( SPELL_REMOVE_FEAR, oCaster ) ) + { + iHelp += 1; + } + if ( GetHasSpell( SPELL_LESSER_RESTORATION, oCaster ) ) + { + iHelp += 2; + } + if ( GetHasSpell( SPELL_REMOVE_PARALYSIS, oCaster ) ) + { + iHelp += 4; + } + if ( GetHasSpell( SPELL_CLARITY, oCaster ) ) + { + iHelp += 8; + } + if ( GetHasSpell( SPELL_REMOVE_BLINDNESS_AND_DEAFNESS, oCaster ) ) + { + iHelp += 16; + } + if ( GetHasSpell( SPELL_REMOVE_CURSE, oCaster ) ) + { + iHelp += 32; + } + if ( GetHasSpell( SPELL_REMOVE_DISEASE, oCaster ) ) + { + iHelp += 64; + } + if ( GetHasSpell( SPELL_FREEDOM_OF_MOVEMENT, oCaster ) ) + { + iHelp += 128; + } + if ( GetHasSpell( SPELL_NEUTRALIZE_POISON, oCaster ) ) + { + iHelp += 256; + } + if ( GetHasSpell( SPELL_LESSER_MIND_BLANK, oCaster ) ) + { + iHelp += 512; + } + if ( GetHasSpell( SPELL_RESTORATION, oCaster ) ) + { + iHelp += 1024; + } + if ( GetHasSpell( SPELL_GREATER_RESTORATION, oCaster ) ) + { + iHelp += 2048; + } + return iHelp; +} + +int GetBestHelp( object oEnt, object oCaster=OBJECT_SELF ) +{ + int iEff = GetEffectsOnObject( oEnt ); + + //PrintString( "GBH: " + GetName( oCaster ) + " -> " + GetName( oEnt ) + "(" + IntToString( iEff ) + ")" ); + //check effects for spell selection in priority + if ( iEff & NO_EFFECT_PARALYZE ) //PARALYZE + { + if ( GetHasSpell( SPELL_REMOVE_PARALYSIS ) ) + { + return SPELL_REMOVE_PARALYSIS; + } + if ( GetHasSpell( SPELL_FREEDOM_OF_MOVEMENT ) ) + { + return SPELL_FREEDOM_OF_MOVEMENT; + } + } + if ( iEff & NO_EFFECT_PETRIFY ) //PETRIFY + { + if ( GetHasSpell( SPELL_STONE_TO_FLESH ) ) + { + return SPELL_STONE_TO_FLESH; + } + } + if ( iEff & NO_EFFECT_STUNNED ) //STUNNED + { + if ( GetHasSpell( SPELL_CLARITY ) ) + { + return SPELL_CLARITY; + } + } + if ( iEff & NO_EFFECT_SLEEP ) //SLEEP + { + if ( GetHasSpell( SPELL_CLARITY ) ) + { + return SPELL_CLARITY; + } + } + if ( iEff & NO_EFFECT_CHARMED ) //CHARMED + { + if ( GetHasSpell( SPELL_CLARITY ) ) + { + return SPELL_CLARITY; + } + } + if ( iEff & NO_EFFECT_CONFUSED ) //CONFUSED + { + if ( GetHasSpell( SPELL_CLARITY ) ) + { + return SPELL_CLARITY; + } + } + if ( iEff & NO_EFFECT_FRIGHTENED ) //FRIGHTENED + { + if ( GetHasSpell( SPELL_REMOVE_FEAR ) ) + { + return SPELL_REMOVE_FEAR; + } + } + if ( iEff & NO_EFFECT_NEGATIVELEVEL ) //NEGATIVELEVEL + { + if ( GetHasSpell( SPELL_RESTORATION ) ) + { + return SPELL_RESTORATION; + } + if ( GetHasSpell( SPELL_GREATER_RESTORATION ) ) + { + return SPELL_GREATER_RESTORATION; + } + } + if ( iEff & NO_EFFECT_BLINDNESS ) //BLINDNESS + { + if ( GetHasSpell( SPELL_REMOVE_BLINDNESS_AND_DEAFNESS ) ) + { + return SPELL_REMOVE_BLINDNESS_AND_DEAFNESS; + } + if ( GetHasSpell( SPELL_RESTORATION ) ) + { + return SPELL_RESTORATION; + } + } + if ( iEff & NO_EFFECT_DEAF ) //DEAFNESS + { + if ( GetHasSpell( SPELL_REMOVE_BLINDNESS_AND_DEAFNESS ) ) + { + return SPELL_REMOVE_BLINDNESS_AND_DEAFNESS; + } + } + if ( iEff & NO_EFFECT_POISON ) //POISON + { + if ( GetHasSpell( SPELL_NEUTRALIZE_POISON ) ) + { + return SPELL_NEUTRALIZE_POISON; + } + } + if ( iEff & NO_EFFECT_CURSE ) //CURSE + { + if ( GetHasSpell( SPELL_REMOVE_CURSE ) ) + { + return SPELL_REMOVE_CURSE; + } + } + if ( iEff & NO_EFFECT_DISEASE ) //DISEASE + { + if ( GetHasSpell( SPELL_REMOVE_DISEASE ) ) + { + return SPELL_REMOVE_DISEASE; + } + } + if ( iEff & NO_EFFECT_GENERIC ) //ABILITY,AC,ATTACK,DAMAGE,SR,SAVE + { + if ( GetHasSpell( SPELL_LESSER_RESTORATION ) ) + { + return SPELL_LESSER_RESTORATION; + } + if ( GetHasSpell( SPELL_RESTORATION ) ) + { + return SPELL_RESTORATION; + } + } + return 0; +} + +int GetAreaSpell( vector vS, int iDisc=FALSE, int iMinLvl=0, float fR=40.0, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell; + //float fS = 8.5 + 1.0; + //float fM = 20.0 + 1.0; + //float fL = 40.0 + 1.0; + //testing some new ranges + float fS = 20.0; + float fM = 35.0; + float fL = 50.0; + int iM = GetAbilityModifier( ABILITY_INTELLIGENCE, oCaster ); + iM = iM < GetAbilityModifier( ABILITY_WISDOM, oCaster ) ? GetAbilityModifier( ABILITY_WISDOM, oCaster ) : iM; + iM = iM < GetAbilityModifier( ABILITY_CHARISMA, oCaster ) ? GetAbilityModifier( ABILITY_CHARISMA, oCaster ) : iM; + int iDC = 10 + 9 + iM; + int iF = FloatToInt( vS.x ); + int iR = FloatToInt( vS.y ); + int iW = FloatToInt( vS.z ); + + //EPIC SPELLS + + if ( !iCnt ) + { + if ( !iDisc && GetHasSpell( SPELL_EPIC_HELLBALL, oCaster ) && fR < fM ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EPIC_HELLBALL ); + } + } + //9TH LEVEL CLR + //if ( !iCnt || iMinLvl <=9 ) + if ( !iCnt ) + { + if ( !iDisc && GetHasSpell( SPELL_IMPLOSION, oCaster ) && fR < fS && iF < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_IMPLOSION ); + } + if ( !iDisc && GetHasSpell( SPELL_STORM_OF_VENGEANCE, oCaster ) && fR < fS && iR < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_STORM_OF_VENGEANCE ); + } + //9TH LEVEL DRD + //9TH LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_METEOR_SWARM, oCaster ) && fR < fS ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_METEOR_SWARM ); + } + if ( !iDisc && GetHasSpell( SPELL_POWER_WORD_KILL, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_POWER_WORD_KILL ); + } + if ( GetHasSpell( SPELL_WAIL_OF_THE_BANSHEE, oCaster ) && fR < fS && iF < iDC) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WAIL_OF_THE_BANSHEE ); + } + if ( GetHasSpell( SPELL_WEIRD, oCaster ) && fR < fS && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WEIRD ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=8 ) + if ( !iCnt || iMinLvl < NO_LVL8_MIN_LVL ) + { + //8TH LEVEL CLR + if ( !iDisc && GetHasSpell( SPELL_EARTHQUAKE, oCaster ) && fR < fS ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EARTHQUAKE ); + } + if ( !iDisc && GetHasSpell( SPELL_FIRE_STORM, oCaster ) && fR < fS ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FIRE_STORM ); + } + if ( !iDisc && GetHasSpell( SPELL_SUNBEAM, oCaster ) && fR < fM ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUNBEAM ); + } + //8TH LEVEL DRD + if ( !iDisc && GetHasSpell( SPELL_BOMBARDMENT, oCaster ) && fR < fL ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BOMBARDMENT ); + } + if ( !iDisc && GetHasSpell( SPELL_SUNBURST, oCaster ) && fR < fM ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUNBURST ); + } + //8TH LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_HORRID_WILTING, oCaster ) && fR < fM ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HORRID_WILTING ); + } + if ( !iDisc && GetHasSpell( SPELL_INCENDIARY_CLOUD, oCaster ) && fR < fL ) //no save check for half-damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INCENDIARY_CLOUD ); + } + if ( GetHasSpell( SPELL_MASS_BLINDNESS_AND_DEAFNESS, oCaster ) && fR < fM && iF < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MASS_BLINDNESS_AND_DEAFNESS ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=7 ) + if ( !iCnt || iMinLvl < NO_LVL7_MIN_LVL ) + { + //7TH LEVEL CLR + if ( GetHasSpell( SPELL_WORD_OF_FAITH, oCaster ) && fR < fM ) //spell is still useful for blindness, no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WORD_OF_FAITH ); + } + //7TH LEVEL DRD + if ( !iDisc && GetHasSpell( SPELL_CREEPING_DOOM, oCaster ) && fR < fM ) //no save against this spell? + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CREEPING_DOOM ); + } + //7TH LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_DELAYED_BLAST_FIREBALL, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DELAYED_BLAST_FIREBALL ); + } + if ( !iDisc && GetHasSpell( SPELL_GREAT_THUNDERCLAP, oCaster ) && fR < fM && ( iF < iDC || iR < iDC || iW < iDC ) ) //FIX: check this range + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREAT_THUNDERCLAP ); + } + if ( GetHasSpell( SPELL_PRISMATIC_SPRAY, oCaster ) && fR < fS ) //random and various saves, don't check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PRISMATIC_SPRAY ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=6 ) + if ( !iCnt || iMinLvl < NO_LVL6_MIN_LVL ) + { + //6TH LEVEL CLR + if ( !iDisc && GetHasSpell( SPELL_BLADE_BARRIER, oCaster ) && fR < fM ) //no save check, half damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BLADE_BARRIER ); + } + //6TH LEVEL DRD + if ( GetHasSpell( SPELL_STONEHOLD, oCaster ) && fR < fM ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_STONEHOLD ); + } + //6TH LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_ACID_FOG, oCaster ) && fR < fL ) //no save vs the damage + { + //NOTE: SPELL_ACID_FOG == 0 + //SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ACID_FOG ); + //using temporary value for acid fog inside this function + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), -69 ); + + } + if ( GetHasSpell( SPELL_CHAIN_LIGHTNING, oCaster ) && fR < fL ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CHAIN_LIGHTNING ); + } + if ( !iDisc && GetHasSpell( SPELL_CIRCLE_OF_DEATH, oCaster ) && fR < fM && iF < iDC && + ( !DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) || iMinLvl < 10 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CIRCLE_OF_DEATH ); + } + if ( GetHasSpell( SPELL_ISAACS_GREATER_MISSILE_STORM, oCaster ) && fR < fL ) //no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ISAACS_GREATER_MISSILE_STORM ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=5 ) + if ( !iCnt || iMinLvl < NO_LVL5_MIN_LVL ) + { + //5TH LEVEL CLR + if ( !iDisc && GetHasSpell( SPELL_FLAME_STRIKE, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FLAME_STRIKE ); + } + //5TH LEVEL DRD + if ( !iDisc && GetHasSpell( SPELL_ICE_STORM, oCaster ) && fR < fL ) //no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ICE_STORM ); + } + if ( !iDisc && GetHasSpell( SPELL_WALL_OF_FIRE, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WALL_OF_FIRE ); + } + //5TH LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_CLOUDKILL, oCaster ) && fR < fL ) //saves vs death only, try it regardless + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CLOUDKILL ); + } + if ( GetHasSpell( SPELL_CONE_OF_COLD, oCaster ) && fR < fS ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CONE_OF_COLD ); + } + if ( GetHasSpell( SPELL_FIREBRAND, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FIREBRAND ); + } + if ( GetHasSpell( SPELL_MIND_FOG, oCaster ) && fR < fM && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MIND_FOG ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <4 ) + if ( !iCnt || iMinLvl <= NO_LVL4_MIN_LVL ) + { + //4TH LEVEL CLR + if ( GetHasSpell( SPELL_HAMMER_OF_THE_GODS, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HAMMER_OF_THE_GODS ); + } + //4TH LEVEL DRD + //4TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_CONFUSION, oCaster ) && fR < fM && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CONFUSION ); + } + if ( GetHasSpell( SPELL_EVARDS_BLACK_TENTACLES, oCaster ) && fR < fM ) //don't bother checking save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EVARDS_BLACK_TENTACLES ); + } + if ( GetHasSpell( SPELL_FEAR, oCaster ) && fR < fM && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FEAR ); + } + if ( GetHasSpell( SPELL_ISAACS_LESSER_MISSILE_STORM, oCaster ) && fR < fL ) //no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ISAACS_LESSER_MISSILE_STORM ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=3 ) + if ( !iCnt || iMinLvl < NO_LVL3_MIN_LVL ) + { + //3RD LEVEL CLR + //3RD LEVEL DRD + if ( GetHasSpell( SPELL_CALL_LIGHTNING, oCaster ) && fR < fL ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CALL_LIGHTNING ); + } + if ( GetHasSpell( SPELL_SPIKE_GROWTH, oCaster ) && fR < fL ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SPIKE_GROWTH ); + } + //3RD LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_FIREBALL, oCaster ) && fR < fL ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FIREBALL ); + } + if ( !iDisc && GetHasSpell( SPELL_GUST_OF_WIND, oCaster ) && fR < fM && iF < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GUST_OF_WIND ); + } + if ( !iDisc && GetHasSpell( SPELL_LIGHTNING_BOLT, oCaster ) && fR < fM ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_LIGHTNING_BOLT ); + } + if ( !iDisc && GetHasSpell( SPELL_MESTILS_ACID_BREATH, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MESTILS_ACID_BREATH ); + } + if ( !iDisc && GetHasSpell( SPELL_NEGATIVE_ENERGY_BURST, oCaster ) && fR < fM ) //no save check, half damage potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_NEGATIVE_ENERGY_BURST ); + } + if ( GetHasSpell( SPELL_SCINTILLATING_SPHERE, oCaster ) && fR < fM ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SCINTILLATING_SPHERE ); + } + if ( GetHasSpell( SPELL_SLOW, oCaster ) && fR < fS && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SLOW ); + } + if ( !iDisc && GetHasSpell( SPELL_STINKING_CLOUD, oCaster ) && fR < fM && iF < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_STINKING_CLOUD ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=2 ) + if ( !iCnt || iMinLvl < NO_LVL2_MIN_LVL ) + { + //2ND LEVEL CLR + if ( GetHasSpell( SPELL_DARKNESS, oCaster ) && fR < fL && //no save check + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && !( GetHasSpellEffect( SPELL_TRUE_SEEING, oCaster ) || GetHasSpellEffect( SPELL_DARKVISION, oCaster ) ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DARKNESS ); + } + if ( !iDisc && GetHasSpell( SPELL_SOUND_BURST, oCaster ) && fR < fL ) //no save check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SOUND_BURST ); + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + if ( !iDisc && GetHasSpell( SPELL_CLOUD_OF_BEWILDERMENT, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CLOUD_OF_BEWILDERMENT ); + } + if ( !iDisc && GetHasSpell( SPELL_GEDLEES_ELECTRIC_LOOP, oCaster ) && fR < fS ) //no save check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GEDLEES_ELECTRIC_LOOP ); + } + if ( !iDisc && GetHasSpell( SPELL_WEB, oCaster ) && fR < fM ) //no save check, slow effect applies regardless + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WEB ); + } + if ( !iDisc && GetHasSpell( SPELL_BALAGARNSIRONHORN, oCaster ) && fR < fS ) //no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BALAGARNSIRONHORN ); + } + } + iDC--; //take DC down one level + //if ( !iCnt || iMinLvl <=1 ) + if ( !iCnt || iMinLvl < NO_LVL1_MIN_LVL ) + { + //1ST LEVEL CLR + if ( GetHasSpell( SPELL_BANE, oCaster ) && fR < fL && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BANE ); + } + //1ST LEVEL DRD + if ( GetHasSpell( SPELL_ENTANGLE, oCaster ) && fR < fL && iR < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENTANGLE ); + } + if ( !iDisc && GetHasSpell( SPELL_GREASE, oCaster ) && fR < fL ) //no save + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREASE ); + } + if ( GetHasSpell( SPELL_SLEEP, oCaster ) && fR < fM && iW < iDC && + ( !DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) || iMinLvl < 6 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SLEEP ); + } + //1ST LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_BURNING_HANDS, oCaster ) && fR < fS ) //no save check, half dam potential + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BURNING_HANDS ); + } + if ( GetHasSpell( SPELL_COLOR_SPRAY, oCaster ) && fR < fS && iW < iDC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_COLOR_SPRAY ); + } + } + + //SPELLABILITIES + //if ( GetHasSpell( SPELLABILITY_DRAGON_WING_BUFFET, oCaster ) && fR < fM ) + /* Doesn't work? May need a custom script for this + if ( GetRacialType( oCaster ) == RACIAL_TYPE_DRAGON && fR < fM ) + { + SpeakString( "Wingbuff" ); + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_WING_BUFFET ); + } + */ + + iDC--; //take DC down one level + //still need to add DC check in here, haven't decided on it + if ( !iCnt ) + { + //save DCs are pretty low, only use if we have no spells + //Cone spellabilities + if ( GetHasSpell( SPELLABILITY_CONE_ACID, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_ACID ); + } + if ( GetHasSpell( SPELLABILITY_CONE_COLD, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_COLD ); + } + if ( GetHasSpell( SPELLABILITY_CONE_DISEASE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_DISEASE ); + } + if ( GetHasSpell( SPELLABILITY_CONE_FIRE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_FIRE ); + } + if ( GetHasSpell( SPELLABILITY_CONE_LIGHTNING, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_LIGHTNING ); + } + if ( GetHasSpell( SPELLABILITY_CONE_POISON, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_POISON ); + } + if ( GetHasSpell( SPELLABILITY_CONE_SONIC, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CONE_SONIC ); + } + //Howl spellabilities + if ( GetHasSpell( SPELLABILITY_HOWL_CONFUSE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_CONFUSE ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_DAZE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_DAZE ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_DEATH, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_DEATH ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_DOOM, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_DOOM ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_FEAR, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_PARALYSIS, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_PARALYSIS ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_SONIC, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_SONIC ); + } + if ( GetHasSpell( SPELLABILITY_HOWL_STUN, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HOWL_STUN ); + } + //Pulse spellabilities + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_CHARISMA, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_CHARISMA ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_CONSTITUTION, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_CONSTITUTION ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_DEXTERITY, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_DEXTERITY ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_INTELLIGENCE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_INTELLIGENCE ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_STRENGTH, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_STRENGTH ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_ABILITY_DRAIN_WISDOM, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_ABILITY_DRAIN_WISDOM ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_COLD, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_COLD ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_DEATH, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_DEATH ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_DISEASE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_DISEASE ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_DROWN, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_DROWN ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_FIRE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_FIRE ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_HOLY, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_HOLY ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_LEVEL_DRAIN, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_LEVEL_DRAIN ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_LIGHTNING, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_LIGHTNING ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_NEGATIVE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_NEGATIVE ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_POISON, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_POISON ); + } + if ( GetHasSpell( SPELLABILITY_PULSE_SPORES, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_SPORES ); + } + /* + if ( GetHasSpell( SPELLABILITY_PULSE_WHIRLWIND, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PULSE_WHIRLWIND ); + } + */ + //MISCELLANEOUS SPELLABILITIES + if ( GetHasSpell( SPELLABILITY_KRENSHAR_SCARE, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_KRENSHAR_SCARE ); + } + if ( GetHasSpell( SPELLABILITY_GOLEM_BREATH_GAS, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GOLEM_BREATH_GAS ); + } + if ( GetHasSpell( SPELLABILITY_HELL_HOUND_FIREBREATH, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_HELL_HOUND_FIREBREATH ); + } + if ( GetHasSpell( SPELLABILITY_BREATH_PETRIFY, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BREATH_PETRIFY ); + } + if ( GetHasSpell( SPELLABILITY_MINDBLAST, oCaster ) && fR < fS ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_MINDBLAST ); + } + } + + //return a random spell + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + if ( iSpell == 0 ) //no spell + { + iSpell = -1; + } + else if ( iSpell == -69 ) //temp value for acid fog in this function + { + iSpell = 0; + } + //clear out the local ints + while ( iCnt ) + { + //PrintString( "AREACLR: " + GetName( oCaster ) + " (" + IntToString( GetLocalInt( oCaster, "#SPL_" + IntToString( iCnt ) ) ) + ")" ); + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +float GetAreaSpellRadius( int iSpell ) +{ + if ( IsDragonBreath( iSpell ) ) + { + return RADIUS_SIZE_LARGE; + } + if ( IsPulse( iSpell ) ) + { + return RADIUS_SIZE_LARGE; + } + if ( IsHowl( iSpell ) ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( IsCone( iSpell ) ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELLABILITY_DRAGON_WING_BUFFET ) + { + return RADIUS_SIZE_GARGANTUAN; + } + if ( iSpell == SPELLABILITY_KRENSHAR_SCARE ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELLABILITY_GOLEM_BREATH_GAS ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELLABILITY_HELL_HOUND_FIREBREATH ) + { + return RADIUS_SIZE_MEDIUM; + } + //EPIC + if ( iSpell == SPELL_EPIC_HELLBALL ) + { + return 20.0; //largest radius constant is 10.0, have to specify explicit value + } + //9TH LEVEL CLR + if ( iSpell == SPELL_IMPLOSION ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_STORM_OF_VENGEANCE ) + { + return RADIUS_SIZE_COLOSSAL; + } + //9TH LEVEL DRD + //9TH LEVEL SOR/WIZ + if ( iSpell == SPELL_METEOR_SWARM ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_POWER_WORD_KILL ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_WAIL_OF_THE_BANSHEE ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_WEIRD ) + { + return RADIUS_SIZE_COLOSSAL; + } + //8TH LEVEL CLR + if ( iSpell == SPELL_EARTHQUAKE ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_FIRE_STORM ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_SUNBURST ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_SUNBEAM ) + { + return RADIUS_SIZE_COLOSSAL; + } + //8TH LEVEL DRD + if ( iSpell == SPELL_BOMBARDMENT ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_SUNBEAM ) + { + return RADIUS_SIZE_COLOSSAL; + } + //8TH LEVEL SOR/WIZ + if ( iSpell == SPELL_HORRID_WILTING ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_INCENDIARY_CLOUD ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_MASS_BLINDNESS_AND_DEAFNESS ) + { + return RADIUS_SIZE_MEDIUM; + } + //7TH LEVEL CLR + if ( iSpell == SPELL_WORD_OF_FAITH ) + { + return RADIUS_SIZE_COLOSSAL; + } + //7TH LEVEL DRD + if ( iSpell == SPELL_CREEPING_DOOM ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_FIRE_STORM ) + { + return RADIUS_SIZE_COLOSSAL; + } + //7TH LEVEL SOR/WIZ + if ( iSpell == SPELL_DELAYED_BLAST_FIREBALL ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_GREAT_THUNDERCLAP ) + { + return RADIUS_SIZE_GARGANTUAN; + } + if ( iSpell == SPELL_PRISMATIC_SPRAY ) + { + return RADIUS_SIZE_MEDIUM; + } + //6TH LEVEL CLR + if ( iSpell == SPELL_BLADE_BARRIER ) + { + return RADIUS_SIZE_HUGE; + } + //6TH LEVEL DRD + if ( iSpell == SPELL_STONEHOLD ) + { + return RADIUS_SIZE_HUGE; + } + //6TH LEVEL SOR/WIZ + if ( iSpell == SPELL_ACID_FOG ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_CHAIN_LIGHTNING ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_CIRCLE_OF_DEATH ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_ISAACS_GREATER_MISSILE_STORM ) + { + return RADIUS_SIZE_GARGANTUAN; + } + //5TH LEVEL CLR + if ( iSpell == SPELL_FLAME_STRIKE ) + { + return RADIUS_SIZE_MEDIUM; + } + //5TH LEVEL DRD + if ( iSpell == SPELL_ICE_STORM ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_WALL_OF_FIRE ) + { + return RADIUS_SIZE_HUGE; + } + //5TH LEVEL SOR/WIZ + if ( iSpell == SPELL_CLOUDKILL ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_CONE_OF_COLD ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_FIREBRAND ) + { + return RADIUS_SIZE_COLOSSAL; + } + //4TH LEVEL CLR + if ( iSpell == SPELL_HAMMER_OF_THE_GODS ) + { + return RADIUS_SIZE_HUGE; + } + //4TH LEVEL DRD + if ( iSpell == SPELL_FLAME_STRIKE ) + { + return RADIUS_SIZE_MEDIUM; + } + //4TH LEVEL SOR/WIZ + if ( iSpell == SPELL_CONFUSION ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_EVARDS_BLACK_TENTACLES ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_FEAR ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_ISAACS_LESSER_MISSILE_STORM ) + { + return RADIUS_SIZE_GARGANTUAN; + } + if ( iSpell == SPELL_ICE_STORM ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_WALL_OF_FIRE ) + { + return RADIUS_SIZE_HUGE; + } + //3RD LEVEL CLR + //3RD LEVEL DRD + if ( iSpell == SPELL_CALL_LIGHTNING ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_SPIKE_GROWTH ) + { + return RADIUS_SIZE_LARGE; + } + //3RD LEVEL SOR/WIZ + if ( iSpell == SPELL_FIREBALL ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_GUST_OF_WIND ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_LIGHTNING_BOLT ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_NEGATIVE_ENERGY_BURST ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_SLOW ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_STINKING_CLOUD ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_SCINTILLATING_SPHERE ) + { + return RADIUS_SIZE_HUGE; + } + //2ND LEVEL CLR + if ( iSpell == SPELL_DARKNESS ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_SOUND_BURST ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_GEDLEES_ELECTRIC_LOOP ) + { + return RADIUS_SIZE_SMALL; + } + if ( iSpell == SPELL_CLOUD_OF_BEWILDERMENT ) + { + return RADIUS_SIZE_HUGE; + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + if ( iSpell == SPELL_DARKNESS ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_WEB ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_BALAGARNSIRONHORN ) + { + return RADIUS_SIZE_COLOSSAL; + } + //1ST LEVEL CLR + if ( iSpell == SPELL_BANE ) + { + return RADIUS_SIZE_COLOSSAL; + } + //1ST LEVEL DRD + if ( iSpell == SPELL_ENTANGLE ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_GREASE ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_SLEEP ) + { + return RADIUS_SIZE_HUGE; + } + //1ST LEVEL SOR/WIZ + if ( iSpell == SPELL_COLOR_SPRAY ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_GREASE ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_SLEEP ) + { + return RADIUS_SIZE_HUGE; + } + return 0.0; +} + +int GetDirectSpell( object oT, int iDisc=FALSE, int iMinLvl=0, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell; + int iEffects = GetEffectsOnObject( oT ); + + //EPIC + if ( GetHasSpell( SPELL_EPIC_RUIN, oCaster ) && GetCurrentHitPoints( oT ) > 120 ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EPIC_RUIN ); + } + + //9TH LEVEL CLR + if ( !iCnt || iMinLvl <=9 ) + { + if ( GetHasSpell( SPELL_ENERGY_DRAIN, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_NEGATIVE_LEVEL ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENERGY_DRAIN ); + } + //9TH LEVEL DRD + //9TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_DOMINATE_MONSTER, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DOMINATE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_DOMINATE_MONSTER, oT ) ) ) //FIX + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DOMINATE_MONSTER ); + } + if ( GetHasSpell( SPELL_POWER_WORD_KILL, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetCurrentHitPoints( oT ) > 100 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_POWER_WORD_KILL ); + } + if ( GetHasSpell( SPELL_BIGBYS_CRUSHING_HAND, oCaster ) && !GetHasSpellEffect( SPELL_BIGBYS_CRUSHING_HAND, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BIGBYS_CRUSHING_HAND ); + } + } + if ( !iCnt || iMinLvl <=8 ) + { + //8TH LEVEL CLR + //8TH LEVEL DRD + if ( GetHasSpell( SPELL_FINGER_OF_DEATH, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FINGER_OF_DEATH ); + } + //8TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_GREATER_PLANAR_BINDING, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && !GetLevelByClass( CLASS_TYPE_OUTSIDER, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREATER_PLANAR_BINDING ); + } + if ( GetHasSpell( SPELL_BIGBYS_CLENCHED_FIST, oCaster ) && !GetHasSpellEffect( SPELL_BIGBYS_CLENCHED_FIST, oT ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BIGBYS_CLENCHED_FIST ); + } + } + if ( !iCnt || iMinLvl <=7 ) + { + //7TH LEVEL CLR + if ( GetHasSpell( SPELL_DESTRUCTION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DESTRUCTION ); + } + //7TH LEVEL DRD + //7TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_BIGBYS_GRASPING_HAND, oCaster ) && !GetHasSpellEffect( SPELL_BIGBYS_GRASPING_HAND, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BIGBYS_GRASPING_HAND ); + } + if ( GetHasSpell( SPELL_POWER_WORD_STUN, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_STUN ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetCurrentHitPoints( oT ) > 150 ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_STUNNED ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_POWER_WORD_STUN ); + } + } + if ( !iCnt || iMinLvl <=6 ) + { + //6TH LEVEL CLR + //6TH LEVEL DRD + if ( GetHasSpell( SPELL_CRUMBLE, oCaster ) && + ( GetRacialType( oT ) == RACIAL_TYPE_CONSTRUCT || GetLevelByClass( CLASS_TYPE_CONSTRUCT, oT ) > 0 ) ) + //this spell is only useful against constructs so no ability check should be made here + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CRUMBLE ); + } + if ( GetHasSpell( SPELL_DROWN, oCaster ) ) //need to add check for non-affected types + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DROWN ); + } + //6TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_BIGBYS_FORCEFUL_HAND, oCaster ) && !GetHasSpellEffect( SPELL_BIGBYS_FORCEFUL_HAND, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_KNOCKDOWN ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DAZED ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BIGBYS_FORCEFUL_HAND ); + } + if ( GetHasSpell( SPELL_FLESH_TO_STONE, oCaster ) && !GetHasSpellEffect( SPELL_FLESH_TO_STONE, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && IsImmuneToPetrification( oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FLESH_TO_STONE ); + } + if ( GetHasSpell( SPELL_PLANAR_BINDING, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && !GetLevelByClass( CLASS_TYPE_OUTSIDER, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PLANAR_BINDING ); + } + /* Spell/Talent Bug Problem + if ( GetHasSpell( SPELL_SHADES_FIREBALL, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHADES_FIREBALL ); + } + */ + } + if ( !iCnt || iMinLvl <=5 ) + { + //5TH LEVEL CLR + if ( GetHasSpell( SPELL_SLAY_LIVING, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SLAY_LIVING ); + } + //5TH LEVEL DRD + if ( GetHasSpell( SPELL_INFERNO, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFERNO ); + } + //5TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_BALL_LIGHTNING, oCaster ) ) //FIX: ANY ADDITIONAL CHECKS NEEDED HERE? + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BALL_LIGHTNING ); + } + if ( GetHasSpell( SPELL_BIGBYS_INTERPOSING_HAND, oCaster ) && !GetHasSpellEffect( SPELL_BIGBYS_INTERPOSING_HAND, oT ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BIGBYS_INTERPOSING_HAND ); + } + if ( GetHasSpell( SPELL_DOMINATE_PERSON, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DOMINATE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_DOMINATED ) ) //FIX: TAG WITH CHARMED + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DOMINATE_PERSON ); + } + if ( GetHasSpell( SPELL_FEEBLEMIND, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && !GetLevelByClass( CLASS_TYPE_WIZARD, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FEEBLEMIND ); + } + /* Spell/Talent Bug + if ( GetHasSpell( SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW ); + + } + */ + if ( GetHasSpell( SPELL_HOLD_MONSTER, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) //paralysis check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HOLD_MONSTER ); + } + if ( GetHasSpell( SPELL_LESSER_PLANAR_BINDING, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && !GetLevelByClass( CLASS_TYPE_OUTSIDER, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_LESSER_PLANAR_BINDING ); + } + } + if ( !iCnt || iMinLvl <=4 ) + { + //4TH LEVEL CLR + //4TH LEVEL DRD + //4TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_CHARM_MONSTER, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_CHARMED ) ) //FIX: TAG WITH DOMINATED + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CHARM_MONSTER ); + } + if ( GetHasSpell( SPELL_ENERVATION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_NEGATIVE_LEVEL ) ) ) + { + //return SPELL_ENERVATION; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENERVATION ); + } + /* Spell/Talent Bug + if ( GetHasSpell( SPELL_SHADOW_CONJURATION_MAGIC_MISSILE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHADOW_CONJURATION_MAGIC_MISSILE ); + } + */ + if ( GetHasSpell( SPELL_PHANTASMAL_KILLER, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PHANTASMAL_KILLER ); + } + } + if ( !iCnt || iMinLvl <=3 ) + { + /* These spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_CONTAGION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DISEASE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_CONTAGION, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_BG_CONTAGION, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_CONTAGION ); + } + */ + //3RD LEVEL CLR + if ( GetHasSpell( SPELL_BLINDNESS_AND_DEAFNESS, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_BLINDNESS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_BLINDNESS ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BLINDNESS_AND_DEAFNESS ); + } + if ( GetHasSpell( SPELL_CONTAGION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DISEASE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_CONTAGION, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_BG_CONTAGION, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CONTAGION ); + } + if ( GetHasSpell( SPELL_SEARING_LIGHT, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SEARING_LIGHT ); + } + //3RD LEVEL DRD + if ( GetHasSpell( SPELL_HEALING_STING, oCaster ) && GetMaxHitPoints( oCaster ) - GetCurrentHitPoints( oCaster ) > 7 ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HEALING_STING ); + } + if ( GetHasSpell( SPELL_INFESTATION_OF_MAGGOTS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFESTATION_OF_MAGGOTS ); + } + if ( GetHasSpell( SPELL_QUILLFIRE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_QUILLFIRE ); + } + //3RD LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_FLAME_ARROW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FLAME_ARROW ); + } + if ( GetHasSpell( SPELL_HOLD_PERSON, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) //paralysis check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HOLD_PERSON ); + } + } + if ( !iCnt || iMinLvl <=2 ) + { + //2ND LEVEL CLR + if ( GetHasSpell( SPELL_NEGATIVE_ENERGY_RAY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_NEGATIVE_ENERGY_RAY ); + } + //2ND LEVEL DRD + if ( GetHasSpell( SPELL_CHARM_PERSON_OR_ANIMAL, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_CHARMED ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CHARM_PERSON_OR_ANIMAL ); + } + if ( GetHasSpell( SPELL_FLAME_LASH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FLAME_LASH ); + } + //2ND LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_COMBUST, oCaster ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) == FALSE || !GetHasSpellEffect( SPELL_COMBUST, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_COMBUST ); + } + if ( GetHasSpell( SPELL_MELFS_ACID_ARROW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MELFS_ACID_ARROW ); + } + if ( GetHasSpell( SPELL_TASHAS_HIDEOUS_LAUGHTER, oCaster ) && !GetHasSpellEffect( SPELL_TASHAS_HIDEOUS_LAUGHTER, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_KNOCKDOWN ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_TASHAS_HIDEOUS_LAUGHTER ); + } + } + if ( !iCnt || iMinLvl <=1 ) + { + //1ST LEVEL CLR + if ( GetHasSpell( SPELL_DOOM, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_DOOM, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DOOM ); + } + if ( GetHasSpell( SPELL_SCARE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_SCARE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SCARE ); + } + //1ST LEVEL DRD + //1ST LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_CHARM_PERSON, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_CHARMED ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CHARM_PERSON ); + } + if ( GetHasSpell( SPELL_HORIZIKAULS_BOOM, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HORIZIKAULS_BOOM ); + } + if ( GetHasSpell( SPELL_MAGIC_MISSILE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MAGIC_MISSILE ); + } + if ( GetHasSpell( SPELL_RAY_OF_ENFEEBLEMENT, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RAY_OF_ENFEEBLEMENT ); + } + } + if ( !iCnt ) + { + //0TH LEVEL CLR + //0TH LEVEL DRD + //0TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_ACID_SPLASH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ACID_SPLASH ); + } + if ( GetHasSpell( SPELL_DAZE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DAZED ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_DAZE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DAZE ); + } + if ( GetHasSpell( SPELL_ELECTRIC_JOLT, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ELECTRIC_JOLT ); + } + if ( GetHasSpell( SPELL_FLARE, oCaster ) && !GetHasSpellEffect( SPELL_FLARE, oT ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ATTACK_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FLARE ); + } + if ( GetHasSpell( SPELL_RAY_OF_FROST, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RAY_OF_FROST ); + } + } + + //SPELLABILITIES + //BOLT ABILITIES + if ( !iCnt ) + { + //save DCs on these are generally low, use them only if we have no spells + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_CHARISMA, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_CHARISMA ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_CONSTITUTION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_CONSTITUTION ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_DEXTERITY, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_DEXTERITY ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_INTELLIGENCE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_INTELLIGENCE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_STRENGTH, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_STRENGTH ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ABILITY_DRAIN_WISDOM, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_ABILITY_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ABILITY_DRAIN_WISDOM ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_ACID, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_ACID ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_CHARM, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_CHARM ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_COLD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_COLD ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_CONFUSE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_CONFUSE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_DAZE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DAZED ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_DAZE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_DAZE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_DEATH, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_DEATH ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_DISEASE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DISEASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_DISEASE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_DOMINATE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DOMINATE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_DOMINATE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_FIRE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_FIRE ); + } + /* + if ( GetHasSpell( SPELLABILITY_BOLT_KNOCKDOWN, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_KNOCKDOWN ); + } + */ + if ( GetHasSpell( SPELLABILITY_BOLT_LEVEL_DRAIN, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_NEGATIVE_LEVEL ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_LEVEL_DRAIN ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_LIGHTNING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_LIGHTNING ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_PARALYZE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_PARALYZE ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_POISON, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_POISON ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_POISON ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_SHARDS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_SHARDS ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_SLOW, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_SLOW ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_STUN, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_STUN ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_STUN ); + } + if ( GetHasSpell( SPELLABILITY_BOLT_WEB, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BOLT_WEB ); + } + //GAZE ABILITIES + if ( GetHasSpell( SPELLABILITY_GAZE_CHARM, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_CHARM, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_CHARM ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_CONFUSION, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_CONFUSION, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_CONFUSION ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_DAZE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_DAZE, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DAZED ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_DAZE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DAZE ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_DEATH, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetHasSpellEffect( SPELLABILITY_GAZE_DEATH, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DEATH ); + } + /* something weird going on here with compilation + if ( GasHasSpell( SPELLABILITY_GAZE_DESTROY_CHAOS, oCaster ) && GetAlignmentLawChaos( oT ) == ALIGNMENT_CHAOTIC ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DESTROY_CHAOS ); + } + if ( GasHasSpell( SPELLABILITY_GAZE_DESTROY_EVIL, oCaster ) && GetAlignmentGoodEvil( oT ) == ALIGNMENT_EVIL ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DESTROY_EVIL ); + } + if ( GasHasSpell( SPELLABILITY_GAZE_DESTROY_GOOD, oCaster ) && GetAlignmentGoodEvil( oT ) == ALIGNMENT_GOOD ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DESTROY_GOOD ); + } + if ( GasHasSpell( SPELLABILITY_GAZE_DESTROY_LAW, oCaster ) && GetAlignmentLawChaos( oT ) == ALIGNMENT_LAWFUL ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DESTROY_CHAOS ); + } + */ + if ( GetHasSpell( SPELLABILITY_GAZE_DOMINATE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_DOMINATE, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_DOMINATE ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DOMINATE ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_DOOM, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetHasSpellEffect( SPELLABILITY_GAZE_DOOM, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_DOOM ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_FEAR, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_FEAR, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELL_SCARE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_PARALYSIS, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_PARALYSIS, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && iEffects & NO_EFFECT_PARALYZE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_PARALYSIS ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_PETRIFY, oCaster ) && + !GetHasSpellEffect( SPELLABILITY_GAZE_PETRIFY, oT ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_PETRIFY ); + } + if ( GetHasSpell( SPELLABILITY_GAZE_STUNNED, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) && GetHasSpellEffect( SPELLABILITY_GAZE_STUNNED, oT ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_STUN ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_GAZE_STUNNED ); + } + //MISCELLANEOUS SPELLABILITIES + if ( GetHasSpell( SPELLABILITY_MEPHIT_SALT_BREATH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_MEPHIT_SALT_BREATH ); + } + if ( GetHasSpell( SPELLABILITY_MEPHIT_STEAM_BREATH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_MEPHIT_STEAM_BREATH ); + } + if ( GetHasSpell( SPELLABILITY_MANTICORE_SPIKES, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_MANTICORE_SPIKES ); + } + if ( GetHasSpell( SPELLABILITY_CHARMMONSTER, oCaster ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) == FALSE || GetHasSpellEffect( SPELLABILITY_GAZE_CHARM, oT ) == FALSE ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_CHARM ) == FALSE ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_MIND_SPELLS ) == FALSE ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_CHARMMONSTER ); + } + } + + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + if ( iSpell == 0 ) + { + iSpell = -1; //consistency with GetAreaSpell + } + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetTouchSpell( object oT, int iMinLvl=0, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell; + int iEffects = GetEffectsOnObject( oT ); + + if ( !iCnt || iMinLvl <= 7 ) + { + if ( GetHasSpell( SPELLABILITY_PM_DEATHLESS_MASTER_TOUCH, oCaster ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_DEATH ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_DEATHLESS_MASTER_TOUCH ); + } + } + if ( !iCnt || iMinLvl <= 6 ) + { + //6TH LEVEL CLR + if ( GetHasSpell( SPELL_HARM, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 60 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HARM ); + } + //6TH LEVEL DRD + //6TH LEVEL SOR/WIZ + } + if ( !iCnt || iMinLvl <=4 ) + { + //4TH LEVEL BLK + /* these spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_INFLICT_CRITICAL_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 40 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_INFLICT_CRITICAL_WOUNDS ); + } + */ + //4TH LEVEL CLR + if ( GetHasSpell( SPELL_INFLICT_CRITICAL_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 40 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFLICT_CRITICAL_WOUNDS ); + } + if ( GetHasSpell( SPELL_POISON, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_POISON ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_POISON ); + } + //4TH LEVEL DRD + //4TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_BESTOW_CURSE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetIsImmune( oT, IMMUNITY_TYPE_CURSED ) ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetHasSpellEffect( SPELL_BESTOW_CURSE, oT ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BESTOW_CURSE ); + } + } + if ( !iCnt || iMinLvl <=3 ) + { + //3RD LEVEL BLK + /* these spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_INFLICT_SERIOUS_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 30 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_INFLICT_SERIOUS_WOUNDS ); + } + */ + //3RD LEVEL CLR + if ( GetHasSpell( SPELL_INFLICT_SERIOUS_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 30 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFLICT_SERIOUS_WOUNDS ); + } + //3RD LEVEL DRD + //PALE MASTER + if ( GetHasSpell( SPELLABILITY_PM_UNDEAD_GRAFT_2, oCaster ) ) //different style of check here, so we can fall back to graft 1 + { + if ( + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) == FALSE ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) == FALSE || iEffects & NO_EFFECT_PARALYZE == FALSE ) ) //paralysis check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_UNDEAD_GRAFT_2 ); + } + } + else if ( GetHasSpell( SPELLABILITY_PM_UNDEAD_GRAFT_1, oCaster ) ) + { + if ( + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oT, IMMUNITY_TYPE_PARALYSIS ) == FALSE ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 5 ) == FALSE || iEffects & NO_EFFECT_PARALYZE == FALSE ) ) //paralysis check + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_UNDEAD_GRAFT_1 ); + } + } + //3RD LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_VAMPIRIC_TOUCH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_VAMPIRIC_TOUCH ); + } + } + if ( !iCnt || iMinLvl <=2 ) + { + //2ND LEVEL CLR + if ( GetHasSpell( SPELL_GHOUL_TOUCH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GHOUL_TOUCH ); + } + if ( GetHasSpell( SPELL_INFLICT_MODERATE_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 20 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFLICT_MODERATE_WOUNDS ); + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + } + if ( !iCnt || iMinLvl <=1 ) + { + //1ST LEVEL CLR + if ( GetHasSpell( SPELL_INFLICT_LIGHT_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && GetCurrentHitPoints( oT ) > 10 ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFLICT_LIGHT_WOUNDS ); + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + } + if ( !iCnt || iMinLvl <=0 ) + { + //0TH LEVEL CLR + if ( GetHasSpell( SPELL_INFLICT_MINOR_WOUNDS, oCaster ) && GetRacialType( oT ) != RACIAL_TYPE_UNDEAD ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INFLICT_MINOR_WOUNDS ); + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + } + + //spellabilities + if ( !iCnt ) + { + if ( GetHasSpell( SPELLABILITY_TOUCH_PETRIFY, oCaster ) && + !GetHasSpellEffect( SPELLABILITY_TOUCH_PETRIFY, oT ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_TOUCH_PETRIFY ); + } + } + + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + if ( iSpell == 0 ) + { + iSpell = -1; //consistency with GetAreaSpell + } + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetSummonSpell( int iMinLvl=1, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell; + + //EPIC + if ( GetHasSpell( SPELL_EPIC_DRAGON_KNIGHT, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EPIC_DRAGON_KNIGHT ); + } + if ( GetHasSpell( SPELL_EPIC_MUMMY_DUST, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EPIC_MUMMY_DUST ); + } + + // Slowdown issues with balors and succubi? + if ( GetHasSpell( SPELLABILITY_SUMMON_TANARRI, oCaster ) ) + { + //return SPELLABILITY_SUMMON_TANARRI; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_SUMMON_TANARRI ); + } + + if ( !iCnt || iMinLvl <=9 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_IX, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_IX ); + } + if ( GetHasSpell( SPELL_GATE, oCaster ) && + !( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) && + !( GetHasSpellEffect( SPELL_PROTECTION_FROM_EVIL, oCaster ) || + GetHasSpellEffect( SPELL_MAGIC_CIRCLE_AGAINST_EVIL, oCaster ) || + GetHasSpellEffect( SPELL_HOLY_AURA, oCaster ) ) ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GATE ); + } + if ( GetHasSpell( SPELL_ELEMENTAL_SWARM, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ELEMENTAL_SWARM ); + } + if ( GetHasSpell( SPELL_BLACK_BLADE_OF_DISASTER, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BLACK_BLADE_OF_DISASTER ); + } + } + if ( !iCnt || iMinLvl <=8 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_VIII, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_VIII; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_VIII ); + } + if ( GetHasSpell( SPELL_CREATE_GREATER_UNDEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CREATE_GREATER_UNDEAD ); + } + if ( GetHasSpell( SPELL_GREATER_PLANAR_BINDING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREATER_PLANAR_BINDING ); + } + } + if ( !iCnt || iMinLvl <=7 ) + { + /* these spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_FIENDISH_SERVANT, oCaster ) ) + { + SpeakString( "Registering FS" ); + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_FIENDISH_SERVANT ); + } + */ + if ( GetHasSpell( SPELL_SUMMON_CREATURE_VII, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_VII; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_VII ); + } + if ( GetHasSpell( SPELL_MORDENKAINENS_SWORD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MORDENKAINENS_SWORD ); + } + if ( GetHasSpell( SPELLABILITY_PM_SUMMON_GREATER_UNDEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_SUMMON_GREATER_UNDEAD ); + } + } + if ( !iCnt || iMinLvl <=6 ) + { + if ( GetHasSpell( SPELL_CREATE_UNDEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CREATE_UNDEAD ); + } + /* these spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_CREATEDEAD, oCaster ) ) + { + SpeakString( "Registering CD" ); + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_CREATEDEAD ); + } + */ + if ( GetHasSpell( SPELL_SUMMON_CREATURE_VI, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_VI; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_VI ); + } + if ( GetHasSpell( SPELL_PLANAR_ALLY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PLANAR_ALLY ); + } + if ( GetHasSpell( SPELL_PLANAR_BINDING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PLANAR_BINDING ); + } + /* Spell/Talent Bug + if ( GetHasSpell( SPELL_SHADES_SUMMON_SHADOW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHADES_SUMMON_SHADOW ); + } + */ + } + if ( !iCnt || iMinLvl <=5 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_V, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_V; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_V ); + } + if ( GetHasSpell( SPELL_ANIMATE_DEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ANIMATE_DEAD ); + } + /* Spell/Talent Bug + if ( GetHasSpell( SPELL_GREATER_SHADOW_CONJURATION_SUMMON_SHADOW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREATER_SHADOW_CONJURATION_SUMMON_SHADOW ); + } + */ + if ( GetHasSpell( SPELL_LESSER_PLANAR_BINDING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_LESSER_PLANAR_BINDING ); + } + if ( GetHasSpell( SPELLABILITY_PM_SUMMON_UNDEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_SUMMON_UNDEAD ); + } + } + if ( !iCnt || iMinLvl <=4 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_IV, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_IV; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_IV ); + } + /* Spell/Talent Bug + if ( GetHasSpell( SPELL_SHADOW_CONJURATION_SUMMON_SHADOW, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHADOW_CONJURATION_SUMMON_SHADOW ); + } + */ + if ( GetHasSpell( SPELLABILITY_PM_ANIMATE_DEAD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_PM_ANIMATE_DEAD ); + } + } + if ( !iCnt || iMinLvl <=3 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_III, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_III; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_III ); + } + } + if ( !iCnt || iMinLvl <=2 ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_II, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_II; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_II ); + } + } + if ( !iCnt ) + { + if ( GetHasSpell( SPELL_SUMMON_CREATURE_I, oCaster ) ) + { + //return SPELL_SUMMON_CREATURE_I; + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SUMMON_CREATURE_I ); + } + if ( GetHasSpell( SPELL_SHELGARNS_PERSISTENT_BLADE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHELGARNS_PERSISTENT_BLADE ); + } + } + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetEnhanceSpellSelf( int iMinLvl=1, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell = 0; + + //EPIC + /* epic warding and epic mage armour do not currently work for non PCs, GetCasterLevel() returns 0 + if ( GetHasSpell( SPELL_EPIC_MAGE_ARMOR, oCaster ) && !GetHasSpellEffect( SPELL_EPIC_MAGE_ARMOR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EPIC_MAGE_ARMOR ); + } + */ + + //SPELLABILITIES + //NOTE: these should be activated by DoFastBuffs() but might need to be recast + if ( GetHasSpell( SPELLABILITY_DRAGON_FEAR, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DRAGON_FEAR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_AURA_BLINDING, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_BLINDING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_BLINDING ); + } + if ( GetHasSpell( SPELLABILITY_AURA_COLD, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_COLD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_COLD ); + } + if ( GetHasSpell( SPELLABILITY_AURA_ELECTRICITY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_ELECTRICITY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_ELECTRICITY ); + } + if ( GetHasSpell( SPELLABILITY_AURA_FEAR, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_FEAR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_AURA_FIRE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_FIRE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_FIRE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_MENACE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_MENACE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_MENACE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_OF_COURAGE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_OF_COURAGE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_OF_COURAGE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_PROTECTION, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_PROTECTION, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_PROTECTION ); + } + if ( GetHasSpell( SPELLABILITY_AURA_STUN, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_STUN, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_STUN ); + } + if ( GetHasSpell( SPELLABILITY_AURA_UNEARTHLY_VISAGE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_UNEARTHLY_VISAGE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_UNEARTHLY_VISAGE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_UNNATURAL, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_UNNATURAL, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_AURA_UNNATURAL ); + } + if ( GetHasSpell( SPELLABILITY_EMPTY_BODY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_EMPTY_BODY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_EMPTY_BODY ); + } + if ( GetHasSpell( SPELLABILITY_TYRANT_FOG_MIST, oCaster ) && !GetHasSpellEffect( SPELLABILITY_TYRANT_FOG_MIST, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_TYRANT_FOG_MIST ); + } + + if ( GetHasSpell( SPELLABILITY_RAGE_5, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_5, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_RAGE_5 ); + } + else if ( GetHasSpell( SPELLABILITY_RAGE_4, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_4, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_RAGE_4 ); + } + else if ( GetHasSpell( SPELLABILITY_RAGE_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_RAGE_3 ); + } + + if ( GetHasSpell( SPELLABILITY_FEROCITY_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_3 ); + } + else if ( GetHasSpell( SPELLABILITY_FEROCITY_2, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_2, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_2 ); + } + else if ( GetHasSpell( SPELLABILITY_FEROCITY_1, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_1, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_1 ); + } + + if ( GetHasSpell( SPELLABILITY_INTENSITY_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_3 ); + } + else if ( GetHasSpell( SPELLABILITY_INTENSITY_2, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_2, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_2 ); + } + else if ( GetHasSpell( SPELLABILITY_INTENSITY_1, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_1, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_1 ); + } + + //SELF-ENHANCING DOMAIN POWERS + if ( GetHasSpell( SPELLABILITY_BATTLE_MASTERY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_BATTLE_MASTERY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BATTLE_MASTERY ); + } + if ( GetHasSpell( SPELLABILITY_DIVINE_PROTECTION, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DIVINE_PROTECTION, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DIVINE_PROTECTION ); + } + if ( GetHasSpell( SPELLABILITY_DIVINE_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DIVINE_STRENGTH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DIVINE_STRENGTH ); + } + + //DIVINE CHAMPION + if ( GetHasSpell( SPELLABILITY_DC_DIVINE_WRATH, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DC_DIVINE_WRATH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DC_DIVINE_WRATH ); + } + + /* NOT DIRECTLY USEFUL IN COMBAT + if ( GetHasSpell( SPELLABILITY_DIVINE_TRICKERY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DIVINE_TRICKERY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_DIVINE_TRICKERY ); + } + */ + + if ( !iCnt || iMinLvl <= 7 ) + { + //7TH LEVEL CLR + if ( GetHasSpell( SPELL_REGENERATE, oCaster ) && !GetHasSpellEffect( SPELL_REGENERATE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_REGENERATE ); + } + //7TH LEVEL DRD + } + if ( !iCnt || iMinLvl <= 6 ) + { + //6TH LEVEL BRD + if ( GetHasSpell( SPELL_DIRGE, oCaster ) && !GetHasSpellEffect( SPELL_DIRGE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DIRGE ); + } + //6TH LEVEL CLR + /* + if ( GetHasSpell( SPELL_GREATER_SANCTUARY, oCaster ) && !GetHasSpellEffect( SPELL_GREATER_SANCTUARY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_GREATER_SANCTUARY ); + } + */ + //6TH LEVEL DRD + } + if ( !iCnt || iMinLvl <= 5 ) + { + //5TH LEVEL CLR + if ( GetHasSpell( SPELL_BATTLETIDE, oCaster ) && !GetHasSpellEffect( SPELL_BATTLETIDE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BATTLETIDE ); + } + if ( GetHasSpell( SPELL_MONSTROUS_REGENERATION, oCaster ) && !GetHasSpellEffect( SPELL_MONSTROUS_REGENERATION, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MONSTROUS_REGENERATION ); + } + //5TH LEVEL DRD + /* Seems to be missing a SPELL_* item? GREATER_OWLS_WISDOM? + if ( GetHasSpell( SPELL_OWLS_INSIGHT, oCaster ) && !GetHasSpellEffect( SPELL_OWLS_INSIGHT, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_OWLS_INSIGHT ); + } + */ + //5TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_MESTILS_ACID_SHEATH, oCaster ) && !GetHasSpellEffect( SPELL_MESTILS_ACID_SHEATH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MESTILS_ACID_SHEATH ); + } + } + if ( !iCnt || iMinLvl <= 4 ) + { + //4TH LEVEL CLR + if ( GetHasSpell( SPELL_DIVINE_POWER, oCaster ) && !GetHasSpellEffect( SPELL_DIVINE_POWER, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DIVINE_POWER ); + } + //4TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_IMPROVED_INVISIBILITY, oCaster ) && !GetHasSpellEffect( SPELL_IMPROVED_INVISIBILITY, oCaster ) && !GetHasSpellEffect( SPELL_INVISIBILITY, oCaster ) && + //make sure there is at least one enemy who does not have true seeing and see invisibility + GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, 1, CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_TRUE_SEEING, CREATURE_TYPE_IS_ALIVE, TRUE ) != OBJECT_INVALID && + GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, 1, CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_SEE_INVISIBILITY, CREATURE_TYPE_IS_ALIVE, TRUE ) != OBJECT_INVALID ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_IMPROVED_INVISIBILITY ); + } + } + if ( !iCnt || iMinLvl <= 3 ) + { + //3RD LEVEL BRD + if ( GetHasSpell( SPELL_WOUNDING_WHISPERS, oCaster ) && !GetHasSpellEffect( SPELL_WOUNDING_WHISPERS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_WOUNDING_WHISPERS ); + } + //3RD LEVEL CLR + //3RD LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_DISPLACEMENT, oCaster ) && !GetHasSpellEffect( SPELL_DISPLACEMENT, oCaster ) && !GetHasSpellEffect( SPELL_IMPROVED_INVISIBILITY, oCaster ) && + //make sure there is at least one enemy who does not have true seeing and see invisibility + GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, 1, CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_TRUE_SEEING, CREATURE_TYPE_IS_ALIVE, TRUE ) != OBJECT_INVALID ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DISPLACEMENT ); + } + if ( GetHasSpell( SPELL_HASTE, oCaster ) && !GetHasSpellEffect( SPELL_HASTE, oCaster ) && !GetHasSpellEffect( SPELL_MASS_HASTE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HASTE ); + } + } + if ( !iCnt || iMinLvl <= 2 ) + { + //2ND LEVEL BLK + /* these spellabilities do not register + if ( GetHasSpell( SPELLABILITY_BG_BULLS_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELL_BULLS_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELLABILITY_BG_BULLS_STRENGTH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELLABILITY_BG_BULLS_STRENGTH ); + } + */ + //2ND LEVEL CLR + if ( GetHasSpell( SPELL_AID, oCaster ) && !GetHasSpellEffect( SPELL_AID, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_AID ); + } + if ( GetHasSpell( SPELL_BULLS_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELL_BULLS_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELLABILITY_BG_BULLS_STRENGTH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BULLS_STRENGTH ); + } + if ( GetHasSpell( SPELL_DEATH_ARMOR, oCaster ) && !GetHasSpellEffect( SPELL_DEATH_ARMOR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DEATH_ARMOR ); + } + if ( GetHasSpell( SPELL_ENDURANCE, oCaster ) && !GetHasSpellEffect( SPELL_ENDURANCE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENDURANCE ); + } + // Note: Currently allow invisibility to be cast on top of improved invisibility + // This is to allow a creature with imp invis that has attacked and so is only retaining the concealment of imp invis + // to become invisible with this spell. It may sometimes result in redundant castings if the creature has imp invis and + // has not attacked. + if ( GetHasSpell( SPELL_INVISIBILITY, oCaster ) && !GetHasSpellEffect( SPELL_INVISIBILITY, oCaster ) && + //make sure there is at least one enemy who does not have true seeing and see invisibility + GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, 1, CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_TRUE_SEEING, CREATURE_TYPE_IS_ALIVE, TRUE ) != OBJECT_INVALID && + GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCaster, 1, CREATURE_TYPE_DOES_NOT_HAVE_SPELL_EFFECT, SPELL_SEE_INVISIBILITY, CREATURE_TYPE_IS_ALIVE, TRUE ) != OBJECT_INVALID ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_INVISIBILITY ); + } + if ( GetHasSpell( SPELL_OWLS_WISDOM, oCaster ) && !GetHasSpellEffect( SPELL_OWLS_WISDOM, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_OWLS_WISDOM ); + } + //2ND LEVEL DRD + if ( GetHasSpell( SPELL_BLOOD_FRENZY, oCaster ) && !GetHasSpellEffect( SPELL_BLOOD_FRENZY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BLOOD_FRENZY ); + } + //2ND LEVEL PAL + if ( GetHasSpell( SPELL_AURAOFGLORY, oCaster ) && !GetHasSpellEffect( SPELL_AURAOFGLORY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_AURAOFGLORY ); + } + //2ND LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_FOXS_CUNNING, oCaster ) && !GetHasSpellEffect( SPELL_FOXS_CUNNING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FOXS_CUNNING ); + } + if ( GetHasSpell( SPELL_STONE_BONES, oCaster ) && GetRacialType( oCaster ) == RACIAL_TYPE_UNDEAD && !GetHasSpellEffect( SPELL_STONE_BONES, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_STONE_BONES ); + } + } + if ( !iCnt || iMinLvl <= 1 ) + { + //1ST LEVEL CLR + if ( GetHasSpell( SPELL_DIVINE_FAVOR, oCaster ) && !GetHasSpellEffect( SPELL_DIVINE_FAVOR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DIVINE_FAVOR ); + } + if ( GetHasSpell( SPELL_ENTROPIC_SHIELD, oCaster ) && !GetHasSpellEffect( SPELL_ENTROPIC_SHIELD, oCaster ) && + GetAttackerCount( 40.0 ) - GetAttackerCount( 5.0 ) > 0 ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENTROPIC_SHIELD ); + } + /* + if ( GetHasSpell( SPELL_SANCTUARY, oCaster ) && !GetHasSpellEffect( SPELL_SANCTUARY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SANCTUARY ); + } + */ + if ( GetHasSpell( SPELL_SHIELD_OF_FAITH, oCaster ) && !GetHasSpellEffect( SPELL_SHIELD_OF_FAITH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHIELD_OF_FAITH ); + } + //1ST LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_EXPEDITIOUS_RETREAT, oCaster ) && !GetHasSpellEffect( SPELL_EXPEDITIOUS_RETREAT, oCaster ) && + !GetHasSpell( SPELL_HASTE, oCaster ) && !GetHasSpellEffect( SPELL_HASTE, oCaster ) && !GetHasSpellEffect( SPELL_MASS_HASTE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_EXPEDITIOUS_RETREAT ); + } + if ( GetHasSpell( SPELL_IRONGUTS, oCaster ) && !GetHasSpellEffect( SPELL_IRONGUTS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_IRONGUTS ); + } + if ( GetHasSpell( SPELL_MAGE_ARMOR, oCaster ) && !GetHasSpellEffect( SPELL_MAGE_ARMOR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MAGE_ARMOR ); + } + //0TH LEVEL CLR + if ( GetHasSpell( SPELL_SHIELD, oCaster ) && !GetHasSpellEffect( SPELL_SHIELD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHIELD ); + } + } + if ( !iCnt ) + { + //0TH LEVEL CLR + /* inactive temporarily + if ( GetHasSpell( SPELL_RESISTANCE, oCaster ) && !GetHasSpellEffect( SPELL_RESISTANCE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RESISTANCE ); + } + */ + //0TH LEVEL DRD + /* DUPLICATE + if ( GetHasSpell( SPELL_RESISTANCE, oCaster ) && !GetHasSpellEffect( SPELL_RESISTANCE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RESISTANCE ); + } + */ + //0TH LEVEL SOR/WIZ + /* DUPLICATE + if ( GetHasSpell( SPELL_RESISTANCE, oCaster ) && !GetHasSpellEffect( SPELL_RESISTANCE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RESISTANCE ); + } + */ + } + + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetEnhanceSpellSingle( int iMinLvl=1, object oEnt=OBJECT_SELF, object oCaster=OBJECT_SELF ) +{ + int iSpell = 0; + int iCnt = 0; + + if ( !iCnt || iMinLvl <= 7 ) + { + //7TH LEVEL CLR + if ( GetHasSpell( SPELL_REGENERATE, oCaster ) && !GetHasSpellEffect( SPELL_REGENERATE, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_REGENERATE ); + } + //7TH LEVEL DRD + } + if ( !iCnt || iMinLvl <= 6 ) + { + //6TH LEVEL DRD + } + if ( !iCnt || iMinLvl <= 5 ) + { + //5TH LEVEL CLR + if ( GetHasSpell( SPELL_MONSTROUS_REGENERATION, oCaster ) && !GetHasSpellEffect( SPELL_MONSTROUS_REGENERATION, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MONSTROUS_REGENERATION ); + } + } + if ( !iCnt || iMinLvl <= 4 ) + { + //4TH LEVEL CLR + /* SELF ONLY? + if ( GetHasSpell( SPELL_DIVINE_POWER, oCaster ) && !GetHasSpellEffect( SPELL_DIVINE_POWER, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DIVINE_POWER ); + } + */ + //4TH LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_IMPROVED_INVISIBILITY, oCaster ) && !GetHasSpellEffect( SPELL_IMPROVED_INVISIBILITY, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_IMPROVED_INVISIBILITY ); + } + } + if ( !iCnt || iMinLvl <= 3 ) + { + //3RD LEVEL CLR + //3RD LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_DISPLACEMENT, oCaster ) && !GetHasSpellEffect( SPELL_DISPLACEMENT, oEnt ) && !GetHasSpellEffect( SPELL_IMPROVED_INVISIBILITY, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_DISPLACEMENT ); + } + if ( GetHasSpell( SPELL_HASTE, oCaster ) && !GetHasSpellEffect( SPELL_HASTE, oEnt ) && !GetHasSpellEffect( SPELL_MASS_HASTE, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_HASTE ); + } + } + if ( !iCnt || iMinLvl <= 2 ) + { + //2ND LEVEL CLR + if ( GetHasSpell( SPELL_AID, oCaster ) && !GetHasSpellEffect( SPELL_AID, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_AID ); + } + if ( GetHasSpell( SPELL_BULLS_STRENGTH, oCaster ) && !GetHasSpellEffect( SPELL_BULLS_STRENGTH, oEnt ) && !GetHasSpellEffect( SPELLABILITY_BG_BULLS_STRENGTH, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BULLS_STRENGTH ); + } + if ( GetHasSpell( SPELL_ENDURANCE, oCaster ) && !GetHasSpellEffect( SPELL_ENDURANCE, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_ENDURANCE ); + } + //2ND LEVEL DRD + //2ND LEVEL SOR/WIZ + /* not a good general buff + if ( GetHasSpell( SPELL_FOXS_CUNNING, oCaster ) && !GetHasSpellEffect( SPELL_FOXS_CUNNING, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_FOXS_CUNNING ); + } + */ + if ( GetHasSpell( SPELL_CATS_GRACE, oCaster ) && !GetHasSpellEffect( SPELL_CATS_GRACE, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CATS_GRACE ); + } + if ( GetHasSpell( SPELL_STONE_BONES, oCaster ) && GetRacialType( oEnt ) == RACIAL_TYPE_UNDEAD && !GetHasSpellEffect( SPELL_STONE_BONES, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_STONE_BONES ); + } + } + if ( !iCnt || iMinLvl <= 1 ) + { + //1ST LEVEL CLR + /* + if ( GetHasSpell( SPELL_SANCTUARY, oCaster ) && !GetHasSpellEffect( SPELL_SANCTUARY, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SANCTUARY ); + } + */ + if ( GetHasSpell( SPELL_IRONGUTS, oCaster ) && !GetHasSpellEffect( SPELL_IRONGUTS, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_IRONGUTS ); + } + if ( GetHasSpell( SPELL_SHIELD_OF_FAITH, oCaster ) && !GetHasSpellEffect( SPELL_SHIELD_OF_FAITH, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_SHIELD_OF_FAITH ); + } + //1ST LEVEL SOR/WIZ + if ( GetHasSpell( SPELL_MAGE_ARMOR, oCaster ) && !GetHasSpellEffect( SPELL_MAGE_ARMOR, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MAGE_ARMOR ); + } + } + if ( !iCnt ) + { + //0TH LEVEL CLR + /* inactive temporarily + if ( GetHasSpell( SPELL_RESISTANCE, oCaster ) && !GetHasSpellEffect( SPELL_RESISTANCE, oEnt ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_RESISTANCE ); + } + */ + //0TH LEVEL DRD + //0TH LEVEL SOR/WIZ + } + + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetBestBreach( int iLim=30, object oEnt=OBJECT_SELF ) +{ + //dispels not returned here + if ( iLim > 12 ) + { + if ( GetHasSpell( SPELL_GREATER_SPELL_BREACH, oEnt ) ) + { + return SPELL_GREATER_SPELL_BREACH; + } + if ( GetHasSpell( SPELL_MORDENKAINENS_DISJUNCTION, oEnt ) ) + { + return SPELL_MORDENKAINENS_DISJUNCTION; + }/* + if ( GetHasSpell( SPELL_GREATER_DISPELLING, oEnt ) ) + { + return SPELL_GREATER_DISPELLING; + } + */ + } + if ( iLim > 7 ) + { + if ( GetHasSpell( SPELL_LESSER_SPELL_BREACH, oEnt ) ) + { + return SPELL_LESSER_SPELL_BREACH; + } + /* + if ( GetHasSpell( SPELL_DISPEL_MAGIC, oEnt ) ) + { + return SPELL_DISPEL_MAGIC; + } + */ + } + /* + if ( iLim > 5 ) + { + if ( GetHasSpell( SPELL_LESSER_DISPEL, oEnt ) ) + { + return SPELL_LESSER_DISPEL; + } + } + */ + return 0; +} + +int GetBestDispel( int iCLvl=20, int iDLvl=20, object oEnt=OBJECT_SELF ) +{ + int iDispel = 0; + int iSpell = 0; + + if ( GetHasSpell( SPELL_LESSER_DISPEL, oEnt ) ) + { + iDispel = 1; + iSpell = SPELL_LESSER_DISPEL; + } + if ( !iDispel || ( iCLvl > 5 && iDLvl > 5 ) ) + { + if ( GetHasSpell( SPELL_DISPEL_MAGIC, oEnt ) ) + { + iDispel = 1; + iSpell = SPELL_DISPEL_MAGIC; + } + } + if ( !iDispel || ( iCLvl > 10 && iDLvl > 10 ) ) + { + if ( GetHasSpell( SPELL_GREATER_DISPELLING, oEnt ) ) + { + iDispel = 1; + iSpell = SPELL_GREATER_DISPELLING; + } + } + + return iSpell; +} + +int GetIsDiscriminantSpell( int iSpell ) +{ + if ( iSpell == SPELL_WAIL_OF_THE_BANSHEE || + iSpell == SPELL_WEIRD || + iSpell == SPELL_WORD_OF_FAITH || + iSpell == SPELL_CHAIN_LIGHTNING || + iSpell == SPELL_ISAACS_GREATER_MISSILE_STORM || + iSpell == SPELL_HAMMER_OF_THE_GODS || + iSpell == SPELL_CONFUSION || + iSpell == SPELL_EVARDS_BLACK_TENTACLES || + iSpell == SPELL_FEAR || + iSpell == SPELL_ISAACS_LESSER_MISSILE_STORM || + iSpell == SPELL_CALL_LIGHTNING || + iSpell == SPELL_SLOW || + iSpell == SPELL_ENTANGLE || + iSpell == SPELL_SLEEP || + iSpell == SPELL_DARKNESS || //testing inclusion of Darkness + iSpell == -69 ) //mind blast + { + return TRUE; + } + return FALSE; +} + +int GetBreathWeapon( object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell = 0; + + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_ACID, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_ACID ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_COLD, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_COLD ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_FEAR, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_FIRE, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_FIRE ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_GAS, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_GAS ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_LIGHTNING, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_LIGHTNING ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_NEGATIVE, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_NEGATIVE ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_PARALYZE, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_PARALYZE ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_SLEEP, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_SLEEP ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_SLOW, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_SLOW ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_WEAKEN, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_WEAKEN ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_RDD, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_RDD ); + } + if ( GetHasSpell( SPELLABILITY_DRAGON_BREATH_PRISMATIC, oEnt ) ) + { + SetLocalInt( oEnt, "#BRT_" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_BREATH_PRISMATIC ); + } + + if ( iCnt ) + { + iSpell = GetLocalInt( oEnt, "#BRT_" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#BRT_" + IntToString( iCnt-- ) ); + } + } + return iSpell; +} + +int GetConeSpell( int iMinLvl = 1, object oCaster=OBJECT_SELF ) +{ + //This function may be obsolete. Currently handling cones as area spells. + int iCnt = 0; + int iSpell; + + if ( !iCnt || iMinLvl <= 7 ) + { + if ( GetHasSpell( SPELL_PRISMATIC_SPRAY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PRISMATIC_SPRAY ); + } + } + if ( !iCnt || iMinLvl <=5 ) + { + if ( GetHasSpell( SPELL_CONE_OF_COLD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_CONE_OF_COLD ); + } + } + if ( !iCnt || iMinLvl <=1 ) + { + if ( GetHasSpell( SPELL_BURNING_HANDS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BURNING_HANDS ); + } + if ( GetHasSpell( SPELL_COLOR_SPRAY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_COLOR_SPRAY ); + } + } + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +int GetGroupEnhanceSpell( int iMinLvl = 1, object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iSpell; + + if ( !iCnt || iMinLvl <= 9 ) + { + if ( GetHasSpell( SPELL_UNDEATHS_ETERNAL_FOE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_UNDEATHS_ETERNAL_FOE ); + } + } + if ( !iCnt || iMinLvl <= 8 ) + { + if ( GetHasSpell( SPELL_MIND_BLANK, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MIND_BLANK ); + } + if ( GetHasSpell( SPELL_NATURES_BALANCE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_NATURES_BALANCE ); + } + } + if ( !iCnt || iMinLvl <= 7 ) + { + if ( GetHasSpell( SPELL_AURA_OF_VITALITY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_AURA_OF_VITALITY ); + } + if ( GetHasSpell( SPELL_PROTECTION_FROM_SPELLS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PROTECTION_FROM_SPELLS ); + } + } + if ( !iCnt || iMinLvl <= 6 ) + { + if ( GetHasSpell( SPELL_MASS_HASTE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_MASS_HASTE ); + } + } + if ( !iCnt || iMinLvl <= 3 ) + { + if ( GetHasSpell( SPELL_PRAYER, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_PRAYER ); + } + } + if ( !iCnt || iMinLvl <= 1 ) + { + if ( GetHasSpell( SPELL_BLESS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_" + IntToString( ++iCnt ), SPELL_BLESS ); + } + } + iSpell = GetLocalInt( oCaster, "#SPL_" + IntToString( Random( iCnt ) + 1 ) ); + + while ( iCnt ) + { + DeleteLocalInt( oCaster, "#SPL_" + IntToString( iCnt-- ) ); + } + return iSpell; +} + +float GetGroupEnhanceSpellRadius( int iSpell ) +{ + if ( iSpell == SPELL_UNDEATHS_ETERNAL_FOE ) + { + return RADIUS_SIZE_MEDIUM; + } + if ( iSpell == SPELL_MIND_BLANK ) + { + return RADIUS_SIZE_HUGE; + } + if ( iSpell == SPELL_NATURES_BALANCE ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_AURA_OF_VITALITY ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_PROTECTION_FROM_SPELLS ) + { + return RADIUS_SIZE_LARGE; //NOT SURE, NEED TO CHECK + } + if ( iSpell == SPELL_MASS_HASTE ) + { + return RADIUS_SIZE_LARGE; + } + if ( iSpell == SPELL_PRAYER ) + { + return RADIUS_SIZE_COLOSSAL; + } + if ( iSpell == SPELL_BLESS ) + { + return RADIUS_SIZE_GARGANTUAN; + } + return 0.0; +} + +int GetDispelSpell( object oEnt=OBJECT_SELF ) +{ + if ( GetHasSpell( SPELL_LESSER_DISPEL, oEnt ) ) + { + return SPELL_LESSER_DISPEL; + } + if ( GetHasSpell( SPELL_DISPEL_MAGIC, oEnt ) ) + { + return SPELL_DISPEL_MAGIC; + } + if ( GetHasSpell ( SPELL_GREATER_DISPELLING, oEnt ) ) + { + return SPELL_GREATER_DISPELLING; + } + if ( GetHasSpell( SPELL_MORDENKAINENS_DISJUNCTION, oEnt ) ) + { + return SPELL_MORDENKAINENS_DISJUNCTION; + } + return 0; +} + +int GetMaxDispelCasterLevel( object oEnt=OBJECT_SELF ) +{ + //NOTE: this function may return some bad results if creatures with innate dispel abilities + //also have levels in standard caster levels, where those levels are lower than their innate ones + //Should be compensated for by GetBestDispel() + int iL = 0; + int iT = 0; + int iC = 0; + + iL = GetLevelByClass( CLASS_TYPE_BARD, oEnt ); + iC += iL; + if ( ( iT = GetLevelByClass( CLASS_TYPE_CLERIC, oEnt ) ) > iL ) + { + iL = iT; + } + iC += iT; + if ( ( iT = GetLevelByClass( CLASS_TYPE_DRUID, oEnt ) ) > iL ) + { + iL = iT; + } + iC += iT; + if ( ( iT = GetLevelByClass( CLASS_TYPE_PALADIN, oEnt ) ) > iL ) + { + iL = iT; + } + iC += iT; + if ( ( iT = GetLevelByClass( CLASS_TYPE_SORCERER, oEnt ) ) > iL ) + { + iL = iT; + } + iC += iT; + if ( ( iT = GetLevelByClass( CLASS_TYPE_WIZARD, oEnt ) ) > iL ) + { + iL = iT; + } + iC += iT; + if ( !iC ) + { + //no standard caster levels, check for innate abilities + if ( GetHasSpell( SPELL_LESSER_DISPEL, oEnt ) || + GetHasSpell( SPELL_DISPEL_MAGIC, oEnt ) || + GetHasSpell( SPELL_GREATER_DISPELLING, oEnt ) || + GetHasSpell( SPELL_MORDENKAINENS_DISJUNCTION, oEnt ) ) + { + iL = 20; //pad out to max for safety, use the best + } + } + return iL; +} + +int GetVisionSpellNeeded( object oS=OBJECT_SELF, object oC=OBJECT_SELF ) +{ + int iT = GetHasSpellEffect( SPELL_TRUE_SEEING, oS ); + int iS = GetHasSpellEffect( SPELL_SEE_INVISIBILITY, oS ); + int iU = GetHasSpellEffect( SPELL_DARKVISION, oS ); + int iD = GetLocalInt( oS, "#DARKNESS" ) || GetHasSpell( SPELL_DARKNESS, oS ); + int iV = GetLocalInt( oS, "#VANISHED" ); + int iP = GetIsPC( oS ) && GetHasSpellEffect( SPELL_DARKNESS, oS ); + int iSU = GetHasSpell( SPELL_DARKVISION, oC ); + int iSS = GetHasSpell( SPELL_SEE_INVISIBILITY, oC ); + int iST = GetHasSpell( SPELL_TRUE_SEEING, oC ); + object oA; + int iCnt = 0; + float fRad = 20.0; + + if ( iV && !iD ) + { + oA = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oS, ++iCnt ); + while ( !iD && GetIsObjectValid( oA ) && GetDistanceBetween( oS, oA ) < fRad ) + { + if ( GetTag( oA ) == "VFX_PER_DARKNESS" ) + { + //there is darkness in the area, could be messing with things + //PrintString( "DARKNESS: " + GetName( oC ) + " sees Darkness in range of " + GetName( oS ) ); + iD = 1; + } + oA = GetNearestObject( OBJECT_TYPE_AREA_OF_EFFECT, oS, ++iCnt ); + } + } + + if ( ( iD && !( iU || iT ) ) || iP ) + { + //darkness, no ultravision, no true seeing + if ( iSU ) + { + return SPELL_DARKVISION; + } + if ( iST ) + { + return SPELL_TRUE_SEEING; + } + } + //Now: !iD || !( iSU || iST ) + if ( iV && !iD && !( iS || iT ) ) + { + //vanished enemy, no darkness, no see invis, no true seeing + if ( iST ) + { + return SPELL_TRUE_SEEING; + } + if ( iSS ) + { + return SPELL_SEE_INVISIBILITY; + } + } + return 0; +} + +int GetHasVisionSpells( object oC=OBJECT_SELF ) +{ + if ( GetHasSpell( SPELL_DARKVISION, oC ) ) + { + return TRUE; + } + if ( GetHasSpell( SPELL_SEE_INVISIBILITY, oC ) ) + { + return TRUE; + } + if ( GetHasSpell( SPELL_TRUE_SEEING, oC ) ) + { + return TRUE; + } + return FALSE; +} + +int GenerateFastBuffList( object oCaster=OBJECT_SELF ) +{ + int iCnt = 0; + int iCnt2 = 0; + int iS = -1; + + if ( GetHasSpell( SPELLABILITY_DRAGON_FEAR, oCaster ) && !GetHasSpellEffect( SPELLABILITY_DRAGON_FEAR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_DRAGON_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_AURA_BLINDING, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_BLINDING, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_BLINDING ); + } + if ( GetHasSpell( SPELLABILITY_AURA_COLD, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_COLD, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_COLD ); + } + if ( GetHasSpell( SPELLABILITY_AURA_ELECTRICITY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_ELECTRICITY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_ELECTRICITY ); + } + if ( GetHasSpell( SPELLABILITY_AURA_FEAR, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_FEAR, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_FEAR ); + } + if ( GetHasSpell( SPELLABILITY_AURA_FIRE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_FIRE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_FIRE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_MENACE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_MENACE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_MENACE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_OF_COURAGE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_OF_COURAGE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_OF_COURAGE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_PROTECTION, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_PROTECTION, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_PROTECTION ); + } + if ( GetHasSpell( SPELLABILITY_AURA_STUN, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_STUN, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_STUN ); + } + if ( GetHasSpell( SPELLABILITY_AURA_UNEARTHLY_VISAGE, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_UNEARTHLY_VISAGE, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_UNEARTHLY_VISAGE ); + } + if ( GetHasSpell( SPELLABILITY_AURA_UNNATURAL, oCaster ) && !GetHasSpellEffect( SPELLABILITY_AURA_UNNATURAL, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_AURA_UNNATURAL ); + } + if ( GetHasSpell( SPELLABILITY_EMPTY_BODY, oCaster ) && !GetHasSpellEffect( SPELLABILITY_EMPTY_BODY, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_EMPTY_BODY ); + } + if ( GetHasSpell( SPELLABILITY_TYRANT_FOG_MIST, oCaster ) && !GetHasSpellEffect( SPELLABILITY_TYRANT_FOG_MIST, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_TYRANT_FOG_MIST ); + } + + if ( GetHasSpell( SPELLABILITY_RAGE_5, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_5, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_RAGE_5 ); + } + else if ( GetHasSpell( SPELLABILITY_RAGE_4, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_4, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_RAGE_4 ); + } + else if ( GetHasSpell( SPELLABILITY_RAGE_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_RAGE_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_RAGE_3 ); + } + + if ( GetHasSpell( SPELLABILITY_FEROCITY_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_3 ); + } + else if ( GetHasSpell( SPELLABILITY_FEROCITY_2, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_2, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_2 ); + } + else if ( GetHasSpell( SPELLABILITY_FEROCITY_1, oCaster ) && !GetHasSpellEffect( SPELLABILITY_FEROCITY_1, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_FEROCITY_1 ); + } + + if ( GetHasSpell( SPELLABILITY_INTENSITY_3, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_3, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_3 ); + } + else if ( GetHasSpell( SPELLABILITY_INTENSITY_2, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_2, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_2 ); + } + else if ( GetHasSpell( SPELLABILITY_INTENSITY_1, oCaster ) && !GetHasSpellEffect( SPELLABILITY_INTENSITY_1, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), SPELLABILITY_INTENSITY_1 ); + } + + iCnt2 = 1; + while ( ( iS = GetLocalInt( oCaster, "#SPN_FB" + IntToString( iCnt2++ ) ) ) ) + { + //cater for Acid Fog value even though creatures should not be + //fast buffing this spell + if ( iS == 10000 ) //temp value for acid fog + { + iS = SPELL_ACID_FOG; + } + if ( GetHasSpell( iS, oCaster ) ) + { + SetLocalInt( oCaster, "#SPL_FB" + IntToString( ++iCnt ), iS ); + } + } + + return iCnt; +} + +float GetSpellRange( int iS ) +{ + //NOTE: currently only includes area spells + + if ( iS < 0 ) + { + //not valid + return -1.0; + } + + if ( iS == SPELL_ACID_FOG || iS == SPELL_CALL_LIGHTNING || iS == SPELL_CHAIN_LIGHTNING || + iS == SPELL_CLOUDKILL || iS == SPELL_DARKNESS || iS == SPELL_ENTANGLE || iS == SPELL_FIREBALL || + iS == SPELL_GREASE || iS == SPELL_INCENDIARY_CLOUD || iS == SPELL_MIND_FOG || iS == SPELL_SOUND_BURST || + iS == SPELL_ICE_STORM || iS == SPELL_BANE || iS == SPELL_SPIKE_GROWTH || iS == SPELL_BOMBARDMENT || + iS == SPELL_ISAACS_LESSER_MISSILE_STORM || iS == SPELL_ISAACS_GREATER_MISSILE_STORM ) + { + return 40.0; + } + else if ( iS == SPELL_BLADE_BARRIER || iS == SPELL_CIRCLE_OF_DEATH || iS == SPELL_CIRCLE_OF_DOOM || iS == SPELL_CONFUSION || + iS == SPELL_DELAYED_BLAST_FIREBALL || iS == SPELL_FLAME_STRIKE || iS == SPELL_HAMMER_OF_THE_GODS || + iS == SPELL_LIGHTNING_BOLT || iS == SPELL_MASS_BLINDNESS_AND_DEAFNESS || //iS == SPELL_MASS_DOMINATION || + iS == SPELL_SLEEP || iS == SPELL_STINKING_CLOUD || iS == SPELL_SUNBEAM || iS == SPELL_WALL_OF_FIRE || + iS == SPELL_WEB || iS == SPELL_WORD_OF_FAITH || iS == SPELL_CREEPING_DOOM || iS == SPELL_HORRID_WILTING || + iS == SPELL_NEGATIVE_ENERGY_BURST || iS == SPELL_EVARDS_BLACK_TENTACLES || iS == SPELL_FEAR || + iS == SPELL_GUST_OF_WIND || iS == SPELL_SUNBURST || iS == SPELL_FIREBRAND ) + { + return 20.0; + } + else if ( iS == SPELL_IMPLOSION || iS == SPELL_MASS_CHARM || iS == SPELL_POWER_WORD_KILL || + iS == SPELL_POWER_WORD_STUN || iS == SPELL_SLOW || iS == SPELL_WAIL_OF_THE_BANSHEE || iS == SPELL_WEIRD || + iS == SPELL_PRISMATIC_SPRAY || iS == SPELL_CONE_OF_COLD || iS == SPELL_BURNING_HANDS || iS == SPELL_COLOR_SPRAY || + IsCone( iS ) ) + { + return 8.5; + } + else + { + //personal ranges + return 0.0; + } +} + +int IsCone( int iS=0 ) +{ + if ( iS == SPELLABILITY_CONE_ACID ) + { + return TRUE; + } + if ( iS == SPELLABILITY_CONE_COLD ) + { + return TRUE; + } + if ( iS == SPELLABILITY_CONE_DISEASE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_CONE_FIRE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_CONE_POISON ) + { + return TRUE; + } + if ( iS == SPELLABILITY_CONE_SONIC ) + { + return TRUE; + } + if ( iS == SPELLABILITY_GOLEM_BREATH_GAS ) + { + return TRUE; + } + if ( iS == SPELLABILITY_BREATH_PETRIFY ) + { + return TRUE; + } + if ( iS == SPELLABILITY_MINDBLAST ) + { + return TRUE; + } + if ( iS == SPELL_PRISMATIC_SPRAY ) + { + return TRUE; + } + if ( iS == SPELL_CONE_OF_COLD ) + { + return TRUE; + } + if ( iS == SPELL_MESTILS_ACID_BREATH ) + { + return TRUE; + } + if ( iS == SPELL_BURNING_HANDS ) + { + return TRUE; + } + if ( iS == SPELL_COLOR_SPRAY ) + { + return TRUE; + } + if ( iS = SPELL_BEH_ANTIMAGIC_CONE ) + { + return TRUE; + } + return FALSE; +} + +int IsDragonBreath( int iS=0 ) +{ + if ( iS == SPELLABILITY_DRAGON_BREATH_ACID ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_COLD ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_FEAR ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_FIRE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_GAS ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_LIGHTNING ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_NEGATIVE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_PARALYZE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_SLEEP ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_SLOW ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_WEAKEN ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_RDD ) + { + return TRUE; + } + if ( iS == SPELLABILITY_DRAGON_BREATH_PRISMATIC ) + { + return TRUE; + } + return FALSE; +} + +int IsHowl( int iS=0 ) +{ + if ( iS == SPELLABILITY_HOWL_CONFUSE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_DAZE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_DEATH ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_DOOM ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_FEAR ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_PARALYSIS ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_SONIC ) + { + return TRUE; + } + if ( iS == SPELLABILITY_HOWL_STUN ) + { + return TRUE; + } + return FALSE; +} + +int IsPulse( int iS=0 ) +{ + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_CHARISMA ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_CONSTITUTION ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_DEXTERITY ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_INTELLIGENCE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_STRENGTH ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_ABILITY_DRAIN_WISDOM ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_COLD ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_DEATH ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_DISEASE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_DROWN ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_FIRE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_HOLY ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_LEVEL_DRAIN ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_LIGHTNING ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_NEGATIVE ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_POISON ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_SPORES ) + { + return TRUE; + } + if ( iS == SPELLABILITY_PULSE_WHIRLWIND ) + { + return TRUE; + } + return FALSE; +} + +void InitializeBeholderRaySelection( object oB=OBJECT_SELF ) +{ + int iC = BEHOLDER_MAX_RAYS; + int iR; + int iT; + + SetLocalInt( oB, "BRTMP1", SPELL_BEHRAY_FINGER_OF_DEATH ); + SetLocalInt( oB, "BRTMP2", SPELL_BEHRAY_TELEKINESIS ); + SetLocalInt( oB, "BRTMP3", SPELL_BEHRAY_FLESH_TO_STONE ); + SetLocalInt( oB, "BRTMP4", SPELL_BEHRAY_CHARM ); + SetLocalInt( oB, "BRTMP5", SPELL_BEHRAY_SLOW ); + SetLocalInt( oB, "BRTMP6", SPELL_BEHRAY_INFLICT_WOUNDS ); + SetLocalInt( oB, "BRTMP7", SPELL_BEHRAY_FEAR ); + //adding 3 additional rays for 10 per round + //adding an additional inflict wounds, telekinesis and slow + if ( iC > 7 ) + { + SetLocalInt( oB, "BRTMP8", SPELL_BEHRAY_TELEKINESIS ); + SetLocalInt( oB, "BRTMP9", SPELL_BEHRAY_SLOW ); + SetLocalInt( oB, "BRTMP10", SPELL_BEHRAY_INFLICT_WOUNDS ); + } + + while ( iC > 0 ) + { + iR = Random( iC ) + 1; + SetLocalInt( oB, "#BEHRAY" + IntToString( iC ), GetLocalInt( oB, "BRTMP" + IntToString( iR ) ) ); + for ( iT = iR; iT < iC; iT++ ) + { + SetLocalInt( oB, "BRTMP" + IntToString( iT ), GetLocalInt( oB, "BRTMP" + IntToString( iT + 1 ) ) ); + } + DeleteLocalInt( oB, "BRTMP" + IntToString( iT ) ); + iC--; + } +} + +void ClearBeholderRaySelection( object oB=OBJECT_SELF ) +{ + int iC; + + for ( iC = 1; iC < BEHOLDER_MAX_RAYS + 1; iC++ ) + { + DeleteLocalInt( oB, "#BEHRAY" + IntToString( iC ) ); + } +} + +void RemoveBeholderRayFromSelection( int iS=0, object oB=OBJECT_SELF ) +{ + int iC = 0; + int iR = -1; + + while ( iR != iS && iC < BEHOLDER_MAX_RAYS + 1 ) + { + iR = GetLocalInt( oB, "#BEHRAY" + IntToString( ++iC ) ); + } + if ( iR == iS ) + { + while ( ( iR = GetLocalInt( oB, "#BEHRAY" + IntToString( iC + 1 ) ) ) != 0 ) + { + SetLocalInt( oB, "#BEHRAY" + IntToString( iC++ ), iR ); + } + DeleteLocalInt( oB, "#BEHRAY" + IntToString( iC ) ); + } +} + +//currently just grabs a random ray +//more intelligence matching of rays to targets will be added in the near future +int MatchRayToTarget( object oT, object oB=OBJECT_SELF ) +{ + int iC; + int iR; + int iT = 0; + + while ( GetLocalInt( oB, "#BEHRAY" + IntToString( ++iT ) ) != 0 ) + { + iC++; + } + iR = Random( iC ) + 1; + iR = GetLocalInt( oB, "#BEHRAY" + IntToString( iR ) ); + + return iR; +} \ No newline at end of file diff --git a/_module/nss/no_lib_melee.nss b/_module/nss/no_lib_melee.nss new file mode 100644 index 00000000..e0a151c4 --- /dev/null +++ b/_module/nss/no_lib_melee.nss @@ -0,0 +1,300 @@ +#include "no_inc_ptypes" + +//functions +int GetBestMeleeSpecial( object oTarget, int iPenalty=0, int iChance=50, object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iFeat; + int iMyAtk; + int iEnemyAtk; + int iMyAC; + int iEnemyAC; + int iF1; + int iF2; + int iD; + int iT; + + if ( !GetIsObjectValid( oTarget ) || Random( 100 ) > iChance ) + { + return 0; + } + + //get target's discipline skill as it opposes some melee specials + iD = GetSkillRank( SKILL_DISCIPLINE, oTarget ) + GetAbilityModifier( ABILITY_STRENGTH, oTarget ) + 3 * GetHasFeat( FEAT_SKILL_FOCUS_DISCIPLINE, oTarget ); + + //use either my intelligence or BAB to check for creature knowledge on some of these, whichever is better + //if iT == TRUE we will use BAB, otherwise use intelligence modifier + iT = GetBaseAttackBonus( OBJECT_SELF ) < GetAbilityModifier( ABILITY_INTELLIGENCE ) ? FALSE : TRUE; + + iMyAtk = EstimateAttackBonus( oEnt ) + iPenalty; //include penalty from active combat mode if any + //iEnemyAtk = EstimateAttackBonus( oTarget ); + //iMyAC = GetAC( oEnt ) - 10; + iEnemyAC = GetAC( oTarget ) - 10; + + //KNOCKDOWN + iF1 = GetHasFeat( FEAT_KNOCKDOWN, oEnt ); + iF2 = GetHasFeat( FEAT_IMPROVED_KNOCKDOWN, oEnt ); + if ( iF1 || iF2 ) + { + iFeat = 0; + if ( !GetHasFeatEffect( FEAT_KNOCKDOWN, oTarget ) && !GetHasFeatEffect( FEAT_IMPROVED_KNOCKDOWN, oTarget ) ) + { + //figure out target's discipline + + if ( iF2 ) //improved knockdown + { + //compare my improved knockdown attack roll to target's AC and Discipline check + if ( iMyAtk >= iEnemyAC && iMyAtk > iD ) + { + iFeat = FEAT_IMPROVED_KNOCKDOWN; + } + } + else //no iF2 means we must have iF1 + { + //compare my knockdown attack roll to target's AC and Discipline check + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 4 >= iEnemyAC && iMyAtk - 4 > iD ) ) + { + iFeat = FEAT_KNOCKDOWN; + } + } + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //CALLED SHOT + if ( GetHasFeat( FEAT_CALLED_SHOT, oEnt ) ) + { + iFeat = 0; + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 4 >= iEnemyAC && iMyAtk - 4 > iD ) ) + { + iFeat = FEAT_CALLED_SHOT; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //DISARM + iF1 = GetHasFeat( FEAT_DISARM, oEnt ); + iF2 = GetHasFeat( FEAT_IMPROVED_DISARM, oEnt ); + if ( iF1 || iF2 ) + { + int iMod = 4 * GetRelativeEnemyWeaponSize( oTarget ); + iFeat = 0; + if ( GetIsArmed( oTarget) ) + { + if ( iF2 ) //improved disarm + { + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 4 + iMod >= iEnemyAC && iMyAtk - 4 + iMod > iD ) ) + { + iFeat = FEAT_IMPROVED_DISARM; + } + } + else //disarm + { + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 6 + iMod >= iEnemyAC && iMyAtk - 6 + iMod > iD ) ) + { + iFeat = FEAT_DISARM; + } + } + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //STUNNING FIST + if ( GetHasFeat( FEAT_STUNNING_FIST, oEnt ) && !GetHasFeatEffect( FEAT_STUNNING_FIST, oTarget ) && + FloatToInt( NO_THRESH_STUNNING_FIST * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || !GetIsImmune( oTarget, IMMUNITY_TYPE_STUN ) ) ) + { + iFeat = 0; + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || iMyAtk - 4 >= iEnemyAC ) + { + iFeat = FEAT_STUNNING_FIST; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //QUIVERING PALM + if ( GetHasFeat( FEAT_QUIVERING_PALM, oEnt ) && + FloatToInt( NO_THRESH_QUIVERING_PALM * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || !GetIsImmune( oTarget, IMMUNITY_TYPE_DEATH ) ) ) + { + iFeat = FEAT_QUIVERING_PALM; + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + + //SMITE EVIL + if ( GetHasFeat( FEAT_SMITE_EVIL, oEnt ) && FloatToInt( NO_THRESH_SMITE * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 2 ) == FALSE || GetAlignmentGoodEvil( oTarget ) == ALIGNMENT_EVIL ) ) + { + iFeat = FEAT_SMITE_EVIL; + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + + //SMITE GOOD + //This feat definition was missing in nwscript pre-HotU, now it's in, uncommenting this block + if ( GetHasFeat( FEAT_SMITE_GOOD, oEnt ) && FloatToInt( NO_THRESH_SMITE * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 2 ) == FALSE || GetAlignmentGoodEvil( oTarget ) == ALIGNMENT_GOOD ) ) + { + iFeat = FEAT_SMITE_GOOD; + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + + //WHIRLWIND + iF1 = GetHasFeat( FEAT_WHIRLWIND_ATTACK, oEnt ); + iF2 = GetHasFeat( FEAT_IMPROVED_WHIRLWIND, oEnt ); + if ( iF1 || iF2 ) + { + iFeat = 0; + + if ( iF2 ) //improved whirlwind + { + //check to see if there are multiple enemies in melee range + //if so, check to see if there are at least as many as our number of attacks divided by 2 + //tail end attacks probably miss anyway, so only count the top end of the attack sequence + //if there are enough, use whirlwind as we get full BAB on every attack with whirlwind + if ( GetHostileCount( 3.0 ) > GetBaseAttackBonus( oEnt ) / 10 ) + { + iFeat = FEAT_IMPROVED_WHIRLWIND; + } + } + else //whirlwind + { + if ( GetHostileCount( 3.0 ) > GetBaseAttackBonus( oEnt ) / 10 ) + { + iFeat = FEAT_WHIRLWIND_ATTACK; + } + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //KI DAMAGE + if ( GetHasFeat( FEAT_KI_DAMAGE, oEnt ) && FloatToInt( NO_THRESH_KI_DAMAGE * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) ) + { + iFeat = FEAT_KI_DAMAGE; + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + + iFeat = GetLocalInt( oEnt, "#FEAT" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#FEAT" + IntToString( iCnt-- ) ); + } + return iFeat; +} + +int SelectMeleeCombatModes( object oT, int iC=50, object oEnt=OBJECT_SELF ) +{ + int iPenalty = 0; //accumulate penalty from attack modes + int iMyAtk; + int iEnemyAtk; + int iMyAC; + int iEnemyAC; + int iF1; + int iF2; + int iCnt = 0; + int iMode; + int iT; + + if ( !GetIsObjectValid( oT ) || Random( 100 ) > iC ) + { + return 0; + } + + iMyAtk = EstimateAttackBonus( oEnt ); + iEnemyAtk = EstimateAttackBonus( oT ); + iMyAC = GetAC( oEnt ) - 10; + iEnemyAC = GetAC( oT ) - 10; + + //use either my intelligence or BAB to check for creature knowledge on some of these, whichever is better + //if iT == TRUE we will use BAB, otherwise use intelligence modifier + iT = GetBaseAttackBonus( OBJECT_SELF ) < GetAbilityModifier( ABILITY_INTELLIGENCE ) ? FALSE : TRUE; + + //POWER ATTACK, IMPROVED POWER ATTACK + iF1 = GetHasFeat( FEAT_POWER_ATTACK, oEnt ); + iF2 = GetHasFeat( FEAT_IMPROVED_POWER_ATTACK, oEnt ); + if ( iF1 || iF2 ) + { + iMode = 0; + if ( iF2 ) //improved power attack + { + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || iMyAtk - 10 >= iEnemyAC ) + { + iMode = FEAT_IMPROVED_POWER_ATTACK; + } + } + if ( iF1 && iMode == 0 ) //we don't have or didn't choose improved power attack + { + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || iMyAtk - 5 >= iEnemyAC ) + { + iMode = FEAT_POWER_ATTACK; + } + } + if ( iMode ) + { + SetLocalInt( oEnt, "#COMBATMODE" + IntToString( ++iCnt ), iMode ); + } + } + + //FLURRY OF BLOWS + if ( GetHasFeat( FEAT_FLURRY_OF_BLOWS, oEnt ) ) + { + iMode = 0; + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || iMyAtk - 2 >= iEnemyAC ) + { + iMode = FEAT_FLURRY_OF_BLOWS; + } + if ( iMode ) + { + SetLocalInt( oEnt, "#COMBATMODE" + IntToString( ++iCnt ), iMode ); + } + } + + //EXPERTISE, IMPROVED EXPERTISE + iF1 = GetHasFeat( FEAT_EXPERTISE, oEnt ); + iF2 = GetHasFeat( FEAT_IMPROVED_EXPERTISE, oEnt ); + if ( iF1 || iF2 ) + { + iMode = 0; + if ( iF2 ) //improved expertise + { + //check if I can afford a -10 on attack, and if my enemy has a high enough attack to bother + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 10 >= iEnemyAC && iEnemyAtk >= iMyAC ) ) + { + iMode = FEAT_IMPROVED_EXPERTISE; + } + } + if ( iF1 && iMode == 0 ) //we don't have or didn't choose improved expertise + { + //check if I can afford a -5 on attack, and if my enemy has a high enough attack to bother + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 5 >= iEnemyAC && iEnemyAtk >= iMyAC ) ) + { + iMode = FEAT_EXPERTISE; + } + } + if ( iMode ) + { + SetLocalInt( oEnt, "#COMBATMODE" + IntToString( ++iCnt ), iMode ); + } + } + + iMode = GetLocalInt( oEnt, "#COMBATMODE" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#COMBATMODE" + IntToString( iCnt-- ) ); + } + return iMode; +} \ No newline at end of file diff --git a/_module/nss/no_lib_priority.nss b/_module/nss/no_lib_priority.nss new file mode 100644 index 00000000..90684f0c --- /dev/null +++ b/_module/nss/no_lib_priority.nss @@ -0,0 +1,320 @@ +#include "no_inc_ptypes" + +//functions +void AddBehaviour( string sB, int iC, object oEnt=OBJECT_SELF ) +{ + int iL = GetLocalInt( oEnt, "PRITOTAL" ) + 1; + + //update count + SetLocalInt( oEnt, "PRITOTAL", iL ); + + //make sure the chance is valid + iC = iC < 0 ? 0 : iC; + iC = iC > 100 ? 100 : iC; + + //set up the behaviour + SetLocalString( oEnt, "PRID_" + IntToString( iL ), sB ); + SetLocalInt( oEnt, "PRIC_" + IntToString( iL ), iC ); +} + +string GetPriority( int iP=1, object oEnt=OBJECT_SELF ) +{ + //retrieve priority iP + return GetLocalString( oEnt, "PRID_" + IntToString( iP ) ); +} + +int GetPriorityChance( int iP=1, object oEnt=OBJECT_SELF ) +{ + //retrieve priority chance iP + return GetLocalInt( oEnt, "PRIC_" + IntToString( iP ) ); +} + +void SetVoiceChat( int iV, int iC, object oE=OBJECT_SELF ) +{ + if ( iC < 0 ) + { + iC = -1; + } + else if ( iC > 100 ) + { + iC = 100; + } + if ( iV == NO_VC_DEFAULT ) + { + if ( iC == 0 ) + { + //delete the config for default voicechat chance + DeleteLocalInt( oE, "#VCC" ); + } + else + { + //set the config for default voicechat chance + SetLocalInt( oE, "#VCC", iC ); + } + } + else + { + if ( iC == 0 ) + { + //delete the config for this voicechat chance + DeleteLocalInt( oE, "#VCC_" + IntToString( iV ) ); + } + else + { + //set the config for this voicechat chance + SetLocalInt( oE, "#VCC_" + IntToString( iV ), iC ); + } + } +} + +float GetFollowDist( object oE=OBJECT_SELF ) +{ + float fF = -1.0; + + if ( GetIsObjectValid( oE ) ) + { + fF = GetLocalFloat( OBJECT_SELF, "#FOLLOWDIST" ); + + if ( fF == 0.0 ) + { + //default distance if none is set + fF = 3.0; + } + } + return fF; +} + +void SetPerceptionRange( int iP, float fP=50.0, object oE=OBJECT_SELF ) +{ + if ( iP == NO_PERCEPTION_SEEN ) + { + SetLocalFloat( oE, "#PER_SEEN_RANGE", fP ); + } + else if ( iP == NO_PERCEPTION_HEARD ) + { + SetLocalFloat( oE, "#PER_HEARD_RANGE", fP ); + } + else if ( iP == NO_PERCEPTION_VANISHED ) + { + SetLocalFloat( oE, "#PER_VANISHED_RANGE", fP ); + } +} + +void SetPerceptionRanges( float fS=50.0, float fH=50.0, float fV=50.0, object oE=OBJECT_SELF ) +{ + if ( fS != -1.0 ) + { + SetLocalFloat( oE, "#PER_SEEN_RANGE", fS ); + } + if ( fH != -1.0 ) + { + SetLocalFloat( oE, "#PER_HEARD_RANGE", fH ); + } + if ( fV != -1.0 ) + { + SetLocalFloat( oE, "#PER_VANISHED_RANGE", fV ); + } +} + +float GetPerceptionRange( int iP, object oE=OBJECT_SELF ) +{ + float fP = 0.0; + + if ( iP == NO_PERCEPTION_SEEN ) + { + fP = GetLocalFloat( oE, "#PER_SEEN_RANGE" ); + } + else if ( iP == NO_PERCEPTION_HEARD ) + { + fP = GetLocalFloat( oE, "#PER_HEARD_RANGE" ); + } + else if ( iP == NO_PERCEPTION_VANISHED ) + { + fP = GetLocalFloat( oE, "#PER_VANISHED_RANGE" ); + } + //set max range if no setting found + if ( fP == 0.0 ) + { + fP = 50.0; + } + return fP; +} + +void SetReadyStatus( int iS=1, object oE=OBJECT_SELF ) +{ + SetLocalInt( oE, "#READYTOACT", iS ); +} + +int IsReadyToAct( object oE=OBJECT_SELF ) +{ + return GetLocalInt( oE, "#READYTOACT" ); +} + +int ShortAction( object oE=OBJECT_SELF ) +{ + string sAct = GetLastAction( oE ); + + if ( sAct == "+EVACAOE" || sAct == "+REGROUP" || sAct == "+AVOIDMELEE" || sAct == "+FLANK" || sAct == "+AVOIDENEMY" ) + //|| sAct == "+EYERAYS" ) + { + return TRUE; + } + return FALSE; +} + +int IsActive( object oE=OBJECT_SELF ) +{ + return GetLocalInt( oE, "#ACTIVE" ); +} + +void SetActive( object oE=OBJECT_SELF ) +{ + SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); +} + +void SetIsActive( int iA=TRUE, object oE=OBJECT_SELF ) +{ + if ( iA == TRUE ) + { + SetLocalInt( oE, "#ACTIVE", 1 ); + } + else + { + DeleteLocalInt( oE, "#ACTIVE" ); + } +} + +float GetResponseRange( int iT, object oE=OBJECT_SELF ) +{ + float fR = GetLocalFloat( oE, "#RESPOND_RANGE_" + IntToString( iT ) ); + + if ( fR == 0.0 ) + { + //default range + fR = 50.0; + } + return fR; +} + +void SetResponseRange( int iT, float fR=50.0, object oE=OBJECT_SELF ) +{ + float fRange = fR > 0.0 ? fR : 0.0; + + SetLocalFloat( oE, "#RESPOND_RANGE_" + IntToString( iT ), fRange ); +} + +void SetIsTeleporter( object oE=OBJECT_SELF ) +{ + SetLocalInt( OBJECT_SELF, "TELEPORTER", 1 ); +} + +int GetIsTeleporter( object oE=OBJECT_SELF ) +{ + return GetLocalInt( OBJECT_SELF, "TELEPORTER" ); +} + +void SetIsFastBuffer( int iS, object oE=OBJECT_SELF ) +{ + if ( iS == 1 ) + { + SetLocalInt( oE, "#FASTBUFFER", 1 ); + } + else + { + DeleteLocalInt( oE, "#FASTBUFFER" ); + } +} + +int GetIsFastBuffer( object oE=OBJECT_SELF ) +{ + return GetLocalInt( oE, "#FASTBUFFER" ); +} + +void SetIsFastBuffed( int iS, object oE=OBJECT_SELF ) +{ + if ( iS == 1 ) + { + SetLocalInt( oE, "#FASTBUFFED", 1 ); + } + else + { + DeleteLocalInt( oE, "#FASTBUFFED" ); + } +} + +int GetIsFastBuffed( object oE=OBJECT_SELF ) +{ + return GetLocalInt( oE, "#FASTBUFFED" ); +} + +void AddFastBuff( int iS, object oE=OBJECT_SELF ) +{ + int iC = CountFastBuffs( oE ) + 1; + + SetLocalInt( oE, "#SPN_FB" + IntToString( iC ), iS ); +} + +int CountFastBuffs( object oE=OBJECT_SELF ) +{ + int iC = 0; + int iS = 1; + + while ( GetLocalInt( oE, "#SPN_FB" + IntToString( iS++ ) ) != 0 ) + { + iC++; + } + + return iC; +} + +void SetLastAction( string sA, object oE=OBJECT_SELF ) +{ + SetLocalString( oE, "#LASTACTION", sA ); +} + +string GetLastAction( object oE=OBJECT_SELF ) +{ + return GetLocalString( oE, "#LASTACTION" ); +} + +void SetLastActionTimestamp( object oE=OBJECT_SELF ) +{ + SetLocalInt( oE, "#LASTACTIONTIME", GetTimeSecond() ); +} + +int GetLastActionTimestamp( object oE=OBJECT_SELF ) +{ + int iS = GetLocalInt( oE, "#LASTACTIONTIME" ); + int iT = GetTimeSecond(); + int iL = iT < iS ? iT + 60 : iT; + + return iL - iS; +} + +void SetCorpseDelay( int iT=60, object oC=OBJECT_SELF ) +{ + if ( GetRacialType( oC ) != RACIAL_TYPE_UNDEAD && GetStringLeft( GetTag( oC ), 6 ) != "NO_AI_" && + GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, oC ) ) != "Gargoyle Properties" ) + { + //not summoned, not undead, default decay time + AssignCommand( oC, SetIsDestroyable( FALSE, TRUE, TRUE ) ); + SetLocalFloat( oC, "#DECAYDELAY", 60.0 ); //default corpse decay time + } +} + +void SetIsFlier( int iF=FALSE, object oF=OBJECT_SELF ) +{ + if ( iF == TRUE || GetRacialType( oF ) == RACIAL_TYPE_DRAGON ) + { + SetLocalInt( oF, "FLIER", 1 ); + } + else + { + DeleteLocalInt( oF, "FLIER" ); + } +} + +int GetIsFlier( object oF=OBJECT_SELF ) +{ + return GetLocalInt( oF, "FLIER" ); +} \ No newline at end of file diff --git a/_module/nss/no_lib_ranged.nss b/_module/nss/no_lib_ranged.nss new file mode 100644 index 00000000..0fc87cd0 --- /dev/null +++ b/_module/nss/no_lib_ranged.nss @@ -0,0 +1,172 @@ +#include "no_inc_ptypes" + +//functions +int GetBestRangedSpecial( object oTarget, int iPenalty=0, int iChance=50, object oEnt=OBJECT_SELF ) +{ + int iCnt = 0; + int iFeat; + int iMyAtk; + int iEnemyAtk; + int iMyAC; + int iEnemyAC; + int iF1; + int iF2; + int iD; + int iT; + + if ( !GetIsObjectValid( oTarget ) || Random( 100 ) > iChance ) + { + return 0; + } + + iD = GetSkillRank( SKILL_DISCIPLINE, oTarget ) + GetAbilityModifier( ABILITY_STRENGTH, oTarget ) + 3 * GetHasFeat( FEAT_SKILL_FOCUS_DISCIPLINE, oTarget ); + iMyAtk = EstimateAttackBonus( oEnt ) + iPenalty; //include penalty from active combat mode if any + //iEnemyAtk = EstimateAttackBonus( oTarget ); + //iMyAC = GetAC( oEnt ) - 10; + iEnemyAC = GetAC( oTarget ) - 10; + + //use either my intelligence or BAB to check for creature knowledge on some of these, whichever is better + //if iT == TRUE we will use BAB, otherwise use intelligence modifier + iT = GetBaseAttackBonus( OBJECT_SELF ) < GetAbilityModifier( ABILITY_INTELLIGENCE ) ? FALSE : TRUE; + + //CALLED SHOT + if ( GetHasFeat( FEAT_CALLED_SHOT, oEnt ) ) + { + iFeat = 0; + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 4 >= iEnemyAC && iMyAtk - 4 > iD ) ) + { + iFeat = FEAT_CALLED_SHOT; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //SEEKER ARROW + // Arcane Archer feats are not defined in nwscript? + // FIX: They are in HotU but not SoU. When updating these for HotU update this block and add the rest. + iF1 = GetHasFeat( FEAT_PRESTIGE_SEEKER_ARROW_1, oEnt ); + iF2 = GetHasFeat( FEAT_PRESTIGE_SEEKER_ARROW_2, oEnt ); + if ( iF1 || iF2 ) + { + iFeat = 0; + if ( iMyAtk + 8 < iEnemyAC ) //if I can't hit even with a high roll use a seeker arrow + { + if ( iF2 ) + { + iFeat = FEAT_PRESTIGE_SEEKER_ARROW_2; + } + else + { + iFeat = FEAT_PRESTIGE_SEEKER_ARROW_1; + } + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //IMBUE ARROW + if ( GetHasFeat( FEAT_PRESTIGE_IMBUE_ARROW, oEnt ) ) + { + iFeat = 0; + if ( GetAllyCount( RADIUS_SIZE_HUGE, oTarget, oEnt ) > GetHostileCount( RADIUS_SIZE_HUGE, oTarget, oEnt ) ) + { + iFeat = FEAT_PRESTIGE_IMBUE_ARROW; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //HAIL OF ARROWS + if ( GetHasFeat( FEAT_PRESTIGE_HAIL_OF_ARROWS, oEnt ) ) + { + iFeat = 0; + if ( GetHostileCount( 30.0 ) > GetBaseAttackBonus( oEnt ) / 10 ) + { + iFeat = FEAT_PRESTIGE_HAIL_OF_ARROWS; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //ARROW OF SLAYING + if ( GetHasFeat( FEAT_PRESTIGE_ARROW_OF_DEATH, oEnt ) ) + { + iFeat = 0; + if ( FloatToInt( NO_THRESH_ARROW_SLAYING * GetHitDice( oEnt ) ) < GetHitDice( oTarget ) && + ( DoAbilityCheck( ABILITY_INTELLIGENCE, 10 ) == FALSE || GetIsImmune( oTarget, IMMUNITY_TYPE_DEATH ) == FALSE ) ) + { + //target has sufficient hit dice to warrant use of an arrow of death + //either oEnt failed its intelligence check or it passed and determined that target is not immune to death effects + iFeat = FEAT_PRESTIGE_ARROW_OF_DEATH; + } + if ( iFeat ) + { + SetLocalInt( oEnt, "#FEAT" + IntToString( ++iCnt ), iFeat ); + } + } + + //randomly select one of the feats that was deemed suitable for use + iFeat = GetLocalInt( oEnt, "#FEAT" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#FEAT" + IntToString( iCnt-- ) ); + } + return iFeat; +} + +int SelectRangedCombatModes( object oT, int iC=50, object oEnt=OBJECT_SELF ) +{ + int iPenalty = 0; //accumulate penalty from attack modes + int iMyAtk; + //int iEnemyAtk; + //int iMyAC; + int iEnemyAC; + int iF1; + int iF2; + int iCnt = 0; + int iMode; + int iT; + + if ( !GetIsObjectValid( oT ) || Random( 100 ) > iC ) + { + return 0; + } + + iMyAtk = EstimateAttackBonus( oEnt ); + //iEnemyAtk = EstimateAttackBonus( oT ); + //iMyAC = GetAC( oEnt ) - 10; + iEnemyAC = GetAC( oT ) - 10; + + //use either my intelligence or BAB to check for creature knowledge on some of these, whichever is better + //if iT == TRUE we will use BAB, otherwise use intelligence modifier + iT = GetBaseAttackBonus( OBJECT_SELF ) < GetAbilityModifier( ABILITY_INTELLIGENCE ) ? FALSE : TRUE; + + //RAPID SHOT + if ( GetHasFeat( FEAT_RAPID_SHOT, oEnt ) ) + { + iMode = 0; + if ( DoCombatKnowledgeCheck( iT, 10 ) == FALSE || ( iMyAtk - 2 >= iEnemyAC ) ) + { + iMode = FEAT_RAPID_SHOT; + } + if ( iMode ) + { + SetLocalInt( oEnt, "#COMBATMODE" + IntToString( ++iCnt ), iMode ); + } + } + + iMode = GetLocalInt( oEnt, "#COMBATMODE" + IntToString( Random( iCnt ) + 1 ) ); + while ( iCnt ) + { + DeleteLocalInt( oEnt, "#COMBATMODE" + IntToString( iCnt-- ) ); + } + return iMode; +} \ No newline at end of file diff --git a/_module/nss/no_scr_asclis.nss b/_module/nss/no_scr_asclis.nss new file mode 100644 index 00000000..e04db71e --- /dev/null +++ b/_module/nss/no_scr_asclis.nss @@ -0,0 +1,5 @@ +void main() +{ + SetListening( OBJECT_SELF, TRUE ); + SetAssociateListenPatterns( OBJECT_SELF ); +} \ No newline at end of file diff --git a/_module/nss/no_scr_cleanvars.nss b/_module/nss/no_scr_cleanvars.nss new file mode 100644 index 00000000..71ee2ad6 --- /dev/null +++ b/_module/nss/no_scr_cleanvars.nss @@ -0,0 +1,108 @@ +#include "no_lib_priority" + +void main() +{ + //clean up variables on dying creature + int iCnt; + + //don't proceed if we're alive again + if ( GetIsDead( OBJECT_SELF ) || GetLocalInt( OBJECT_SELF, "TEMPDIE" ) ) + { + //clear teleporter status variable + DeleteLocalInt( OBJECT_SELF, "TELEPORTER" ); + + //clear balor death throes variable + DeleteLocalInt( OBJECT_SELF, "BALORDEATH" ); + + //clear dragon flight variables + DeleteLocalInt( OBJECT_SELF, "FLIER" ); + DeleteLocalInt( OBJECT_SELF, "DRAGONFLIGHTDEL" ); + + //dragon fear variable + DeleteLocalInt( OBJECT_SELF, "#DRAGFEAR" ); + + //clear caster flag + DeleteLocalInt( OBJECT_SELF, "#CASTER" ); + + //clear avoid melee trackers + DeleteLocalLocation( OBJECT_SELF, "#LASTHOTSPOT" ); + DeleteLocalFloat( OBJECT_SELF, "#LASTAMANGLE" ); + DeleteLocalInt( OBJECT_SELF, "#LASTHSRETRIES" ); + DeleteLocalInt( OBJECT_SELF, "#LASTDEST" ); + DeleteLocalLocation( OBJECT_SELF, "#LASTDEST" ); + + //clear dragon breath weapon delay flag + DeleteLocalInt( OBJECT_SELF, "#BDEL" ); + + //clear BC_HEAL anti-spam flag + DeleteLocalInt( OBJECT_SELF, "#HEALDEL" ); + + //delete combat setting + DeleteLocalInt( OBJECT_SELF, "#INCOMBAT" ); + + //delete last combat round end broadcast timestamp + DeleteLocalInt( OBJECT_SELF, "#LASTCREBC" ); + + //clear tail of summon chain variable + DeleteLocalObject( OBJECT_SELF, "MASTCHAIN" ); + + //clear vision flags + DeleteLocalInt( OBJECT_SELF, "#DARKNESS" ); + DeleteLocalInt( OBJECT_SELF, "#VANISHED" ); + DeleteLocalObject( OBJECT_SELF, "#VISION" ); + + //clear last rest marker + DeleteLocalInt( OBJECT_SELF, "#LASTREST" ); + + //clear fast buffer markers + DeleteLocalInt( OBJECT_SELF, "#FASTBUFFER" ); + DeleteLocalInt( OBJECT_SELF, "#FASTBUFFED" ); + + //delete activity marker + DeleteLocalInt( OBJECT_SELF, "#ACTIVE" ); + DeleteLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ); + + //delete logged spawn point + DeleteLocalInt( OBJECT_SELF, "#RETSPNLOC" ); + DeleteLocalLocation( OBJECT_SELF, "#SPAWNLOC" ); + + //delete stand ground variables + DeleteLocalInt( OBJECT_SELF, "#STANDGROUND" ); + DeleteLocalLocation( OBJECT_SELF, "#SGLOC" ); + + //delete corpse decay delay variable + DeleteLocalFloat( OBJECT_SELF, "#DECAYDELAY" ); + + //clear spell list and fastbuff list + //these shouldn't be necessary, but just in case there is an interruption + iCnt = 1; + while ( GetLocalInt( OBJECT_SELF, "#SPL_" + IntToString( iCnt ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#SPL_" + IntToString( iCnt++ ) ); + } + iCnt = 1; + while ( GetLocalInt( OBJECT_SELF, "#SPL_FB" + IntToString( iCnt ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#SPL_FB" + IntToString( iCnt++ ) ); + } + iCnt = 1; + while ( GetLocalInt( OBJECT_SELF, "#SPN_FB" + IntToString( iCnt ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#SPN_FB" + IntToString( iCnt++ ) ); + } + iCnt = 1; + while ( GetLocalInt( OBJECT_SELF, "#FEAT_" + IntToString( iCnt ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#FEAT_" + IntToString( iCnt++ ) ); + } + + //clear priority lists + DeleteLocalInt( OBJECT_SELF, "PRITOTAL" ); + iCnt = 1; + while ( GetLocalInt( OBJECT_SELF, "PRIC_" + IntToString( iCnt ) ) ) + { + DeleteLocalString( OBJECT_SELF, "PRID_" + IntToString( iCnt ) ); + DeleteLocalInt( OBJECT_SELF, "PRIC_" + IntToString( iCnt++ ) ); + } + } +} diff --git a/_module/nss/no_scr_excorpse.nss b/_module/nss/no_scr_excorpse.nss new file mode 100644 index 00000000..7c59a15c --- /dev/null +++ b/_module/nss/no_scr_excorpse.nss @@ -0,0 +1,13 @@ +void main() +{ + //don't proceed if we're alive again + if ( GetIsDead( OBJECT_SELF ) || GetLocalInt( OBJECT_SELF, "TEMPDIE" ) ) + { + //clear death marker + DeleteLocalInt( OBJECT_SELF, "TEMPDIE" ); + + //time to die + SetIsDestroyable( TRUE, FALSE, FALSE ); + DestroyObject( OBJECT_SELF ); + } +} diff --git a/_module/nss/no_scr_logeq.nss b/_module/nss/no_scr_logeq.nss new file mode 100644 index 00000000..6f84e0a1 --- /dev/null +++ b/_module/nss/no_scr_logeq.nss @@ -0,0 +1,14 @@ +void main() +{ + object oL = GetItemInSlot( INVENTORY_SLOT_LEFTHAND ); + object oR = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ); + + if ( GetIsObjectValid( oL ) ) + { + SetLocalObject( OBJECT_SELF, "LHAND", oL ); + } + if ( GetIsObjectValid( oR ) ) + { + SetLocalObject( OBJECT_SELF, "RHAND", oR ); + } +} \ No newline at end of file diff --git a/_module/nss/no_scr_logspnloc.nss b/_module/nss/no_scr_logspnloc.nss new file mode 100644 index 00000000..edc45643 --- /dev/null +++ b/_module/nss/no_scr_logspnloc.nss @@ -0,0 +1,5 @@ +void main() +{ + SetLocalInt( OBJECT_SELF, "#RETSPNLOC", 1 ); + SetLocalLocation( OBJECT_SELF, "#SPAWNLOC", GetLocation( OBJECT_SELF ) ); +} \ No newline at end of file diff --git a/_module/nss/no_scr_shutdown.nss b/_module/nss/no_scr_shutdown.nss new file mode 100644 index 00000000..b48d3477 --- /dev/null +++ b/_module/nss/no_scr_shutdown.nss @@ -0,0 +1,72 @@ +//:://///////////////////////////////////////////// +//:: Shutdown +//:: +//::////////////////////////////////////////////// +/* + This script will shutdown the combat AI. +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" + +void main() +{ + int iCnt = GetLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ); + int iCombat = 0; + //object oEnemy; + int iRestWait = 30; + + //delete queue marker + DeleteLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ); + + //SpeakString( "CFS" ); + //if ( !GetIsInCombat() && GetLocalInt( OBJECT_SELF, "#ACTIVE" ) && !IsInConversation( OBJECT_SELF ) ) + if ( !IsInConversation( OBJECT_SELF ) ) + { + //oEnemy = GetNearestCreature( CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_IS_ALIVE, TRUE ); + int iE = GetHostileCount( 50.0 ); + if ( iE ) + { + InitCombat(); + } + else + { + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + DeleteLocalInt( OBJECT_SELF, "#FASTBUFFED" ); + DeleteLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ); + DeleteLocalInt( OBJECT_SELF, "#ACTIVE" ); + DeleteLocalInt( OBJECT_SELF, "#VANISHED" ); + //SetReadyStatus(); + ActionForceFollowObject( GetMaster( OBJECT_SELF ), 3.0 ); + return; + } + //else if ( !GetLocalInt( OBJECT_SELF, "#LASTREST" ) && GetTimeSinceLastCombat() > iRestWait ) + else if ( GetTimeSinceLastCombat() > iRestWait ) + { + //PrintString( "RESTING: " + GetName( OBJECT_SELF ) ); + DeleteLocalInt( OBJECT_SELF, "#FASTBUFFED" ); + DeleteLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ); + DeleteLocalInt( OBJECT_SELF, "#ACTIVE" ); //shutdown AI heartbeats until an opponent shows up + DeleteLocalInt( OBJECT_SELF, "#VANISHED" ); + //SetReadyStatus(); + if ( !GetLocalInt( OBJECT_SELF, "#LASTREST" ) ) + { + ActionRest(); //no enemies seen for 30 seconds, rest + SetLocalInt( OBJECT_SELF, "#LASTREST", 1 ); + } + ActionDoCommand( WalkWayPoints() ); //start walking waypoints if applicable + return; + } + + if ( !GetLocalInt( OBJECT_SELF, "#QUEUESHUTDOWN" ) && GetLocalInt( OBJECT_SELF, "#ACTIVE" ) ) + { + //DelayCommand( 12.0, ExecuteScript( "no_scr_shutdown", OBJECT_SELF ) ); + DoQueueShutdown( 12.0 ); + return; + } + } + } +} + diff --git a/_module/nss/no_spn_beh.nss b/_module/nss/no_spn_beh.nss new file mode 100644 index 00000000..fc9ee760 --- /dev/null +++ b/_module/nss/no_spn_beh.nss @@ -0,0 +1,121 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+AVOIDMELEE", 50 ); //avoid melee + AddBehaviour( "+EVACAOE", 80 ); //evac AOEs + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 20 ); //regroup + AddBehaviour( "+FEATENHANCE", 10 ); //enhance self via feats + AddBehaviour( "+CENTRALEYE", 10 ); //beholder antimagic cone + AddBehaviour( "+EYERAYS", 100 ); //beholder eye rays + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_clr.nss b/_module/nss/no_spn_clr.nss new file mode 100644 index 00000000..6f53b40e --- /dev/null +++ b/_module/nss/no_spn_clr.nss @@ -0,0 +1,157 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); + AddBehaviour( "+REGROUP", 80 ); + AddBehaviour( "+FLANK", 20 ); + AddBehaviour( "+SUMMON", 40 ); + AddBehaviour( "+RAISE", 60 ); + AddBehaviour( "+GROUPHEAL", 60 ); + AddBehaviour( "+HELP", 60 ); + AddBehaviour( "+HEAL", 60 ); + AddBehaviour( "+VIS", 60 ); + AddBehaviour( "+DEFSELF", 40 ); + AddBehaviour( "+DEFSING", 40 ); + AddBehaviour( "+GROUPENHANCE", 40 ); + AddBehaviour( "+ENHANCESING", 40 ); + AddBehaviour( "+ENHANCESELF", 40 ); + AddBehaviour( "+FEATENHANCE", 40 ); + AddBehaviour( "+DISPEL", 40 ); + AddBehaviour( "+DISPELAOE", 40 ); + AddBehaviour( "+DISMISSAL", 40 ); + AddBehaviour( "+TURN", 40 ); + AddBehaviour( "+AREA", 40 ); + AddBehaviour( "+DIRECT", 40 ); + AddBehaviour( "+TOUCH", 40 ); + AddBehaviour( "+EVACAOE", 50 ); + AddBehaviour( "+ATKMELEE", 100 ); + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + /* + if ( GetRacialType( OBJECT_SELF ) != RACIAL_TYPE_UNDEAD && GetStringLeft( GetTag( OBJECT_SELF ), 6 ) != "NO_AI_" && + GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, OBJECT_SELF ) ) != "Gargoyle Properties" ) + { + //not summoned, not undead, default decay time + SetIsDestroyable( FALSE, TRUE, TRUE ); + SetLocalFloat( OBJECT_SELF, "#DECAYDELAY", 60.0 ); //default corpse decay time + } + */ + + /* + SetListening( OBJECT_SELF, TRUE ); + SetListenPattern( OBJECT_SELF, "BC_DEAD", 691 ); + SetListenPattern( OBJECT_SELF, "BC_FIGHTING", 699 ); + */ + + if ( GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, OBJECT_SELF ) ) == "Balor Properties" ) + { + SetLocalInt( OBJECT_SELF, "BALORDEATH", 1 ); + } + + if ( GetRacialType( OBJECT_SELF ) == RACIAL_TYPE_DRAGON ) + { + SetLocalInt( OBJECT_SELF, "FLIER", 1 ); + } + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + GenerateNPCTreasure(); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_fiend.nss b/_module/nss/no_spn_fiend.nss new file mode 100644 index 00000000..ac32fafc --- /dev/null +++ b/_module/nss/no_spn_fiend.nss @@ -0,0 +1,135 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 10 ); //flank + AddBehaviour( "+AVOIDMELEE", 10 ); //avoid melee + AddBehaviour( "+EVACAOE", 20 ); //evac AOEs + AddBehaviour( "+SUMMON", 20 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 10 ); //defend single + AddBehaviour( "+DEFSELF", 10 ); //defend self + AddBehaviour( "+GROUPENHANCE", 10 ); //enhance group + AddBehaviour( "+ENHANCESING", 10 ); //enhance single + AddBehaviour( "+ENHANCESELF", 10 ); //enhance self + AddBehaviour( "+FEATENHANCE", 10 ); //enhance self via feats + AddBehaviour( "+DISPEL", 10 ); //dispel single + AddBehaviour( "+DISPELAOE", 10 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 10 ); //dismiss summons + AddBehaviour( "+BREACH", 10 ); //breach + AddBehaviour( "+TIMESTOP", 10 ); //time stop + AddBehaviour( "+AREA", 25 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + //AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_ftr.nss b/_module/nss/no_spn_ftr.nss new file mode 100644 index 00000000..43e65e73 --- /dev/null +++ b/_module/nss/no_spn_ftr.nss @@ -0,0 +1,121 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+FEATENHANCE", 80 ); //enhance self via feats + AddBehaviour( "+REGROUP", 80 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+MELEEASSIST", 100 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_melcast1.nss b/_module/nss/no_spn_melcast1.nss new file mode 100644 index 00000000..6118b1ff --- /dev/null +++ b/_module/nss/no_spn_melcast1.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 20 ); //defend single + AddBehaviour( "+DEFSELF", 20 ); //defend self + AddBehaviour( "+GROUPENHANCE", 20 ); //enhance group + AddBehaviour( "+ENHANCESING", 20 ); //enhance single + AddBehaviour( "+ENHANCESELF", 20 ); //enhance self + AddBehaviour( "+FEATENHANCE", 20 ); //enhance self via feats + //AddBehaviour( "+DISPEL", 40 ); //dispel single + //AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 20 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_melcast2.nss b/_module/nss/no_spn_melcast2.nss new file mode 100644 index 00000000..f776a555 --- /dev/null +++ b/_module/nss/no_spn_melcast2.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 20 ); //defend single + AddBehaviour( "+DEFSELF", 20 ); //defend self + AddBehaviour( "+GROUPENHANCE", 20 ); //enhance group + AddBehaviour( "+ENHANCESING", 20 ); //enhance single + AddBehaviour( "+ENHANCESELF", 20 ); //enhance self + AddBehaviour( "+FEATENHANCE", 20 ); //enhance self via feats + AddBehaviour( "+DISPEL", 20 ); //dispel single + AddBehaviour( "+DISPELAOE", 20 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 20 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_melcast3.nss b/_module/nss/no_spn_melcast3.nss new file mode 100644 index 00000000..0abc91b9 --- /dev/null +++ b/_module/nss/no_spn_melcast3.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 20 ); //defend single + AddBehaviour( "+DEFSELF", 20 ); //defend self + AddBehaviour( "+GROUPENHANCE", 20 ); //enhance group + AddBehaviour( "+ENHANCESING", 20 ); //enhance single + AddBehaviour( "+ENHANCESELF", 20 ); //enhance self + AddBehaviour( "+FEATENHANCE", 20 ); //enhance self via feats + AddBehaviour( "+DISPEL", 20 ); //dispel single + AddBehaviour( "+DISPELAOE", 20 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 20 ); //dismiss summons + AddBehaviour( "+BREACH", 20 ); //breach + AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 20 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_melenh.nss b/_module/nss/no_spn_melenh.nss new file mode 100644 index 00000000..5c6d9248 --- /dev/null +++ b/_module/nss/no_spn_melenh.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + //AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 40 ); //defend single + AddBehaviour( "+DEFSELF", 40 ); //defend self + AddBehaviour( "+GROUPENHANCE", 40 ); //enhance group + AddBehaviour( "+ENHANCESING", 40 ); //enhance single + AddBehaviour( "+ENHANCESELF", 40 ); //enhance self + AddBehaviour( "+FEATENHANCE", 40 ); //enhance self via feats + //AddBehaviour( "+DISPEL", 40 ); //dispel single + //AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + //AddBehaviour( "+AREA", 80 ); //area attack spells + //AddBehaviour( "+BREATH", 40 ); //area attack spells + //AddBehaviour( "+DIRECT", 80 ); //direct attack spells + //AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rftr.nss b/_module/nss/no_spn_rftr.nss new file mode 100644 index 00000000..c9e8833c --- /dev/null +++ b/_module/nss/no_spn_rftr.nss @@ -0,0 +1,121 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+FEATENHANCE", 80 ); //enhance self via feats + AddBehaviour( "+REGROUP", 80 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+MELEEASSIST", 100 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rftrcast1.nss b/_module/nss/no_spn_rftrcast1.nss new file mode 100644 index 00000000..416f051c --- /dev/null +++ b/_module/nss/no_spn_rftrcast1.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 40 ); //defend single + AddBehaviour( "+DEFSELF", 40 ); //defend self + AddBehaviour( "+GROUPENHANCE", 40 ); //enhance group + AddBehaviour( "+ENHANCESING", 40 ); //enhance single + AddBehaviour( "+ENHANCESELF", 40 ); //enhance self + AddBehaviour( "+FEATENHANCE", 40 ); //enhance self via feats + //AddBehaviour( "+DISPEL", 40 ); //dispel single + //AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 80 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 80 ); //direct attack spells + AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rngcast3.nss b/_module/nss/no_spn_rngcast3.nss new file mode 100644 index 00000000..1e4e36f2 --- /dev/null +++ b/_module/nss/no_spn_rngcast3.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+AVOIDMELEE", 80 ); //avoid melee + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 20 ); //defend single + AddBehaviour( "+DEFSELF", 20 ); //defend self + AddBehaviour( "+GROUPENHANCE", 20 ); //enhance group + AddBehaviour( "+ENHANCESING", 20 ); //enhance single + AddBehaviour( "+ENHANCESELF", 20 ); //enhance self + AddBehaviour( "+FEATENHANCE", 20 ); //enhance self via feats + AddBehaviour( "+DISPEL", 20 ); //dispel single + AddBehaviour( "+DISPELAOE", 20 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 20 ); //dismiss summons + AddBehaviour( "+BREACH", 20 ); //breach + AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 20 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + //AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rog.nss b/_module/nss/no_spn_rog.nss new file mode 100644 index 00000000..425b32f9 --- /dev/null +++ b/_module/nss/no_spn_rog.nss @@ -0,0 +1,122 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+FEATENHANCE", 80 ); //enhance self via feats + AddBehaviour( "+REGROUP", 80 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+AREA", 60 ); //area attack spells + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+MELEEASSIST", 100 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rogcast1.nss b/_module/nss/no_spn_rogcast1.nss new file mode 100644 index 00000000..f3b9a02d --- /dev/null +++ b/_module/nss/no_spn_rogcast1.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 40 ); //defend single + AddBehaviour( "+DEFSELF", 40 ); //defend self + AddBehaviour( "+GROUPENHANCE", 40 ); //enhance group + AddBehaviour( "+ENHANCESING", 40 ); //enhance single + AddBehaviour( "+ENHANCESELF", 40 ); //enhance self + AddBehaviour( "+FEATENHANCE", 40 ); //enhance self via feats + //AddBehaviour( "+DISPEL", 40 ); //dispel single + //AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 80 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 80 ); //direct attack spells + AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rogcast3.nss b/_module/nss/no_spn_rogcast3.nss new file mode 100644 index 00000000..a2c9f63f --- /dev/null +++ b/_module/nss/no_spn_rogcast3.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 20 ); //defend single + AddBehaviour( "+DEFSELF", 20 ); //defend self + AddBehaviour( "+GROUPENHANCE", 20 ); //enhance group + AddBehaviour( "+ENHANCESING", 20 ); //enhance single + AddBehaviour( "+ENHANCESELF", 20 ); //enhance self + AddBehaviour( "+FEATENHANCE", 20 ); //enhance self via feats + AddBehaviour( "+DISPEL", 20 ); //dispel single + AddBehaviour( "+DISPELAOE", 20 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 20 ); //dismiss summons + AddBehaviour( "+BREACH", 20 ); //breach + AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 20 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 20 ); //direct attack spells + AddBehaviour( "+TOUCH", 20 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_rogenh.nss b/_module/nss/no_spn_rogenh.nss new file mode 100644 index 00000000..4f5e0459 --- /dev/null +++ b/_module/nss/no_spn_rogenh.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + //AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + //AddBehaviour( "+SUMMON", 60 ); //summon spells + //AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 40 ); //defend single + AddBehaviour( "+DEFSELF", 40 ); //defend self + AddBehaviour( "+GROUPENHANCE", 40 ); //enhance group + AddBehaviour( "+ENHANCESING", 40 ); //enhance single + AddBehaviour( "+ENHANCESELF", 40 ); //enhance self + AddBehaviour( "+FEATENHANCE", 40 ); //enhance self via feats + //AddBehaviour( "+DISPEL", 40 ); //dispel single + //AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + //AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + //AddBehaviour( "+BREACH", 40 ); //breach + //AddBehaviour( "+TIMESTOP", 20 ); //time stop + //AddBehaviour( "+AREA", 80 ); //area attack spells + //AddBehaviour( "+BREATH", 40 ); //area attack spells + //AddBehaviour( "+DIRECT", 80 ); //direct attack spells + //AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + //AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creatureed Event 1007 +} diff --git a/_module/nss/no_spn_rogtel.nss b/_module/nss/no_spn_rogtel.nss new file mode 100644 index 00000000..011bc2b6 --- /dev/null +++ b/_module/nss/no_spn_rogtel.nss @@ -0,0 +1,125 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+FEATENHANCE", 80 ); //enhance self via feats + AddBehaviour( "+REGROUP", 80 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+AREA", 60 ); //area attack spells + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+MELEEASSIST", 100 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //flag as a teleport capable creature + SetIsTeleporter(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_summ.nss b/_module/nss/no_spn_summ.nss new file mode 100644 index 00000000..90be919a --- /dev/null +++ b/_module/nss/no_spn_summ.nss @@ -0,0 +1,136 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 40 ); //regroup + AddBehaviour( "+FLANK", 20 ); //flank + AddBehaviour( "+AVOIDMELEE", 20 ); //avoid melee + AddBehaviour( "+EVACAOE", 50 ); //evac AOEs + AddBehaviour( "+SUMMON", 60 ); //summon spells + AddBehaviour( "+HELP", 40 ); //help + AddBehaviour( "+VIS", 40 ); //vision + AddBehaviour( "+DEFSING", 40 ); //defend single + AddBehaviour( "+DEFSELF", 40 ); //defend self + AddBehaviour( "+GROUPENHANCE", 40 ); //enhance group + AddBehaviour( "+ENHANCESING", 40 ); //enhance single + AddBehaviour( "+ENHANCESELF", 40 ); //enhance self + AddBehaviour( "+FEATENHANCE", 40 ); //enhance self via feats + AddBehaviour( "+DISPEL", 40 ); //dispel single + AddBehaviour( "+DISPELAOE", 40 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 40 ); //dismiss summons + AddBehaviour( "+BREACH", 40 ); //breach + AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 80 ); //area attack spells + AddBehaviour( "+BREATH", 40 ); //area attack spells + AddBehaviour( "+DIRECT", 80 ); //direct attack spells + AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+MELEEASSIST", 50 ); //assist allies in melee + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + AddBehaviour( "+ATKMELEE", 100 ); //melee attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/no_spn_wiz.nss b/_module/nss/no_spn_wiz.nss new file mode 100644 index 00000000..141e8e6e --- /dev/null +++ b/_module/nss/no_spn_wiz.nss @@ -0,0 +1,135 @@ +//:://///////////////////////////////////////////// +//:: On Spawn In +//:: +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just been spawned in +*/ +//::////////////////////////////////////////////// + +#include "no_lib_data" +#include "no_inc" +#include "nw_o2_coninclude" +#include "x0_i0_treasure" + +void main() +{ + //Behaviour config + AddBehaviour( "+AVOIDMELEE", 50 ); //avoid melee + AddBehaviour( "+EVACAOE", 80 ); //evac AOEs + AddBehaviour( "+HEALSELF", 100 ); //heal self + AddBehaviour( "+REGROUP", 20 ); //regroup + AddBehaviour( "+SUMMON", 50 ); //summon spells + AddBehaviour( "+HELP", 50 ); //help + AddBehaviour( "+VIS", 50 ); //vision + AddBehaviour( "+DEFSELF", 10 ); //defend self + AddBehaviour( "+DEFSING", 5 ); //defend single + AddBehaviour( "+ENHANCESELF", 10 ); //enhance self + AddBehaviour( "+GROUPENHANCE", 5 ); //enhance group + AddBehaviour( "+ENHANCESING", 5 ); //enhance single + AddBehaviour( "+FEATENHANCE", 10 ); //enhance self via feats + AddBehaviour( "+DISPEL", 10 ); //dispel single + AddBehaviour( "+DISPELAOE", 10 ); //dispel AOEs + AddBehaviour( "+DISMISSAL", 10 ); //dismiss summons + AddBehaviour( "+BREACH", 10 ); //breach + AddBehaviour( "+TIMESTOP", 20 ); //time stop + AddBehaviour( "+AREA", 80 ); //area attack spells + AddBehaviour( "+DIRECT", 80 ); //direct attack spells + AddBehaviour( "+TOUCH", 80 ); //touch attack spells + AddBehaviour( "+ATKRANGED", 100 ); //ranged attack + + //Other config + //Corpse decay set up and exclusions + SetCorpseDelay(); + + //Set whether the creature can use EffectDisappearAppear when moving + SetIsFlier(); + + if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) ) + { + //I am probably a summoned creature, possibly a henchman + SetAssociateListenPatterns(); + } + + //set voice chat config + SetVoiceChat( NO_VC_DEFAULT, 10 ); + + //configure perception ranges + SetPerceptionRanges(); + + //set response range for fighting broadcast + SetResponseRange( BC_FIGHTING, 50.0 ); + + //tell creature it is ready to act + //SetReadyStatus(); + + //set fastbuffer status, should always be left on + SetIsFastBuffer( TRUE ); + //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 ); + //SetLocalInt( OBJECT_SELF, "#ACTIVE", 1 ); + + //log starting location + ExecuteScript( "no_scr_logspnloc", OBJECT_SELF ); + + //log loaded melee weapons + ExecuteScript( "no_scr_logeq", OBJECT_SELF ); + + // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + // This will set the listening pattern on the NPC to attack when allies call + //SetSpawnInCondition(NW_FLAG_STEALTH); + // If the NPC has stealth and they are a rogue go into stealth mode + //SetSpawnInCondition(NW_FLAG_SEARCH); + // If the NPC has Search go into Search Mode + //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); + // This will set the NPC to give a warning to non-enemies before attacking + + //SetSpawnInCondition(NW_FLAG_SLEEP); + //Creatures that spawn in during the night will be asleep. + //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); + //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); + //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); + SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); + // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); + // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + //This will play Ambient Animations until the NPC sees an enemy or is cleared. + //NOTE that these animations will play automatically for Encounter Creatures. + + // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. + //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) + //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) + //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) + + // CUSTOM USER DEFINED EVENTS + /* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 + */ + //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 + + SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) + // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them + // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after + // combat. + CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); //* Use this to create a small amount of treasure on the creature +} diff --git a/_module/nss/nw_c2_default1.nss b/_module/nss/nw_c2_default1.nss deleted file mode 100644 index e32ef925..00000000 --- a/_module/nss/nw_c2_default1.nss +++ /dev/null @@ -1,114 +0,0 @@ -/*/////////////////////// [On Heartbeat] /////////////////////////////////////// - Filename: nw_c2_default1 or J_AI_OnHeartbeat -///////////////////////// [On Heartbeat] /////////////////////////////////////// - Removed stupid stuff, special behaviour, sleep. - - Also, note please, I removed waypoints and day/night posting from this. - It can be re-added if you like, but it does reduce heartbeats. - - Added in better checks to see if we should fire this script. Stops early if - some conditions (like we can't move, low AI settings) are set. - - Hint: If nothing is used within this script, either remove it from creatures - or create one witch is blank, with just a "void main(){}" at the top. - - Hint 2: You could add this very small file to your catche of scripts in the - module properties, as it runs on every creature every 6 seconds (ow!) - - This also uses a system of Execute Script :-D This means the heartbeat, when - compiled, should be very tiny. - - Note: NO Debug strings! - Note 2: Remember, I use default SoU Animations/normal animations. As it is - executed, we can check the prerequisists here, and then do it VIA - execute script. - - -Working- Best possible, fast compile. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added more "buffs" to fast buff. - - Fixed animations (they both WORK and looping ones do loop right!) - - Loot behaviour! - - Randomly moving nearer a PC in 25M if set. - - Removed silly day/night optional setting. Anything we can remove, is a good idea. - 1.4 - Removed AI level setting. Not good to use, I mistakenly added it. -///////////////////////// [Workings] /////////////////////////////////////////// - This fires off every 6 seconds (with PCs in the area, or AI_LEVEL_HIGH without) - and therefore is intensive. - - It fires of ExecutesScript things for the different parts - saves CPU stuff - if the bits are not used. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: Basically, none. Nothing activates this script. Fires every 6 seconds. -///////////////////////// [On Heartbeat] /////////////////////////////////////*/ - -// - This includes J_Inc_Constants -#include "J_INC_HEARTBEAT" - -void main() -{ - // Special - Runner from the leader shouts, each heartbeat, to others to get thier - // attention that they are being attacked. - // - Includes fleeing making sure (so it resets the ActionMoveTo each 6 seconds - - // this is not too bad) - // - Includes door bashing stop heartbeat - if(PerformSpecialAction()) return; - - // Pre-heartbeat-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, EVENT_HEARTBEAT_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff() || GetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER)) return; - - // Define the enemy and player to use. - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); - - // We can skip to the end if we are in combat, or something... - if(!JumpOutOfHeartBeat() && // We don't stop due to effects. - !GetIsInCombat() && // We are not in combat. - !GetIsObjectValid(GetAttackTarget()) && // Second combat check. - !GetObjectSeen(oEnemy)) // Nearest enemy is not seen. - { - // Fast buffing...if we have the spawn in condition... - if(GetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER) && - GetIsObjectValid(oEnemy) && GetDistanceToObject(oEnemy) <= 40.0) - { - // ...we may do an advanced buff. If we cannot see/hear oEnemy, but oEnemy - // is within 40M, we cast many defensive spells instantly... - ExecuteScript(FILE_HEARTBEAT_TALENT_BUFF, OBJECT_SELF); - //...if TRUE (IE it does something) we turn of future calls. - DeleteSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // This MUST STOP the heartbeat event - else, the actions may be interrupted. - return; - } - // Execute waypoints file if we have waypoints set up. - if(GetWalkCondition(NW_WALK_FLAG_CONSTANT)) - { - ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF); - } - // We can't have any waypoints for the other things - else - { - // We must have animations set, and not be "paused", so doing a - // longer looping one - // - Need a valid player. - if(GetIsObjectValid(oPlayer) && !IsInConversation(OBJECT_SELF)) - { - // We may search for PC enemies, 25% chance to move closer to PC's - if(GetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER) && - !GetLocalTimer(AI_TIMER_SEARCHING) && d4() == 1) - { - ExecuteScript(FILE_HEARTBEAT_WALK_TO_PC, OBJECT_SELF); - } - // Else, Do we have any animations to speak of? - // If we have a nearby PC, we do animations. - else if(GetHasValidAnimations()) - { - ExecuteScript(FILE_HEARTBEAT_ANIMATIONS, OBJECT_SELF); - } - } - } - } - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_HEARTBEAT_EVENT, EVENT_HEARTBEAT_EVENT); -} diff --git a/_module/nss/nw_c2_default2.nss b/_module/nss/nw_c2_default2.nss deleted file mode 100644 index a83c618e..00000000 --- a/_module/nss/nw_c2_default2.nss +++ /dev/null @@ -1,225 +0,0 @@ -/*/////////////////////// [On Percieve] //////////////////////////////////////// - Filename: J_AI_OnPercieve or nw_c2_default2 -///////////////////////// [On Percieve] //////////////////////////////////////// - If the target is an enemy, attack - Will determine combat round on that person, is an enemy, basically. - Includes shouting for a big radius - if the spawn in condition is set to this. - - NOTE: Debug strings in this file will be uncommented for speed by default. - - It is one of the most intensive scripts as it runs so often. - - Attempted to optimise as much as possible. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - We include j_inc_other_ai to initiate combat (or go into combat again) - - j_inc_other_ai holds all other needed functions/integers ETC. - - Turn off hide things. - - Added "Only attack if attacked" - - Removed special conversation things. Almost no one uses them, and the taunt system is easier. - - Should now search around if they move to a dead body, and only once they get there. - 1.4 - TO DO: - - 1. Perception needs checking - attacking outside perception ranges! - 2. Vanishing targets, etc. test, improve. - 3. Problems with dispelling invisibility. Maybe either do change the line to create placable, or, of course, cast at location (dispells cannot be metamagiked or whatever) Source - 4. No Effect Type Ethereal. Source -///////////////////////// [Workings] /////////////////////////////////////////// - It fires: - - - When a creature enters it perception range (Set in creature properties) and - is seen or heard. - * Tests show (and in general) it fires HEARD first, then immediantly SEEN if, - of course, they are visible. Odd really, but true. - - When a creature uses invisiblity/leaves the area in the creatures perception - range - - When a creature appears suddenly, already in the perception range (not - the other way round, normally) - - When a creature moves out of the creatures perception range, and therefore - becomes unseen. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastPerceived, GetLastPerceptionSeen, GetLastPerceptionHeard, - GetLastPerceptionVanished, GetLastPerceptionInaudible. -///////////////////////// [On Percieve] //////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-percieve-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, EVENT_PERCIEVE_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - -//:: Skip commoners unless the are beign attacked - string sCommoner = GetTag(OBJECT_SELF); - - if (!GetIsInCombat() && FindSubString(sCommoner, "NPC_COM_")) return; - - // Declare main things. - // - We declare OUTSIDE if's JUST IN CASE! - object oPerceived = GetLastPerceived(); - object oAttackTarget = GetAttackTarget(); - // 1.4: Very rarely is our attack target valid, so we will set it to - // what we would have melee attacked when DCR was called. - if(GetIgnoreNoFriend(oAttackTarget) || oAttackTarget == OBJECT_SELF) - { - oAttackTarget = GetAIObject(AI_LAST_MELEE_TARGET); - } - int bSeen = GetLastPerceptionSeen(); - int bHeard = GetLastPerceptionHeard(); - int bVanished = GetLastPerceptionVanished(); - int bInaudiable = GetLastPerceptionInaudible(); - - // Debug - DebugActionSpeak("*** PER ***: " + GetName(oPerceived) + "| SEEN: " + IntToString(bSeen) + - "| HEARD: " + IntToString(bHeard) + "| VANISHED: " + IntToString(bVanished) + - "| INAUDIABLE: " + IntToString(bInaudiable)); - - // Need to be valid and not ignorable. - if(GetIsObjectValid(oPerceived) && - !GetIsDM(oPerceived) && - !GetIgnore(oPerceived)) - { - // First, easy enemy checks. - if(GetIsEnemy(oPerceived) && !GetFactionEqual(oPerceived)) - { - DebugActionSpeak("*** PER *** ENEMY"); - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oPerceived); - - // Well, are we both inaudible and vanished? - // * the GetLastPerception should only say what specific event has fired! - if(bVanished || bInaudiable) - { - DebugActionSpeak("*** PER *** VANISHED OR INAUDIBLE"); - // If they just became invisible because of the spell - // invisiblity, or improved invisiblity...we set a local object. - // - Beta: Added in ethereal as well. - if(GetHasEffect(EFFECT_TYPE_INVISIBILITY, oPerceived) || - GetHasEffect(EFFECT_TYPE_SANCTUARY, oPerceived) || - GetStealthMode(oPerceived) == STEALTH_MODE_ACTIVATED) - { - // Set object, AND the location they went invisible! - SetAIObject(AI_LAST_TO_GO_INVISIBLE, oPerceived); - // We also set thier location for AOE dispelling - same name - SetAILocation(AI_LAST_TO_GO_INVISIBLE, GetLocation(oPerceived)); - } - - // If they were our target, follow! >:-D - // - Optional, on spawn option, for following through areas. - if(oAttackTarget == oPerceived) - { - DebugActionSpeak("*** PER *** VANISHED OR INAUDIBLE AND IS CURRENT TARGET"); - // This means they have exited the area! follow! - if(GetArea(oPerceived) != GetArea(OBJECT_SELF)) - { - ClearAllActions(); - // 51: "[Perception] Our Enemy Target changed areas. Stopping, moving too...and attack... [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(51, oPerceived); - // Call to stop silly moving to enemies if we are fleeing - ActionMoveToEnemy(oPerceived); - } - // - Added check for not casting a spell. If we are, we finnish - // (EG: AOE spell) and automatically carry on. - // 1.4: If we are using a targetted spell, we do cancle our - // spellcasting if it is them. - else if(GetCurrentAction() != ACTION_CASTSPELL || - GetAttackTarget() == oPerceived) - { - ClearAllActions(); - // 52: "[Perception] Enemy Vanished (Same area) Retargeting/Searching [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(52, oPerceived); - DetermineCombatRound(oPerceived); - } - } - }// End if just gone out of perception - // ELSE they have been SEEN or HEARD. We don't check specifics. - else //if(bSeen || bHeard) - { - // If they have been made seen, and they are our attack target, - // we must re-do combat round - unless we are casting a spell. - if(bSeen && GetCurrentAction() != ACTION_CASTSPELL && - (oAttackTarget == oPerceived || !GetObjectSeen(oAttackTarget))) - { - // 53: "[Perception] Enemy seen, and was old enemy/cannot see current. Re-evaluating (no spell) [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(53, oPerceived); - DetermineCombatRound(oPerceived); - - // Shout to allies to attack oPerceived - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - // Else We check if we are already attacking. - else if(!CannotPerformCombatRound() && - !GetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER)) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Special shout, d1000 though! - SpeakArrayString(AI_TALK_ON_PERCIEVE_ENEMY, TRUE); - } - - // Stop stuff because of facing point - New enemy - HideOrClear(); - - // Get all allies in 60M to come to thier aid. Talkvolume silent - // shout does not seem to work well. - // - void function. Checks for the spawn int. in it. - // - Turns it off in it too (5 minutes - 1.4) - // - Variable range On Spawn - ShoutBossShout(oPerceived); - - // 54: "[Perception] Enemy Seen. Not in combat, attacking. [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(54, oPerceived); - - // 1.4 change: SetFacingPoint(GetPosition(oPerceived)); - // Is now part of DetermineCombatRound(). - // * This means other events will work similarily. - DetermineCombatRound(oPerceived); - - // Warn others - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - } - } - // Else, they are an equal faction, or not an enemy (or both) - else - { - // If they are dead, or fighting, eg: we saw something on - // waypoints, we charge in to investigate. - // * Higher intelligence will buff somewhat as well! - if((GetIsDead(oPerceived) || GetIsInCombat(oPerceived)) && - (bSeen || bHeard)) - { - if(GetIsDead(oPerceived)) - { - // 55: "[Perception] Percieved Dead Friend! Moving into investigate [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(55, oPerceived); - } - else - { - // 56: "[Perception] Percieved Alive Fighting Friend! Moving to and attacking. [Percieved] " + GetName(oPerceived) - DebugActionSpeakByInt(56, oPerceived); - } - // Check if we can attack - if(!CannotPerformCombatRound()) - { - // Hide or clear actions - HideOrClear(); - - // If we were called to arms, react - CallToArmsResponse(oPerceived); - } - else - { - // Warn others even if we don't, or cannot, attack - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - } - } - - // Fire End of Percieve event - FireUserEvent(AI_FLAG_UDE_PERCIEVE_EVENT, EVENT_PERCIEVE_EVENT); -} diff --git a/_module/nss/nw_c2_default3.nss b/_module/nss/nw_c2_default3.nss deleted file mode 100644 index 49589ab5..00000000 --- a/_module/nss/nw_c2_default3.nss +++ /dev/null @@ -1,37 +0,0 @@ -/*/////////////////////// [On Combat Round End] //////////////////////////////// - Filename: nw_c2_default3 or J_AI_OnCombatrou -///////////////////////// [On Combat Round End] //////////////////////////////// - This is run every 3 or 6 seconds, if the creature is in combat. It is - executed only in combat automatically. - - It runs what the AI should do, bascially. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Executes same script as the other parts of the AI to cuase a new action - 1.4 - -///////////////////////// [Workings] /////////////////////////////////////////// - Calls the combat AI file using the J_INC_OTHER_AI include function, - DetermineCombatRound. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetAttackTarget, GetLastHostileActor, GetAttemptedAttackTarget, - GetAttemptedSpellTarget (Or these are useful at least!) -///////////////////////// [On Combat Round End] //////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-combat-round-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, EVENT_END_COMBAT_ROUND_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // It is our normal call (every 3 or 6 seconds, when we can change actions) - // so no need to delete, and we fire the UDE's. - - // Determine combat round against an invalid target (as default) - DetermineCombatRound(); - - // Fire End of end combat round event - FireUserEvent(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, EVENT_END_COMBAT_ROUND_EVENT); -} diff --git a/_module/nss/nw_c2_default4.nss b/_module/nss/nw_c2_default4.nss deleted file mode 100644 index d1ef2e5f..00000000 --- a/_module/nss/nw_c2_default4.nss +++ /dev/null @@ -1,160 +0,0 @@ -/*/////////////////////// [On Conversation] //////////////////////////////////// - Filename: J_AI_OnConversat or nw_c2_default4 -///////////////////////// [On Conversation] //////////////////////////////////// - OnConversation/ Listen to shouts. - Documented, and checked. -Working- - - Added spawn in condition - Never clear actions when talking. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in conversation thing - IE we can set speakstrings, no need for conversation file. - - Sorted more shouts out. - - Should work right, and not cause too many actions (as we ignore - shouts for normally 12 or so seconds before letting them affect us again). - 1.4 - Deafness incorpreated. -///////////////////////// [Workings] /////////////////////////////////////////// - Uses RespondToShout to react to allies' shouts, and just attacks any enemy - who speaks, or at least moves to them. (OK, dumb if they are invisible, but - oh well, they shouldn't talk so loud!) - - Remember, whispers are never heard if too far away, speakstrings don't go - through walls, and shouts are always heard (so we don't go off to anyone - not in our area, remember) - - Deafness causes us to never hear battle, so unless we see the target speaking - we do not react. Doesn't apply to normal conversations - although if we cannot - talk (also restricted by deafness) then so be it. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetListenPatternNumber, GetLastSpeaker, TestStringAgainstPattern, - GetMatchedSubstring -///////////////////////// [On Conversation] //////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-conversation-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, EVENT_ON_DIALOGUE_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Declarations - int nMatch = GetListenPatternNumber(); - object oShouter = GetLastSpeaker(); - string sSpoken = GetMatchedSubstring(0); - - // We can ignore everything under special cases - EG no valid shouter, - // we are fleeing, its us, or we are not in the same area. - // - We break out of the script if this happens. - if(!GetIsObjectValid(oShouter) || /* Must be a valid speaker! */ - oShouter == OBJECT_SELF || /* Not us! */ - GetIsPerformingSpecialAction() || /* Not fleeing */ - GetIgnore(oShouter) || /* Not ignoring the shouter */ - GetArea(oShouter) != GetArea(OBJECT_SELF))/* Same area (Stops loud yellow shouts getting NPCs) */ - { - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); - return; - } - - // Conversation if not a shout. - if(nMatch == -1) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Make sure it is a PC and we are not fighting. - if(!GetIsFighting() && (GetIsPC(oShouter) || GetIsDMPossessed(oShouter))) - { - // If we have something random (or not) to say instead of - // the conversation, we will say that. - if(GetLocalInt(OBJECT_SELF, ARRAY_SIZE + AI_TALK_ON_CONVERSATION)) - { - ClearAllActions();// Stop - SetFacingPoint(GetPosition(oShouter));// Face - SpeakArrayString(AI_TALK_ON_CONVERSATION);// Speak string - PlayAnimation(ANIMATION_LOOPING_TALK_NORMAL, 1.0, 3.0);// "Talk", then resume potitions. - ActionDoCommand(ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF)); - } - else - { - // If we are set to NOT clear all actions, we won't. - if(!GetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER)) - { - ClearAllActions(); - } - BeginConversation(); - } - } - } - } - // If it is a valid shout...and a valid shouter. - // - Not a DM. Not ignoring shouting. Not a Debug String. - else if(!GetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID) &&// Not listening (IE heard already) - !GetIsDM(oShouter) && FindSubString(sSpoken, "[Debug]") == -1 && - // 1.4 - Deafness (or they are seen) check, for fun. - (!GetHasEffect(EFFECT_TYPE_DEAF) || GetObjectSeen(oShouter))) - { - if(GetIsFriend(oShouter) || GetFactionEqual(oShouter)) - { - // If they are a friend, not a PC, and a valid number, react. - // In the actual RespondToShout call, we do check to see if we bother. - // - Is PC - or is...master? - // - Shouts which are not negative, and not AI_ANYTHING_SAID_CONSTANT. - if(nMatch >= 0 && nMatch != AI_SHOUT_ANYTHING_SAID_CONSTANT && - !GetIsPC(oShouter) && !GetIsPC(GetMaster(oShouter))) - { - // Respond to the shout - RespondToShout(oShouter, nMatch); - } - // Else either is PC or is shout 0 (everything!) - // - not if we are in combat, or they are not. - else if(!CannotPerformCombatRound() && - GetIsInCombat(oShouter) && - GetObjectType(oShouter) == OBJECT_TYPE_CREATURE) - { - // 57: "[Shout] Friend (may be PC) in combat. Attacking! [Friend] " + GetName(oShouter) - DebugActionSpeakByInt(57, oShouter); - - // Respond to oShouter - IWasAttackedResponse(oShouter); - } - } - else if(GetIsEnemy(oShouter) && GetObjectType(oShouter) == OBJECT_TYPE_CREATURE) - { - // If we hear anything said by an enemy, and are not fighting, attack them! - if(!CannotPerformCombatRound()) - // the negatives are associate shouts, Normally (!) - // 0+ are my shouts. 0 is anything - { - // We make sure it isn't an emote (set by default) - if(nMatch == AI_SHOUT_ANYTHING_SAID_CONSTANT && - GetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER)) - { - // Jump out if its an emote - "*Nods*" - if(GetStringLeft(sSpoken, 1) == EMOTE_STAR && - GetStringRight(sSpoken, 1) == EMOTE_STAR) - { - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); - return; - } - } - // 58: "[Shout] Responding to shout [Enemy] " + GetName(oShouter) + " Who has spoken!" - DebugActionSpeakByInt(58, oShouter); - - // Short non-respond - SetLocalTimer(AI_TIMER_SHOUT_IGNORE_ANYTHING_SAID, 6.0); - - // Attack the enemy! - ClearAllActions(); - DetermineCombatRound(oShouter); - - // Shout to allies to attack the shouter - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - } - } - // Fire End of Dialogue event - FireUserEvent(AI_FLAG_UDE_ON_DIALOGUE_EVENT, EVENT_ON_DIALOGUE_EVENT); -} diff --git a/_module/nss/nw_c2_default5.nss b/_module/nss/nw_c2_default5.nss deleted file mode 100644 index d529a447..00000000 --- a/_module/nss/nw_c2_default5.nss +++ /dev/null @@ -1,136 +0,0 @@ -/*/////////////////////// [On Phisical Attacked] /////////////////////////////// - Filename: J_AI_OnPhiAttack or nw_c2_default5 -///////////////////////// [On Phisical Attacked] /////////////////////////////// - On Attacked - No checking for fleeing or warnings. - Very boring really! -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added hiding things - 1.4 - Missing Silent Shouts have been added. -///////////////////////// [Workings] /////////////////////////////////////////// - Got some simple Knockdown timer, so that we use heal sooner if we keep getting - a creature who is attempting to knock us down. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastAttacker, GetLastWeaponUsed, GetLastAttackMode, GetLastAttackType -///////////////////////// [On Phisical Attacked] /////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-attacked-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ATTACK_PRE_EVENT, EVENT_ATTACK_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Set up objects. - object oAttacker = GetLastAttacker(); - object oWeapon = GetLastWeaponUsed(oAttacker); - //int nMode = GetLastAttackMode(oAttacker); // Currently unused - int nAttackType = GetLastAttackType(oAttacker); - - // Check if they are valid, a DM, we are ignoring them, they are dead now, or invalid - if(!GetIgnoreNoFriend(oAttacker)) - { - // Adjust automatically if set. - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oAttacker)) - { - AdjustReputation(oAttacker, OBJECT_SELF, -100); - } - } - - // If we were attacked by knockdown, for a timer of X seconds, we make - // sure we attempt healing at a higher level. - if(!GetLocalTimer(AI_TIMER_KNOCKDOWN) && - (nAttackType == SPECIAL_ATTACK_IMPROVED_KNOCKDOWN || - nAttackType == SPECIAL_ATTACK_KNOCKDOWN) && - !GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_KNOCKDOWN) && - GetBaseAttackBonus(oAttacker) + 20 >= GetAC(OBJECT_SELF)) - { - SetLocalTimer(AI_TIMER_KNOCKDOWN, 30.0); - } - - // Set last hostile, valid attacker (Used in the On Damaged event) - SetAIObject(AI_STORED_LAST_ATTACKER, oAttacker); - - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Speak the phisically attacked string, if applicable. - // Speak the damaged string, if applicable. - SpeakArrayString(AI_TALK_ON_PHISICALLY_ATTACKED); - } - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oAttacker); - - // We set if we are attacked in HTH onto a low-delay timer. - // - Not currently used - /*if(!GetLocalTimer(AI_TIMER_ATTACKED_IN_HTH)) - { - // If the weapon is not ranged, or is not valid, set the timer. - if(!GetIsObjectValid(oWeapon) || - !GetWeaponRanged(oWeapon)) - { - SetLocalTimer(AI_TIMER_ATTACKED_IN_HTH, f18); - } - }*/ - - // If we are not fighting, and they are in the area, attack. Else, determine anyway. - if(!CannotPerformCombatRound()) - { - // Must be in our area to go after now. - if(GetArea(oAttacker) == GetArea(OBJECT_SELF)) - { - // 59: "[Phisically Attacked] Attacking back. [Attacker(enemy)] " + GetName(oAttacker) - DebugActionSpeakByInt(59, oAttacker); - - // Attack the attacker - DetermineCombatRound(oAttacker); - - // Shout to allies to attack the enemy who attacked me - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // 60: "[Phisically Attacked] Not same area. [Attacker(enemy)] " + GetName(oAttacker) - DebugActionSpeakByInt(60, oAttacker); - - // May find another hostile to attack... - DetermineCombatRound(); - } - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // Else, invalid, DM, ally, etc...must be prepared at least (could be - // they are charmed or something!) - else - { - // If we are not fighting, prepare for battle. Something bad must have - // happened. - if(!CannotPerformCombatRound()) - { - // Respond to oAttacker as if they shouted for help. - IWasAttackedResponse(oAttacker); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - - // Fire End of Attacked event - FireUserEvent(AI_FLAG_UDE_ATTACK_EVENT, EVENT_ATTACK_EVENT); -} diff --git a/_module/nss/nw_c2_default6.nss b/_module/nss/nw_c2_default6.nss deleted file mode 100644 index 596caa3e..00000000 --- a/_module/nss/nw_c2_default6.nss +++ /dev/null @@ -1,241 +0,0 @@ -/*/////////////////////// [On Damaged] ///////////////////////////////////////// - Filename: nw_c2_default6 or J_AI_OnDamaged -///////////////////////// [On Damaged] ///////////////////////////////////////// - We attack any damager if same area (and not already fighting - then search for enemies (defaults to searching if there are no enemies left). -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - If we have a damager, not equal faction, and not a DM... - - We set Max Elemental damage. - - Sets the highest damager and amount (if the new damager is seen/heard) - - Polymorph improved a little - - Hide check - - Morale penalty (if set) - 1.4 - Elemental damage fixed with bugfixed introduced in later patches. - - Moved things around, more documentation, a little more ordered. - - Added the missing silent shout strings to get allies to attack. - - Damaged taunting will not happen if we are dead. -///////////////////////// [Workings] /////////////////////////////////////////// - Now with fixes, we can correctly set physical damage done (and elemental - damage). - - Otherwise, this acts like a hositile spell, or a normal attack or pickpocket - attempt would - and attack the damn person who dares damage us! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetTotalDamageDealt, GetLastDamager, GetCurrentHitPoints (and max), - GetDamageDealtByType (must be done seperatly for each, doesn't count melee damage) -///////////////////////// [On Damaged] ///////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-damaged-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DAMAGED_PRE_EVENT, EVENT_DAMAGED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Define Objects/Integers. - int nDamage = GetTotalDamageDealt(); - object oDamager = GetLastDamager(); - // Check to see if we will polymorph. - int nPolymorph = GetAIConstant(AI_POLYMORPH_INTO); - - // Total up the physical damage - - // Polymorph check. - if(nPolymorph >= 0) - { - // We won't polymorph if already so - if(!GetHasEffect(EFFECT_TYPE_POLYMORPH)) - { - // Polymorph into the requested shape. Cannot be dispelled. - effect eShape = SupernaturalEffect(EffectPolymorph(nPolymorph)); - effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); - DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eShape, OBJECT_SELF)); - DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF)); - } - DeleteAIConstant(AI_POLYMORPH_INTO);// We set it to invalid (sets to 0). - } - // First, we check AOE spells... - if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT) - { - // Set the damage done by it (the last damage) - // Set to the tag of the AOE, prefixed AI style to be sure. - // - Note, doesn't matter about things like - if(nDamage > 0) - { - // Set it to object to string, which we will delete later anywho. - SetAIInteger(ObjectToString(oDamager), nDamage); - } - } - // Hostile attacker...but it doesn't matter (at the moment) if they even - // did damage. - // * GetIgnoreNoFriend() wrappers DM, Validity, Faction Equal and Dead checks in one - else if(!GetIgnoreNoFriend(oDamager)) - { - // Adjust automatically if set. (and not an AOE) - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oDamager) && !GetFactionEqual(oDamager)) - { - AdjustReputation(oDamager, OBJECT_SELF, -100); - } - } - - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oDamager); - - // Did they do damage to use? (IE: No DR) Some things are inapproprate - // to check if no damage was actually done. - if(nDamage > 0) - { - // Speak the damaged string, if applicable. - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - SpeakArrayString(AI_TALK_ON_DAMAGED); - } - // 1.4 note: These two variables are currently *unused* apart from - // healing. When healing a being (even another NPC) they are checked - // for massive damage. Can not bother to set the highest damager for now. - // NEW: - int nHighestDamage = GetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - if(nDamage >= nHighestDamage) - { - SetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT, nDamage); - } - - /* OLD: - - // Get the previous highest damager, and highest damage amount - object oHighestDamager = GetAIObject(AI_HIGHEST_DAMAGER); - int nHighestDamage = GetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - // Set the highest damager, if they are seen or heard, and have done loads. - if((GetObjectSeen(oDamager) || GetObjectHeard(oDamager)) && - nDamage >= nHighestDamage || !GetIsObjectValid(oHighestDamager)) - { - SetAIObject(AI_HIGHEST_DAMAGER, oDamager); - SetAIInteger(AI_HIGHEST_DAMAGE_AMOUNT, nDamage); - } - // Else, if the original was not valid...or not seen/heard, we - // delete it so we don't bother to use it later. - else if(!GetIsObjectValid(oHighestDamager) || - (!GetObjectSeen(oHighestDamager) && !GetObjectHeard(oHighestDamager))) - { - DeleteAIObject(AI_HIGHEST_DAMAGER); - DeleteAIInteger(AI_HIGHEST_DAMAGE_AMOUNT); - } - */ - - // Get all the physical damage. Elemental damage is then nDamage minus - // the physical damage. - int nPhysical = GetDamageDealtByType(DAMAGE_TYPE_BASE_WEAPON | - DAMAGE_TYPE_BLUDGEONING | - DAMAGE_TYPE_PIERCING | - DAMAGE_TYPE_SLASHING); - // If they are all -1, then we make nPhysical 0. - if(nPhysical <= -1) nPhysical = 0; - - // Physical damage - only sets if the last damager is the last attacker. - if(GetAIObject(AI_STORED_LAST_ATTACKER) == oDamager) - { - // Get the previous highest damage and test it - if(nPhysical > GetAIInteger(AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT)) - { - // If higher, and was a melee/ranged attacker, set it. - // This does include other additional physical damage - EG: - // weapon property: Bonus Damage. - SetAIInteger(AI_HIGHEST_PHISICAL_DAMAGE_AMOUNT, nPhysical); - } - } - - // Set the max elemental damage done, for better use of elemental - // protections. This is set for the most damage...so it could be - // 1 (for a +1 fire weapon, any number of hits) or over 50 (good - // fireball/flame storm etc.) - int nElemental = nDamage - nPhysical; - if(nElemental > GetAIInteger(MAX_ELEMENTAL_DAMAGE)) - { - SetAIInteger(MAX_ELEMENTAL_DAMAGE, nElemental); - } - // Set the last damage done, may set to 0 of course :-P - // * This is only set if they did damage us at all, however. - SetAIInteger(LAST_ELEMENTAL_DAMAGE, nElemental); - - // Morale: We may get a penalty if it does more than a cirtain amount of HP damage. - // Other: We set highest damager and amount. - if(!GetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER)) - { - // Get penalty and how much damage at once needs to be done - int nPenalty = GetBoundriedAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6, 50, 1); - int nToDamage = GetBoundriedAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6, GetMaxHitPoints(), 1); - if(nDamage > nToDamage) - { - // 61: "[Damaged] Morale Penalty for 600 seconds [Penalty]" + IntToString(iPenalty) - DebugActionSpeakByInt(61, OBJECT_INVALID, nPenalty); - // Apply penalty - SetMoralePenalty(nPenalty, 300.0); - } - } - } - // If we are not attacking anything, and not in combat, react! - if(!CannotPerformCombatRound()) - { - // 62: "[Damaged] Not in combat: DCR [Damager]" + GetName(oDamager) - DebugActionSpeakByInt(62, oDamager); - - // Check if they are in the same area. Can be a left AOE spell. - // Don't attack purposly across area's. - if(GetArea(oDamager) == GetArea(OBJECT_SELF)) - { - // Shout to allies to attack the enemy who attacked me - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - DetermineCombatRound(oDamager); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - DetermineCombatRound(); - } - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // Else it is friendly, or invalid damager - else - { - // Still will react - eg: A left AOE spell (which might mean a battle - // just happened) - if(!CannotPerformCombatRound()) - { - // Shout to allies to attack generally. No target to specifically attack, - // as it is an ally. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // 63: [Damaged] Not in combat: DCR. Ally hit us. [Damager(Ally?)]" + GetName(oDamager) - DebugActionSpeakByInt(63, oDamager); - DetermineCombatRound(); - } - else - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - // User defined event - for normally immoral creatures. - if(GetCurrentHitPoints() == 1) - { - // Fire the immortal damaged at 1 HP event. - FireUserEvent(AI_FLAG_UDE_DAMAGED_AT_1_HP, EVENT_DAMAGED_AT_1_HP); - } - // Fire End of Damaged event - FireUserEvent(AI_FLAG_UDE_DAMAGED_EVENT, EVENT_DAMAGED_EVENT); -} diff --git a/_module/nss/nw_c2_default7.nss b/_module/nss/nw_c2_default7.nss deleted file mode 100644 index c8fcf672..00000000 --- a/_module/nss/nw_c2_default7.nss +++ /dev/null @@ -1,164 +0,0 @@ -/*/////////////////////// [On Death] /////////////////////////////////////////// - Filename: J_AI_OnDeath or nw_c2_default7 -///////////////////////// [On Death] /////////////////////////////////////////// - Speeded up no end, when compiling, with seperate Include. - Cleans up all un-droppable items, all ints and all local things when destroyed. - - Check down near the bottom for a good place to add XP or corpse lines ;-) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in Turn of corpses toggle - - Added in appropriate space for XP awards, marked with ideas (effect death) - 1.4 - Removed the redudnant notes on the "You have gained 0 experience" message -///////////////////////// [Workings] /////////////////////////////////////////// - You can edit this for experience, there is a seperate section for it. - - It will use DeathCheck to execute a cleanup-and-destroy script, that removes - any coprse, named "j_ai_destroyself". -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastKiller. -///////////////////////// [On Death] /////////////////////////////////////////*/ - -// We only require the constants/debug file. We have 1 function, not worth another include. -#include "J_INC_CONSTANTS" - -// We need a wrapper. If the amount of deaths, got in this, is not equal to iDeaths, -// we don't execute the script, else we do. :-P -void DeathCheck(int nDeaths); - -void main() -{ - // If we are set to, don't fire this script at all - if(GetAIInteger(I_AM_TOTALLY_DEAD)) return; - - // Pre-death-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DEATH_PRE_EVENT, EVENT_DEATH_PRE_EVENT)) return; - - // Note: No AI on/off check here. - - // Who killed us? (alignment changing, debug, XP). - object oKiller = GetLastKiller(); - - // Stops if we just applied EffectDeath to ourselves. - if(GetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH)) return; - - // Special: To stop giving out multiple amounts of XP, we use EffectDeath - // to change the killer, so the XP systems will NOT award MORE XP. - // - Even the default one suffers from this! - if(GetAIInteger(WE_HAVE_DIED_ONCE)) - { - if(!GetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH)) - { - // Don't apply effect death to self more then once per 2 seconds. - SetLocalTimer(AI_TIMER_DEATH_EFFECT_DEATH, 2.0); - // This should make the last killer us. - ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF); - ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(GetMaxHitPoints()), OBJECT_SELF); - } - } - else if(oKiller != OBJECT_SELF) - { - // Set have died once, stops giving out mulitple amounts of XP. - SetAIInteger(WE_HAVE_DIED_ONCE, TRUE); - -/*/////////////////////// [Experience] ///////////////////////////////////////// - THIS is the place for it, below this comment. - - It is useful to use GetFirstFactionMember (and Next), GiveXPToCreature, - GetXP, SetXP, GetChallengeRating (of self) all are really useful. - - Bug note: GetFirstFactionMember/Next with the PC parameter means either ONLY PC, - and so NPC henchmen, unless FALSE is used, will not be even recognised. -///////////////////////// [Experience] ///////////////////////////////////////*/ - // Do XP things (Use object "oKiller" for who killed us). - - - -/*/////////////////////// [Experience] ///////////////////////////////////////*/ - } - - // Note: Here we do a simple way of checking how many times we have died. - // Nothing special. Debugging most useful aspect. - int nDeathCounterNew = GetAIInteger(AMOUNT_OF_DEATHS); - nDeathCounterNew++; - SetAIInteger(AMOUNT_OF_DEATHS, nDeathCounterNew); - - // Here is the last time (in game seconds) we died. It is used in the executed script - // to make sure we don't prematurly remove areselves. - - // We may want some sort of visual effect - like implosion or something, to fire. - int nDeathEffect = GetAIConstant(AI_DEATH_VISUAL_EFFECT); - - // Valid constants from 0 and up. Apply to our location (not to us, who will go!) - if(nDeathEffect >= 0) - { - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nDeathEffect), GetLocation(OBJECT_SELF)); - } - // Default Commoner alignment changing. (If the commoner is not evil!) - if(GetLevelByClass(CLASS_TYPE_COMMONER) > 0 && - GetAlignmentGoodEvil(OBJECT_SELF) != ALIGNMENT_EVIL && - !GetSpawnInCondition(AI_FLAG_OTHER_NO_COMMONER_ALIGNMENT_CHANGE, AI_OTHER_MASTER)) - { - if(GetIsPC(oKiller)) - { - AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); - } - else - { - // If it is a summon, henchmen or familar of a PC, we adust the PC itself - // Clever, eh? - object oMaster = GetMaster(oKiller); - if(GetIsObjectValid(oMaster) && GetIsPC(oMaster)) - { - AdjustAlignment(oMaster, ALIGNMENT_EVIL, 5); - } - } - } - // Always shout when we are killed. Reactions - Morale penalty, and - // attack the killer. - AISpeakString(AI_SHOUT_I_WAS_KILLED); - - // Speaks the set death speak, like "AGGGGGGGGGGGGGGGGGGG!! NOOOO!" for instance :-) - // Note for 1.4: No need for "CanSpeak()" for this, of course. - SpeakArrayString(AI_TALK_ON_DEATH); - - // First check - do we use "destroyable corpses" or not? (default, yes) - if(!GetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER)) - { - // We will actually dissapear after 30.0 seconds if not raised. - int nTime = GetAIInteger(AI_CORPSE_DESTROY_TIME); - if(nTime == 0) // Error checking - { - nTime = 30; - } - // 64: "[Death] Checking corpse status in " + IntToString(nTime) + " [Killer] " + GetName(oKiller) + " [Times Died Now] " + IntToString(nDeathCounterNew) - DebugActionSpeakByInt(64, oKiller, nTime, IntToString(nDeathCounterNew)); - // Delay check - DelayCommand(IntToFloat(nTime), DeathCheck(nDeathCounterNew)); - } - else - { -/************************ [Alternative Corpses] ******************************** - This is where you can add some alternative corpse code - EG looting - and so on, without disrupting the rest of the AI (as the corpses - are turned off). -************************* [Alternative Corpses] *******************************/ - // Add alternative corpse code here - - -/************************ [Alternative Corpses] *******************************/ - } - // Signal the death event. - FireUserEvent(AI_FLAG_UDE_DEATH_EVENT, EVENT_DEATH_EVENT); -} - -// We need a wrapper. If the amount of deaths, got in this, is not equal to iDeaths, -// we don't execute the script, else we do. :-P -void DeathCheck(int nDeaths) -{ - // Do the deaths imputted equal the amount we have suffered? - if(GetAIInteger(AMOUNT_OF_DEATHS) == nDeaths) - { - // - This now includes a check for Bioware's lootable functions and using them. - ExecuteScript(FILE_DEATH_CLEANUP, OBJECT_SELF); - } -} diff --git a/_module/nss/nw_c2_default8.nss b/_module/nss/nw_c2_default8.nss deleted file mode 100644 index 1eb8f908..00000000 --- a/_module/nss/nw_c2_default8.nss +++ /dev/null @@ -1,85 +0,0 @@ -/*/////////////////////// [On Disturbed] /////////////////////////////////////// - Filename: J_AI_OnDisturbed or nw_c2_default8 -///////////////////////// [On Disturbed] /////////////////////////////////////// - This will attack pickpockets, and inventory disturbers. Note: Stupidly, Bioware - made this only affect the creature by stealing. Still, oh well :-( - - This means that the only event which fires it is pickpocketing. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Changed why we determine combat round - - Any change in inventory will trigger appropriate SetWeapons again. - - Added turn of hide things. - 1.4 - Cleaned up a bit. Removed unused declared variable. -///////////////////////// [Workings] /////////////////////////////////////////// - Only fired by stealing, great. Oh well, it will attack any disturber anyway. - - It *might* not be fired if the natural spot check to notice a theft doesn't - work. No idea personally. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetInventoryDisturbItem, GetLastDisturbed, - GetInventoryDisturbType (I think it is always be stolen :-( ). -///////////////////////// [On Disturbed] /////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -void main() -{ - // Pre-disturbed-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_DISTURBED_PRE_EVENT, EVENT_DISTURBED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Declare major variables - object oDisturber = GetLastDisturbed(); - object oItem = GetInventoryDisturbItem(); - int nType = GetInventoryDisturbType(); - int nBase = GetBaseItemType(oItem); - - // We will reset weapons if it is a weapon. - // Reset weapons, or specifically healers kits. - if(GetIsObjectValid(oItem)) - { - // Kits - if(nBase == BASE_ITEM_HEALERSKIT) - { - SetLocalInt(OBJECT_SELF, AI_WEAPONSETTING_SETWEAPONS, 2); - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - else // Think it is a weapon. Saves time :-) - { - SetLocalInt(OBJECT_SELF, AI_WEAPONSETTING_SETWEAPONS, 1); - ExecuteScript(FILE_RE_SET_WEAPONS, OBJECT_SELF); - } - } - // Fight! Or search! - if(!GetIgnoreNoFriend(oDisturber) && - (nType == INVENTORY_DISTURB_TYPE_STOLEN || GetIsEnemy(oDisturber))) - { - // Turn of hiding, a timer to activate Hiding in the main file. This is - // done in each of the events, with the opposition checking seen/heard. - TurnOffHiding(oDisturber); - - // Can we attack? - if(!CannotPerformCombatRound()) - { - // Someone specific to attack - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // One debug speak. We always do one. - // 65: "[Disturbed] (pickpocket) Attacking Enemy Distrube [Disturber] " + GetName(oTarget) + " [Type] " + IntToString(iType) - DebugActionSpeakByInt(65, oDisturber, nType); - - // Attack the disturber - DetermineCombatRound(oDisturber); - } - else - { - // Get allies interested. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - } - - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_DISTURBED_EVENT, EVENT_DISTURBED_EVENT); -} diff --git a/_module/nss/nw_c2_default9.nss b/_module/nss/nw_c2_default9.nss deleted file mode 100644 index 15baaf89..00000000 --- a/_module/nss/nw_c2_default9.nss +++ /dev/null @@ -1,644 +0,0 @@ -/*/////////////////////// [On Spawn] /////////////////////////////////////////// - Filename: J_AI_OnSpawn or nw_c2_default9 -///////////////////////// [On Spawn] /////////////////////////////////////////// - This file contains options that will determine some AI behaviour, and a lot - of toggles for turning things on/off. A big read, but might be worthwhile. - - The documentation is actually fully in the readme files, under the name - "On Spawn.html", under "AI File Explanations". - - The order of the options: - - - Important Spawn Settings N/A - - Targeting & Fleeing (AI_TARGETING_FLEE_MASTER) - - Fighting & Spells (AI_COMBAT_MASTER) - - Other Combat - Healing, Skills & Bosses (AI_OTHER_COMBAT_MASTER) - - Other - Death corpses, minor things (AI_OTHER_MASTER) - - User Defined (AI_UDE_MASTER) - - Shouts N/A - - Default Bioware settings (WP's, Anims) (NW_GENERIC_MASTER) - - The OnSpawn file is a settings file. These things are set onto a creature, to - define cirtain actions. If more than one creature has this script, they all - use the settings, unless If/Else statements are used somehow. There is also - the process of setting any spells/feats availible, and hiding and walk waypoints - are started. - - Other stuff: - - Targeting is imporant :-D - - If you delete this script, there is a template for the On Spawn file - in the zip it came in, for use in the "scripttemplate" directory. -///////////////////////// [History] //////////////////////////////////////////// - Note: I have removed: - - Default "Teleporting" and exit/return (this seemed bugged anyway, or useless) - - Spawn in animation. This can be, of course, re-added. - - Day/night posting. This is uneeded, with a changed walk waypoints that does it automatically. - - 1.0-1.2 - Used short amount of spawn options. - 1.3 - All constants names are changed, I am afraid. - - Added Set/Delete/GetAIInteger/Constant/Object. This makes sure that the AI - doesn't ever interfere with other things - it pre-fixes all stored things - with AI_INTEGER_ (and so on) - 1.4 - TO DO: Clear up some old non-working ones - - Added in User Defined part of the script, an auto-turn-off-spells for - Ranger and Paladin classes. Need to test - perhaps 1.64 fixed it? - - - Spawn options changed: - - Removed AI level settings (can still be done manually) - - Added optional (and off by default) fear-visual for fleeing - - -///////////////////////// [Workings] /////////////////////////////////////////// - Note: You can do without all the comments (it may be that you don't want - the extra KB it adds or something, although it does not at all slow down a module) - so as long as you have these at the end: - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0, SpawnWalkWayPoints()); - - Oh, and the include file (Below, "j_inc_spawnin") must be at the top like - here. Also recommended is the AI_INTELLIGENCE and AI_MORALE being set (if - not using custom AI). -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetIsEncounterCreature -///////////////////////// [On Spawn] /////////////////////////////////////////*/ - -// Treasure Includes - See end of spawn for uncomment options. - -//#include "nw_o2_coninclude" -// Uncomment this if you want default NwN Treasure - Uses line "GenerateNPCTreasure()" at the end of spawn. -// - This generates random things from the default pallet based on the creatures level + race - -//#include "x0_i0_treasure" -// Uncomment this if you want the SoU Treasure - Uses line "CTG_GenerateNPCTreasure()" at the end of spawn. -// - This will spawn treasure based on chests placed in the module. See "x0_i0_treasure" for more information. - -// This is required for all spawn in options! -#include "J_INC_SPAWNIN" - -void main() -{ -/************************ [Important Spawn Settings] **************************/ - SetAIInteger(AI_INTELLIGENCE, 10); - // Intelligence value of the creauture. Can be 1-10, read readme's for help. - SetAIInteger(AI_MORALE, 10); - // Will save (See readme). Remember: -1 or below means they always flee. - //SetCustomAIFileName("CUSTOM_AI_FILE"); - // Sets our custom AI file. Really, only animation settings will apply when this is set. - // - Can sort actions against a imputted target (EG: On Percieved enemy) by - // "GetLocalObject(OBJECT_SELF, "AI_TEMP_SET_TARGET");" -/************************ [Important Spawn Settings] **************************/ - -/************************ [Targeting] ****************************************** - All targeting settings. -************************* [Targeting] *****************************************/ - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HP, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest current HP. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_AC, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest AC (as in 1.2). - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HD, AI_TARGETING_FLEE_MASTER); - // Target the lowest hit dice - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_MAGE_CLASSES, AI_TARGETING_FLEE_MASTER); - // We go straight for mages/sorcerors. Nearest one. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_ARCHERS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest enemy with a ranged weapon equipped. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_PCS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest seen PC enemy. - - //SetAIConstant(AI_FAVOURED_ENEMY_RACE, RACIAL_TYPE_HUMAN); - // The AI attacks the nearest enemy, seen, of this race. Use the RACIAL_* constants. - //SetAIConstant(AI_FAVOURED_ENEMY_CLASS, CLASS_TYPE_BARD); - // The AI attacks the nearest enemy, seen, of this class. Use the CLASS_* constants. - - // Target changing - see readme for info. - //SetAIInteger(AI_MAX_TURNS_TO_ATTACK_ONE_TARGET, 6); - // Maximum rounds to attack the current target, before re-checking. - // % Chance to re-set each target type each round (Could result in current target still) - //SetAIInteger(AI_MELEE_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_RANGED_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_SPELL_LAST_TO_NEW_TARGET_CHANCE, 20); - - // We only target PC's if there are any in range if this is set - //SetSpawnInCondition(AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS, AI_TARGETING_FLEE_MASTER); - - // Main explanation of AI_SetAITargetingValues, see the AI readme (spawn file) - // - Remember, uncommenting one will just ignore it (so will never check target's - // AC without TARGETING_AC on) - - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12); - // Spell mantals are checked only for the spell target. Either Absense of or got any. - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 2, 6); - // AC is used for all phisical attacks. Lower targets lower (By default). - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 2, 4); - // Used for spell attacks. Saves are sorta a AC versus spells. - - // Phisical protections. Used by spells, ranged and melee. - // Jasperre - simple check if we are a fighter (hit lower phisicals) or a - // mage (attack higher!) - if(GetBaseAttackBonus(OBJECT_SELF) > ((GetHitDice(OBJECT_SELF)/2) + 1)) - { - // Fighter/Clerics (It is over a mages BAB + 1 (IE 0.5 BAB/Level) target lower - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_LOWER, 2, 6); - } - else - { - // Mages target higher (so dispel/elemental attack those who fighters - // cannot hit as much). (the lowest BAB, under half our hit dice in BAB) - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5); - } - // Base attack bonus. Used for spells and phisical attacks. Checked with GetBaseAttackBonus. - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - // Hit dice - how powerful in levels the enemy is. Used for all checks. - AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3); - - //AI_SetAITargetingValues(TARGETING_HP_PERCENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_CURRENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_MAXIMUM, TARGET_LOWER, 1, 3); - // The HP's are the last thing to choose a target with. -/************************ [Targeting] *****************************************/ - -/************************ [Fleeing] ******************************************** - Fleeing - these are toggled on/off by FEARLESS flag. - - 3 or under intelligence will just run away. 4 or more will know where allies - are, and if there are none, will not run. -************************* [Fleeing] *******************************************/ - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Forces them to not flee. This may be set with AI_SetMaybeFearless at the end. - //SetSpawnInCondition(AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS, AI_TARGETING_FLEE_MASTER); - // This will make the creature never fight against impossible odds (8HD+ different) - //SetSpawnInCondition(AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER); - // This turns OFF any sort of group morale bonuses. - - //SetAIInteger(AMOUNT_OF_HD_DIFFERENCE_TO_CHECK, -2); - // If enemy is within this amount of HD, we do not check morale. - SetAIInteger(BASE_MORALE_SAVE, 5); - // Base DC of the will save. It is set to 20 + HD difference - Morale - Group morale mod. - //SetAIInteger(HP_PERCENT_TO_CHECK_AT, 80); - // %HP needed to be at to check morale. This doesn't affect "Never fight impossible odds" - //SetSpawnInCondition(AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT, AI_TARGETING_FLEE_MASTER); - // This will turn off overriding HP checks. AI may decide to run even - // not at the %HP above, this turns the checks off. - - //SetAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6); - // Damage needed to be done at once to get a massive morale penalty (Below) - //SetAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6); - // Penalty for the above, set for some time to negativly affect morale. Added to save DC for fleeing. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER); - // If set, just runs to nearest non-seen ally, and removes the loop for a good group of allies to run to. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER); - // They will flee to the nearest object of the tag below, if set. - //SetLocalString(OBJECT_SELF, AI_FLEE_OBJECT, "BOSS_TAG_OR_WHATEVER"); - // This needs setting if the above is to work. - - //SetSpawnInCondition(AI_FLAG_FLEEING_USE_VISUAL_EFFECT, AI_TARGETING_FLEE_MASTER); - // If this is on, we play a visual effect while we flee. -/************************ [Fleeing] *******************************************/ - -/************************ [Combat - Fighters] ********************************** - Fighter (Phiscal attacks, really) specific stuff - disarmed weapons, better - at hand to hand, and archer behaviour. -************************* [Combat - Fighters] *********************************/ - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - - //SetAIInteger(AI_RANGED_WEAPON_RANGE, 3); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - //SetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER); - // Set if you want them to move forwards into HTH sooner. Will always - // if the enemy is a mage/archer, else % based on range. - - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER); - // For archers. If they have ally support, they'd rather move back & shoot then go into HTH. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER); - // This forces the move back from attackers, and shoot bows. Very small chance to go melee. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER); - // This will make the creature ALWAYs use any bows it has. ALWAYS. - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL, AI_COMBAT_MASTER); - // Turns off any attempts to kill dying PCs, or attack low hit point people. - // This is only ever attempted at 9 or 10 intelligence anyway. -/************************ [Combat - Fighters] *********************************/ - -/************************ [Combat - Spell Casters] ***************************** - Spellcaster AI has been improved significantly. As well as adding all new spells, - now spellcasters more randomly choose spells from the same level (EG: they - may choose not to cast magic missile, and cast negative energy ray instead). - - There are also options here for counterspelling, fast buffing, Cheat cast spells, - dispelling, spell triggers, long ranged spells first, immunity toggles, and AOE settings. -************************* [Combat - Spell Casters] ****************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - // Casts spells only if the caster would not move into range to cast them. - // IE long range spells, then medium, then short (unless the enemy comes to us!) - //SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // When an enemy comes in 40M, we fast-cast many defensive spells, as if prepared. - //SetSpawnInCondition(AI_FLAG_COMBAT_SUMMON_FAMILIAR, AI_COMBAT_MASTER); - // The caster summons thier familiar/animal companion. Either a nameless Bat or Badger respectivly. - - // Counterspelling/Dispelling... - // It checks for these classes within the 20M counterspell range. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Arcane (Mage/Sorceror) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Divine (Cleric/Druid) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP, AI_COMBAT_MASTER); - // Recommended. Only counterspells with 5+ allies in group. - - //SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_MAGES_MORE, AI_COMBAT_MASTER); - // Targets seen mages to dispel, else uses normal spell target. - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - // This will make the mage not dispel just anything all the time, but important (spell-stopping) - // things first, others later, after some spells. If off, anything is dispelled. - - // AOE's - //SetSpawnInCondition(AI_FLAG_COMBAT_NEVER_HIT_ALLIES, AI_COMBAT_MASTER); - // Override toggle. Forces to never cast AOE's if it will hit an ally + harm them. - //SetSpawnInCondition(AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE, AI_COMBAT_MASTER); - // Allies who will survive the blast are ignored for calculating best target. - //SetAIInteger(AI_AOE_ALLIES_LOWEST_IN_AOE, 3); - // Defualt: 3. If amount of allies in blast radius are equal or more then - // this, then that location is ignored. - //SetAIInteger(AI_AOE_HD_DIFFERENCE, -8); - // Very weak allies (who are not comparable to us) are ignored if we would hit them. - - // For these 2, if neither are set, the AI will choose AOE more if there are - // lots of enemies, or singles if there are not many. - //SetSpawnInCondition(AI_FLAG_COMBAT_SINGLE_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, single target spells are used first. - //SetSpawnInCondition(AI_FLAG_COMBAT_MANY_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, AOE spells are used first. - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - // A few Death spells may be cast top-prioritory if the enemy will always fail saves. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - // Will use a better target to summon a creature at (EG: Ranged attacker) - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - // Turns On "GetIsImmune" checks. Auto on for 7+ Intel. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - // Turns On checks for Globes & levels of spells. Auto on for 9+ Intel. - - //SetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER); - // This will make the caster buff more allies - or, in fact, use spells - // to buff allies which they might have not used before. - - //SetSpawnInCondition(AI_FLAG_COMBAT_USE_ALL_POTIONS, AI_COMBAT_MASTER); - // Uses all buffing spells before melee. - - //SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_ICE_DAGGER, SPELL_HORIZIKAULS_BOOM, SPELL_MELFS_ACID_ARROW, SPELL_NEGATIVE_ENERGY_RAY, SPELL_FLAME_ARROW); - // Special: Mages cast for ever with this set. - - // Spell triggers - //SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION); - // This is just an example. See readme for more info. - -/************************ [Combat - Spell Casters] ****************************/ - -/************************ [Combat - Dragons] *********************************** - I have a fondness for dragons - in NWN they are deprived of many abilities. Here - are some new ones for your enjoyment! Switches and flying for ANYTHING! :-) -************************* [Combat - Dragons] **********************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_WING_BUFFET, AI_COMBAT_MASTER); - //This sets so there is no Dragon wing buffet. Readme has details of it. - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BUFFET, 3); - // Min. Amount of Rounds between each buffet. See readme for counter defaults. Def: 3 - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BREATH, 3); - // Min. Amount of Rounds between each breath use. See readme for counter defaults. Def: 3 - - // Default checks for dragon flying automatic turning on of flying. - if(GetLevelByClass(CLASS_TYPE_DRAGON) || MyPRCGetRacialType(OBJECT_SELF) == RACIAL_TYPE_DRAGON) - { - SetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER); - // This turns ON combat flying. I think anything winged looks A-OK. See readme for info. - } -/************************ [Combat - Dragons] **********************************/ - -/************************ [Combat Other - Healers/Healing] ********************* - Healing behaviour - not specifically clerics. See readme. -************************* [Combat Other - Healers/Healing] ********************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_HEAL_AT_PERCENT_NOT_AMOUNT, AI_OTHER_COMBAT_MASTER); - // if this is set, we ignore the amount we need to be damaged, as long - // as we are under AI_HEALING_US_PERCENT. - //SetAIInteger(AI_HEALING_US_PERCENT, 50); - // % of HP we need to be at until we heal us at all. Default: 50 - //SetAIInteger(AI_HEALING_ALLIES_PERCENT, 60); - // % of HP allies would need to be at to heal them Readme = info. Default: 60 - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER); - // Turns on rasing dead with Resurrection/Raise dead. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER); - // This turns off all healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_RESTORE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally restoring (Remove/Restoration). - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_USE_BAD_HEALING_SPELLS, AI_OTHER_COMBAT_MASTER); - // This forces all cure spells to be used, check readme. - //SetAIInteger(SECONDS_BETWEEN_STATUS_CHECKS, 30); - // Seconds between when we loop everyone for bad effects like Fear/stun ETC. If not set, done each round. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER); - // ActionGiveItem standard healing potion's to allies who need them, if they possess them. - -/************************ [Combat Other - Healers/Healing] ********************/ - -/************************ [Combat Other - Skills] ****************************** - Skills are a part of fighting - EG Taunt. These are mainly on/off switches. - A creature will *may* use it if they are not set to "NO_" for the skill. -************************* [Combat Other - Skills] *****************************/ - - // "NO" - This is for forcing the skill NEVER to be used by the combat AI. - // "FORCE" - This forces it on (and to be used), except if they have no got the skill. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_SEARCH, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_SEARCH, AI_OTHER_COMBAT_MASTER); - // - Concentration - special notes in the readme - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - -/************************ [Combat Other - Skills] *****************************/ - -/************************ [Combat Other - Leaders] ***************************** - Leaders/Bosses can be set to issue some orders and inspire more morale - and bring - a lot of allies to a battle at once! -************************* [Combat Other - Leaders] ****************************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Special leader. Can issuse some orders. See readme for details. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER); - // Boss shout. 1 time use - calls all creatures in X meters (below) for battle! - //SetAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60); - // Defaults to a 60 M range. This can change it. Note: 1 toolset square = 10M. - -/************************ [Combat Other - Leaders] ****************************/ - -/************************ [Other - Behaviour/Generic] ************************** - This is generic behaviours - alright, really it is all things that cannot - really be categorised. -************************* [Other - Behaviour/Generic] *************************/ - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER); - // No ClearAllActions() before BeginConversation. May keep a creature sitting. - //SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - //SetSpawnInCondition(AI_FLAG_OTHER_CHEAT_MORE_POTIONS, AI_OTHER_MASTER); - // If at low HP, and no potion, create one and use it. - //SetAIConstant(AI_POLYMORPH_INTO, POLYMORPH_TYPE_WEREWOLF); - // Polymorph to this creature when damaged (once, natural effect). - - //AI_CreateRandomStats(-3, 3, 6); - // Create (Effect-applied) random statistics. - //AI_CreateRandomOther(-2, 2, -2, 2, -2, 2, -2, 2); - // Create (Effect-applied) random HP, saves, AC. - - //SetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER); - // This will store our spawn location, and then move back there after combat. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - //SetSpawnInCondition(AI_FLAG_OTHER_DONT_SHOUT, AI_OTHER_MASTER); - // Turns off all silent talking NPC's do to other NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER); - // Move randomly closer to enemies in range set below. - //SetAIInteger(AI_SEARCH_IF_ENEMIES_NEAR_RANGE, 25); - // This is the range creatures use, in metres. - - //SetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER); - // One shot. We won't instantly attack a creature we see. See readme. - - //SetAIInteger(AI_DOOR_INTELLIGENCE, 1); - // 3 Special "What to do with Doors" settings. See readme. Good for animals. - - //SetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER); - // When combat is over, creature rests. Useful for replenising health. - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER); - // Stops any use of "PlayVoiceChat". Use with Custom speakstrings. - - /*** Death settings - still under AI_OTHER_MASTER ***/ - - //AI_SetDeathResRef("Resref Here"); - // Creates a creature from the string set. Instantly destroys this creatures body on death. - - //SetAIConstant(AI_DEATH_VISUAL_EFFECT, VFX_FNF_IMPLOSION); - // Fires this visual effect number instantly on death. Use FNF and IMP ones. - - //SetAIInteger(AI_CORPSE_DESTROY_TIME, 30); - // Seconds before body finally gets destroyed. Used for Clerical Raise Dead on NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER); - // This turns off the SetDestroyable() usually performed, and the above timer. - - //SetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER); - // Makes the death file use Bioware's cool SetLootable() feature when corpses would disappear. - - /*** Lag and a few performance settings - still under AI_OTHER_MASTER ***/ - - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - // The creature doesn't check for, or use any items that cast spells. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - //The creature doesn't ever cast spells (and never checks them) - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_LISTENING, AI_OTHER_MASTER); - // The creature doesn't have SetListening() set. Turns of the basic listening for shouts. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER); - // Uses EquipMostDamaging(), like Bioware code. No shield/second weapon equipped. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_CURING_ALLIES, AI_OTHER_MASTER); - // This will stop checks for and curing of allies ailments. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER); - // Stops the heartbeat running (Except Pre-Heartbeat-event). - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER); - // Ignores targeting settings. VERY good for lag/bad AI. Attacks nearest seen enemy. - -/************************ [Other - Behaviour/Generic] *************************/ - -/************************ [User Defined and Shouts] **************************** - The user defined events, set up to fire here. - - New "Start combat attack" and "End Combat Attack" events - - New "Pre" events. Use these to optionally stop a script from firing - under cirtain circumstances as well! (Read nw_c2_defaultd or j_ai_onuserdef) - (User Defined Event = UDE) -************************* [User Defined and Shouts] ***************************/ - - // This is REQUIRED if we use any Pre-events. If not there, it will default - // to the default User Defined Event script for the default AI. - SetCustomUDEFileName("k_ai_onuserdef"); - - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_EVENT, AI_UDE_MASTER); // UDE 1001 - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER); // UDE 1021 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_EVENT, AI_UDE_MASTER); // UDE 1002 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, AI_UDE_MASTER); // UDE 1022 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, AI_UDE_MASTER); // UDE 1003 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, AI_UDE_MASTER); // UDE 1023 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_EVENT, AI_UDE_MASTER); // UDE 1004 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, AI_UDE_MASTER); // UDE 1024 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); // UDE 1005 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_PRE_EVENT, AI_UDE_MASTER); // UDE 1025 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_EVENT, AI_UDE_MASTER); // UDE 1006 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_PRE_EVENT, AI_UDE_MASTER); // UDE 1026 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_EVENT, AI_UDE_MASTER); // UDE 1007 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_PRE_EVENT, AI_UDE_MASTER); // UDE 1027 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_EVENT, AI_UDE_MASTER); // UDE 1008 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_PRE_EVENT, AI_UDE_MASTER); // UDE 1028 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_EVENT, AI_UDE_MASTER); // UDE 1009 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_PRE_EVENT, AI_UDE_MASTER); // UDE 1029 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, AI_UDE_MASTER); // UDE 1011 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, AI_UDE_MASTER); // UDE 1031 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_EVENT, AI_UDE_MASTER); // UDE 1015 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, AI_UDE_MASTER); // UDE 1035 - - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_EVENT, AI_UDE_MASTER); // UDE 1012 - // Fires when we have finnished all combat actions. - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT, AI_UDE_MASTER); // UDE 1032 - // This fires at the start of DetermineCombatRound() *IF they can do an action*. - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_AT_1_HP, AI_UDE_MASTER); // UDE 1014 - // Fires when we are damaged, and are at 1 HP. Use for immortal-flagged creatures. - - /*** Speakstrings - as it were, said under cirtain conditions % chance each time ***/ - - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CONVERSATION, 100, 4, "Hello there", "I hope you enjoy your stay", "Do you work here too?", "*Hic*"); - // On Conversation - see readme. Replaces BeginConversation(). - - // Morale - //AI_SetSpawnInSpeakArray(AI_TALK_ON_MORALE_BREAK, 100, 3, "No more!", "I'm outta here!", "Catch me if you can!"); - // Spoken at running point, if they run to a group of allies. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CANNOT_RUN, 100, 3, "Never give up! Never surrender!", "I've no where to run, so make my day!", "RRRAAAAA!!!"); - // Spoken at running point, if they can find no ally to run to, and 4+ Intelligence. See readme - //AI_SetSpawnInSpeakValue(AI_TALK_ON_STUPID_RUN, "Ahhhhgggg! NO MORE! Run!!"); - // As above, when morale breaks + no ally, but they panic and run from enemy at 3 or less intelligence. - - // Combat - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 5, 4, "Come on!", "You won't win!", "We are not equals! I am better!", "Nothing will stop me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 5, 4, "I'll try! try! and try again!", "Tough man, are we?", "Trying out your 'skills'? Pathetic excuse!", "Nothing good will come from killing me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 5, 4, "My strength is mighty then yours!", "You will definatly die!", "NO chance for you!", "No mercy! Not for YOU!"); - // Spoken each DetermineCombatRound. % is /1000. See readme for Equal/Over/Under values. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_TAUNT, 100, 3, "You're going down!", "No need to think, let my blade do it for you!", "Time to meet your death!"); - // If the creature uses thier skill, taunt, on an enemy this will be said. - - // Event-driven. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PERCIEVE_ENEMY, 70, 6, "Stand and fight, lawbreaker!", "Don't run from the law!", "I have my orders!", "I am ready for violence!", "CHARGE!", "Time you died!"); - // This is said when they see/hear a new enemy, and start attacking them. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_DAMAGED, 20, 2, "Ouch, damn you!", "Haha! Nothing will stop me!"); - // A random value is set to speak when damaged, and may fire same time as below ones. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PHISICALLY_ATTACKED, 20, 2, "Hah! Mear weapons won't defeat me!", "Pah! You cannot defeat me with such rubbish!"); - // This is said when an enemy attacks the creature with a melee/ranged weapon. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_HOSTILE_SPELL_CAST_AT, 20, 2, "No one spell will stop me!", "Is that all you have!?!"); - // This is said when an enemy attacks the creature with a hostile spell. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_DEATH, "Agggggg!"); - // This will ALWAYS be said, whenever the creature dies. - - // Specific potion ones. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_PASS_POTION, "Here! Catch!"); - // This will be spoken when the creature passes a potion to an ally. See readme. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_GOT_POTION, "Got it!"); - // This will be spoken by the creature we pass the potion too, using AssignCommand(). - - // Leader ones - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_SEND_RUNNER, "Quickly! We need help!"); - // This will be said when the leader, if this creature, sends a runner. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_ATTACK_TARGET, "Help attack this target!"); - // When the leader thinks target X should be attacked, it will say this. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_BOSS_SHOUT, "Come my minions! To battle!"); - // This will be said when the leader, if this creature, sees an enemy and uses his "Boss Monster Shout", if turned on. - - -/************************ [User Defined and Shouts] ***************************/ - -/************************ [Bioware: Animations/Waypoints/Treasure] ************* - All Bioware Stuff. I'd check out "x0_c2_spwn_def" for the SoU/Hordes revisions. -************************* [Bioware: Animations/Waypoints/Treasure] ************/ - - // SetSpawnInCondition(NW_FLAG_STEALTH, NW_GENERIC_MASTER); - // SetSpawnInCondition(NW_FLAG_SEARCH, NW_GENERIC_MASTER); - // Uses said skill while WalkWaypoints() - - // SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING, NW_GENERIC_MASTER); - // Separate the NPC's waypoints into day & night. See comment in "nw_i0_generic" for use. - - // SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // This will cause an NPC to use common animations it possesses, - // and use social ones to any other nearby friendly NPCs. - // SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Same as above, except NPC will wander randomly around the area. - - // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); - // Interacts with placeables + More civilized actions. See Readme. - // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); - // Will use random voicechats during animations, if Civilized - // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); - // Will move around the area a bit more, if using Immobile Animations. See readme. - - // Treasure generating. - //CTG_GenerateNPCTreasure(); - // SoU. Requires "x0_i0_treasure" to be uncommented. See readme. - //GenerateNPCTreasure(); - // Default NwN. Requires "nw_o2_coninclude" to be uncommented. See readme. - -/************************ [Bioware: Animations/Waypoints/Treasure] ************/ - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - -/************************ [User] *********************************************** - This is the ONLY place you should add user things, on spawn, such as - visual effects or anything, as it is after SetUpEndOfSpawn. By default, this - does have encounter animations on. This is here, so is easily changed :-D - - Be careful otherwise. - - Notes: - - SetListening is already set to TRUE, unless AI_FLAG_OTHER_LAG_NO_LISTENING is on. - - SetListenPattern's are set from 0 to 7. - - You can use the wrappers AI_SpawnInInstantVisual and AI_SpawnInPermamentVisual - for visual effects (Instant/Permament as appropriate). -************************* [User] **********************************************/ - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - // Leave this in if you use the variable for creature attacks, as for golems. Bioware's code. - int nNumber = GetLocalInt(OBJECT_SELF, "CREATURE_VAR_NUMBER_OF_ATTACKS"); - if(nNumber > 0) - { - SetBaseAttackBonus(nNumber); - } - - // If we are a ranger or paladin class, do not cast spells. This can be - // manually removed if wished. To get the spells they have working correctly, - // remove this, and use Monster Abilties instead of thier normal class spells. -// if(GetLevelByClass(CLASS_TYPE_RANGER) >= 1 || GetLevelByClass(CLASS_TYPE_PALADIN) >= 1) -// { -// SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); -// } - -/************************ [User] **********************************************/ - - // Note: You shouldn't really remove this, even if they have no waypoints. - DelayCommand(2.0, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/nw_c2_defaulta.nss b/_module/nss/nw_c2_defaulta.nss deleted file mode 100644 index 42015fd0..00000000 --- a/_module/nss/nw_c2_defaulta.nss +++ /dev/null @@ -1,84 +0,0 @@ -/*/////////////////////// [On Rested] ////////////////////////////////////////// - Filename: J_AI_OnRest or nw_c2_defaulta -///////////////////////// [On Rested] ////////////////////////////////////////// - This will play the sitting animation for 6 seconds, just something for resting. - Also, walks waypoints (as resting would stop this) :-) and signals event (if so be) - Feel free to edit. - - It does have the spell trigger information resetting, however. This can - only be removed if they have no spell triggers, although it is hardly worth it. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added sitting. - 1.4 - Will be editing this down. No need to reset anything on rest, for a - better working AI. - IDEA: Change so that we will work through all spells/feats in order. - If, at cirtain levels, we do not have any spells to cast from that - level (set in a global stored integer in the general AI) we ignore all - spells in that level. Same for each talent category (no need to use - talents for them in the spawn script). - - If not in combat (EG: In heartbeat) we reset the integers saying "don't - bother checking those spells" to false. -///////////////////////// [Workings] /////////////////////////////////////////// - This fires once, at the END of resting. - - If ClearAllActions is added, the resting is actually stopped, or so it seems. - - It doesn't fire more then once. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: None, it seems. -///////////////////////// [On Rested] ////////////////////////////////////////*/ - -#include "J_INC_CONSTANTS" - -// Resets all spell triggers used for sString -void LoopResetTriggers(string sString, object oTrigger); - -void main() -{ - // Pre-rest-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_RESTED_PRE_EVENT, EVENT_RESTED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // Simple debug. - // 66: "[Rested] Resting. Type: " + IntToString(GetLastRestEventType()) - DebugActionSpeakByInt(66, OBJECT_INVALID, GetLastRestEventType()); - - // Reset all spell triggers. - // Set all triggers - object oTrigger = GetAIObject(AI_SPELL_TRIGGER_CREATURE); - if(GetIsObjectValid(oTrigger)) - { - LoopResetTriggers(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, oTrigger); - LoopResetTriggers(SPELLTRIGGER_DAMAGED_AT_PERCENT, oTrigger); - LoopResetTriggers(SPELLTRIGGER_IMMOBILE, oTrigger); - LoopResetTriggers(SPELLTRIGGER_START_OF_COMBAT, oTrigger); - } - // Some sitting for a few seconds. - ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 6.0); - DelayCommand(9.0, ExecuteScript(FILE_WALK_WAYPOINTS, OBJECT_SELF)); - - // Fire End-heartbeat-UDE - FireUserEvent(AI_FLAG_UDE_RESTED_EVENT, EVENT_RESTED_EVENT); -} - -// Resets all spell triggers used for sString -void LoopResetTriggers(string sString, object oTrigger) -{ - int nCnt, bBreak, bUsed; - for(nCnt = 1; bBreak != TRUE; nCnt++) - { - // Check max for this setting - bUsed = GetLocalInt(oTrigger, sString + USED); - if(bUsed) - { - DeleteLocalInt(oTrigger, sString + USED); - } - else - { - bBreak = TRUE; - } - } -} diff --git a/_module/nss/nw_c2_defaultb.nss b/_module/nss/nw_c2_defaultb.nss deleted file mode 100644 index 6bee0e66..00000000 --- a/_module/nss/nw_c2_defaultb.nss +++ /dev/null @@ -1,493 +0,0 @@ -/*/////////////////////// [On Spell Cast At] /////////////////////////////////// - Filename: j_ai_onspellcast or nw_c2_defaultb -///////////////////////// [On Spell Cast At] /////////////////////////////////// - What does this do? Well... - - Any AOE spell effects are set in a timer, so we can react to them right - - Reacts to hostile casters, or allies in combat - - And the normal attack :-) -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added special AOE checks. - - Hide checks. - 1.4 - Added more silent shouts. Edited the formatting. Moved a few things around. -///////////////////////// [Workings] /////////////////////////////////////////// - This is fired when EventSpellCastAt(object oCaster, int nSpell, int bHarmful=TRUE) - is signaled on the creature. - - GetLastSpellCaster() = oCaster (Door, Placeable, Creature who cast it) - GetLastSpell() = nSpell (The spell cast at us) - GetLastSpellHarmful()= bHarmful (If it is harmful!) -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetLastSpellCaster, GetLastSpellHarmful GetLastSpell() -///////////////////////// [On Spell Cast At] /////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -// Sets a local timer if the spell is an AOE one -void SetAOESpell(int nSpellCast, object oCaster); -// Gets the nearest AOE cast by oCaster, of sTag. -object GetNearestAOECastBy(string sTag, object oCaster); -// Gets the amount of protections we have - IE globes -int GetOurSpellLevelImmunity(); - -void main() -{ - // Pre-spell cast at-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, EVENT_SPELL_CAST_AT_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - object oCaster = GetLastSpellCaster(); - int bHarmful = GetLastSpellHarmful(); - int nSpellCast = GetLastSpell(); - object oAttackerOfCaster; - - // If harmful, we set the spell to a timer, if an AOE one. - if(bHarmful && GetIsObjectValid(oCaster)) - { - // Might set AOE spell to cast. - SetAOESpell(nSpellCast, oCaster); - } - // If not a creature, probably an AOE or trap. - if(GetObjectType(oCaster) != OBJECT_TYPE_CREATURE) - { - // 67: "[Spell] Caster isn't a creature! May look for target [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(67, oCaster); - - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // Attack anyone else around - if(!CannotPerformCombatRound()) - { - // Determine Combat Round - DetermineCombatRound(); - } - } - // If a friend, or dead, or a DM, or invalid, or self, we ignore them. - else if(!GetIgnoreNoFriend(oCaster) && oCaster != OBJECT_SELF) - { - // 1.3 changes here: - // - We do NOT need to know if it is hostile or not, except if it is hostile - // and they are not our faction! We do, however, use bHarmful for speakstrings. - - // If harmful, we attack anyone! (and if is enemy) - // 1.4: Faction equal check in GetIgnoreNoFriend() - if(bHarmful || GetIsEnemy(oCaster)) - { - // Spawn in condition hostile thingy - if(GetSpawnInCondition(AI_FLAG_OTHER_CHANGE_FACTIONS_TO_HOSTILE_ON_ATTACK, AI_OTHER_MASTER)) - { - if(!GetIsEnemy(oCaster)) - { - AdjustReputation(oCaster, OBJECT_SELF, -100); - } - } - - if(bHarmful) - { - // * Don't speak when dead. 1.4 change (an obvious one to make) - if(CanSpeak()) - { - // Hostile spell speaksting, if set. - SpeakArrayString(AI_TALK_ON_HOSTILE_SPELL_CAST_AT); - } - } - - // Turn of hiding check - TurnOffHiding(oCaster); - - // We attack - if(!CannotPerformCombatRound()) - { - // 68: "[Spell:Enemy/Hostile] Not in combat. Attacking: [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(68, oCaster); - DetermineCombatRound(oCaster); - } - - // Shout to allies to attack the enemy who attacked me, got via. Last Hostile Actor. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - } - // Else, was neutral perhaps. Don't attack them anyway. - else - { - // 69: "[Spell] (ally). Not in combat. May Attack/Move [Caster] " + GetName(oCaster) - DebugActionSpeakByInt(69, oCaster); - - // Set special action to investigate - as if this event was triggered - // by I_WAS_ATTACKED. - - // If we are already attacking, we do not move - if(CannotPerformCombatRound()) - { - // Shout to allies to attack, or be prepared. - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - } - else - { - // We react as if the caster, a neutral, called for help ala - // I_WAS_ATTACKED (they might not have, might just be - // preperation for something), but normally, this is a neutral - // casting a spell. Do not respond to PC's. - if(!GetIsPC(oCaster)) - { - IWasAttackedResponse(oCaster); - } - } - } - } - // If they are not a faction equal, and valid, we help them. - else if(GetIsObjectValid(oCaster) && GetFactionEqual(oCaster)) - { - IWasAttackedResponse(oCaster); - } - // Fire End-spell cast at-UDE - FireUserEvent(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, EVENT_SPELL_CAST_AT_EVENT); -} - -// Sets a local timer if the spell is an AOE one -void SetAOESpell(int nSpellCast, object oCaster) -{ - // Check it is one we can check - int bStop = TRUE; - switch(nSpellCast) - { - case SPELL_ACID_FOG: - case SPELL_MIND_FOG: - case SPELL_STORM_OF_VENGEANCE: - case SPELL_GREASE: - case SPELL_CREEPING_DOOM: - case SPELL_SILENCE: - case SPELL_BLADE_BARRIER: - case SPELL_CLOUDKILL: - case SPELL_STINKING_CLOUD: - case SPELL_WALL_OF_FIRE: - case SPELL_INCENDIARY_CLOUD: - case SPELL_ENTANGLE: - case SPELL_EVARDS_BLACK_TENTACLES: - case SPELL_CLOUD_OF_BEWILDERMENT: - case SPELL_STONEHOLD: - case SPELL_VINE_MINE: - case SPELL_SPIKE_GROWTH: - case SPELL_VINE_MINE_HAMPER_MOVEMENT: - case SPELL_VINE_MINE_ENTANGLE: - { - bStop = FALSE; - } - break; - } - // Check immune level - int nImmuneLevel = GetOurSpellLevelImmunity(); - if(nImmuneLevel >= 9) - { - bStop = TRUE; - } - // Check - if(bStop == TRUE) - { - return; - } - // We do use intelligence here... - int nAIInt = GetBoundriedAIInteger(AI_INTELLIGENCE); - int bIgnoreSaves; - int bIgnoreImmunities; - object oAOE; - - // If it is low, we ignore all things that we could ignore with it... - if(nAIInt <= 3) - { - bIgnoreSaves = TRUE; - bIgnoreImmunities = TRUE; - } - // Average ignores saves - else if(nAIInt <= 7) - { - bIgnoreSaves = TRUE; - bIgnoreImmunities = FALSE; - } - // Else, we do both. - else - { - bIgnoreSaves = FALSE; - bIgnoreImmunities = FALSE; - } - - int bSetAOE = FALSE;// TRUE means set to timer - int nSaveDC = 11; - - // Get the caster DC, the most out of WIS, INT or CHA... - int nInt = GetAbilityModifier(ABILITY_INTELLIGENCE, oCaster); - int nWis = GetAbilityModifier(ABILITY_WISDOM, oCaster); - int nCha = GetAbilityModifier(ABILITY_CHARISMA, oCaster); - - if(nInt > nWis && nInt > nCha) - { - nSaveDC += nInt; - } - else if(nWis > nCha) - { - nSaveDC += nWis; - } - else - { - nSaveDC += nCha; - } - // Note: - // - No reaction type/friendly checks. Signal Event is only fired if the - // spell WILL pierce any PvP/Friendly/Area settings - - // We check immunities here, please note... - switch(nSpellCast) - { - // First: IS GetIsReactionTypeHostile ones. - case SPELL_EVARDS_BLACK_TENTACLES: - // Fortitude save, but if we are immune to the hits, its impossible to hurt us - { - // If save immune OR AC immune, we ignore this. - if(25 >= GetAC(OBJECT_SELF) && nImmuneLevel < 4 && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 2) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Nearest string of tag - oAOE = GetNearestAOECastBy(AI_AOE_PER_EVARDS_BLACK_TENTACLES, oCaster); - } - } - case SPELL_SPIKE_GROWTH: - case SPELL_VINE_MINE_HAMPER_MOVEMENT: - // d4 damage. LOTS of speed loss. - // Reflex save, or immunity, would stop the speed - { - if(nImmuneLevel < 3 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 5) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Both use ENTANGLE AOE's - oAOE = GetNearestAOECastBy(AI_AOE_PER_ENTANGLE, oCaster); - } - } - break; - case SPELL_ENTANGLE: - case SPELL_VINE_MINE_ENTANGLE: - { - if(nImmuneLevel < 1 && - (!GetHasFeat(FEAT_WOODLAND_STRIDE) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_ENTANGLE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 4) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Both use ENTANGLE AOE's - oAOE = GetNearestAOECastBy(AI_AOE_PER_ENTANGLE, oCaster); - } - } - break; - case SPELL_WEB: - { - if(nImmuneLevel < 1 && - (!GetHasFeat(FEAT_WOODLAND_STRIDE) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_ENTANGLE) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 4) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Web AOE - oAOE = GetNearestAOECastBy(AI_AOE_PER_WEB, oCaster); - } - } - break; - // Fort save - case SPELL_STINKING_CLOUD: - { - if(nImmuneLevel < 3 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_POISON) || bIgnoreImmunities) && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_DAZED) || bIgnoreImmunities) && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 6) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Stinking cloud persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGSTINK, oCaster); - } - } - break; - // Fort save - case SPELL_CLOUD_OF_BEWILDERMENT: - { - if(nImmuneLevel < 2 && - ((GetFortitudeSavingThrow(OBJECT_SELF) < nSaveDC + 7) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Bewilderment cloud persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGBEWILDERMENT, oCaster); - } - } - break; - // Special: Mind save is the effect. - case SPELL_STONEHOLD: - { - if(nImmuneLevel < 6 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_MIND_SPELLS) || bIgnoreImmunities) && - ((GetWillSavingThrow(OBJECT_SELF) < nSaveDC + 7) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Stonehold persistant AOE. - oAOE = GetNearestAOECastBy(AI_AOE_PER_STONEHOLD, oCaster); - } - } - break; - // Special: EFFECT_TYPE_SAVING_THROW_DECREASE is the effect. - case SPELL_MIND_FOG: - { - if(nImmuneLevel < 5 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_SAVING_THROW_DECREASE) || bIgnoreImmunities) && - ((GetWillSavingThrow(OBJECT_SELF) < nSaveDC + 6) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Mind fog - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGMIND, oCaster); - } - } - break; - // Special: Feats, knockdown - case SPELL_GREASE: - { - if(nImmuneLevel < 1 && - (!GetIsImmune(OBJECT_SELF, IMMUNITY_TYPE_KNOCKDOWN) || bIgnoreImmunities) && - (!GetHasFeat(FEAT_WOODLAND_STRIDE, OBJECT_SELF) || bIgnoreImmunities) && - ((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 2) || bIgnoreSaves)) - { - bSetAOE = TRUE; - // Grease - oAOE = GetNearestAOECastBy(AI_AOE_PER_GREASE, oCaster); - } - } - break; - // All other ReactionType ones. Some have different saves though! - case SPELL_BLADE_BARRIER: // Reflex - case SPELL_INCENDIARY_CLOUD:// reflex - case SPELL_WALL_OF_FIRE:// Reflex - { - if(nImmuneLevel < 6 && - (((GetReflexSavingThrow(OBJECT_SELF) < nSaveDC + 6) && - !GetHasFeat(FEAT_IMPROVED_EVASION) && - !GetHasFeat(FEAT_EVASION)) || bIgnoreSaves)) - { - bSetAOE = TRUE; - if(nSpellCast == SPELL_BLADE_BARRIER) - { - // BB - oAOE = GetNearestAOECastBy(AI_AOE_PER_WALLBLADE, oCaster); - } - else if(nSpellCast == SPELL_INCENDIARY_CLOUD) - { - // Fog of fire - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGFIRE, oCaster); - } - else if(nSpellCast == SPELL_WALL_OF_FIRE) - { - // Wall of fire - oAOE = GetNearestAOECastBy(AI_AOE_PER_WALLFIRE, oCaster); - } - } - } - break; - case SPELL_ACID_FOG: // Fort: Half. No check, always damages. - case SPELL_CLOUDKILL:// No save! - case SPELL_CREEPING_DOOM: // No save! - { - if(nImmuneLevel < 6) - { - bSetAOE = TRUE; - if(nSpellCast == SPELL_ACID_FOG) - { - // Acid fog - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGACID, oCaster); - } - else if(nSpellCast == SPELL_CLOUDKILL) - { - // Cloud Kill - oAOE = GetNearestAOECastBy(AI_AOE_PER_FOGKILL, oCaster); - } - else if(nSpellCast == SPELL_CREEPING_DOOM) - { - // Creeping doom - oAOE = GetNearestAOECastBy(AI_AOE_PER_CREEPING_DOOM, oCaster); - } - } - } - // Storm - because the AI likes it, we stay in it if it is ours :-) - case SPELL_STORM_OF_VENGEANCE: // Reflex partial. No check, always damages. - { - if(oCaster != OBJECT_SELF && nImmuneLevel < 9) - { - bSetAOE = TRUE; - // Storm of vengance - oAOE = GetNearestAOECastBy(AI_AOE_PER_STORM, oCaster); - } - } - } - if(bSetAOE) - { - if(!GetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast))) - { - SetLocalTimer(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast), 18.0); - // Set nearest AOE - if(GetIsObjectValid(oAOE)) - { - // Set nearest AOE of this spell to the local - object oNearest = GetAIObject(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast)); - if(GetDistanceToObject(oAOE) < GetDistanceToObject(oNearest) || - !GetIsObjectValid(oNearest)) - { - SetAIObject(AI_TIMER_AOE_SPELL_EVENT + IntToString(nSpellCast), oAOE); - } - } - } - } -} -// Gets the nearest AOE cast by oCaster, of sTag. -object GetNearestAOECastBy(string sTag, object oCaster) -{ - int nCnt = 1; - object oAOE = GetNearestObjectByTag(sTag, OBJECT_SELF, nCnt); - object oReturn = OBJECT_INVALID; - // Loop - while(GetIsObjectValid(oAOE) && !GetIsObjectValid(oReturn)) - { - // Check creator - if(GetAreaOfEffectCreator(oAOE) == oCaster) - { - oReturn = oAOE; - } - nCnt++; - oAOE = GetNearestObjectByTag(sTag, OBJECT_SELF, nCnt); - } - return oReturn; -} - -// Gets the amount of protections we have - IE globes -int GetOurSpellLevelImmunity() -{ - int nNatural = GetLocalInt(OBJECT_SELF, AI_SPELL_IMMUNE_LEVEL); - // Stop here, if natural is over 4 - if(nNatural > 4) return nNatural; - - // Big globe affects 4 or lower spells - if(GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, OBJECT_SELF) || nNatural >= 4) - return 4; - // Minor globe is 3 or under - if(GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, OBJECT_SELF) || - // Shadow con version - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, OBJECT_SELF) || - nNatural >= 3) - return 3; - // 2 and under is ethereal visage. - if(GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, OBJECT_SELF) || nNatural >= 2) - return 2; - // Ghostly Visarge affects 1 or 0 level spells, and any spell immunity. - if(GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, OBJECT_SELF) || nNatural >= 1 || - // Or shadow con version. - GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE, OBJECT_SELF)) - return 1; - // Return nNatural, which is 0-9 - return FALSE; -} diff --git a/_module/nss/nw_c2_defaultd.nss b/_module/nss/nw_c2_defaultd.nss deleted file mode 100644 index f676cf33..00000000 --- a/_module/nss/nw_c2_defaultd.nss +++ /dev/null @@ -1,326 +0,0 @@ -/*/////////////////////// [On User Defined] //////////////////////////////////// - Filename: J_AI_OnUserDef or nw_c2_defaultd -///////////////////////// [Workings] /////////////////////////////////////////// - 1.4 Adds proper Pre-event functionality. Use this to make sure you keep the - AI working, but making small additions using this event. - - Can be deleted to save space if you want :-) - - How to use user defined events (brief): - - There are a set of optional Spawn In values you can set within the spawn file. - If you set one of the Events to fire, it will activate this script. Then, - under the correct choice (EG I choose the Pre-Heartbeat event, then I - uncomment the line "SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER);" - and find, in this file, the section with EVENT_HEARTBEAT_PRE_EVENT above it). - add in whatever to do. - - With my Pre-heartbeat example, if I wanted it to check for a PC, then - check for a combat dummy, and attack it, I'd add this between the brackets: - - // Code: - - // Not in combat, of course! - if(!GetIsInCombat()) - { - // Function in j_inc_npc_attack to get nearest PC - object oPC = GetNearestPCCreature(); - // Why check for a PC? Well, it saves memory - if(GetIsObjectValid(oPC) && GetDistanceToObject(oPC) <= 40.0) - { - object oDummy = GetNearestObjectByTag("DUMMY"); - if(GetIsObjectValid(oDummy)) - { - ClearAllActions(); - ActionAttack(oDummy); - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_HEARTBEAT_PRE_EVENT); - // Stop rest of script - return; - } - } - } - - // End code - - Simple, no? - - You can delete sections you don't need, and is recommended as long as you know - how to use User Defined events. -///////////////////////// [History] //////////////////////////////////////////// - 1.3 - Added in with some documentation - 1.4 - Changed Pre-events. Now, it uses Execute Script. Will need to set - a special string on the creature to now what script to fire. - - It means they work correctly, however! -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: Dependant on event. See seperate event scripts. -///////////////////////// [On User Defined] //////////////////////////////////*/ - -// This contains a lot of useful things. -// - Combat starting -// - Constant values -// - Get/Set spawn in values. -#include "J_INC_OTHER_AI" -// This contains some useful things to get NPC's to attack and so on. -#include "J_INC_NPC_ATTACK" - -/************************ [UDE Values] ***************************************** - These are uneeded, but here for reference. Use the constants in the file - "j_inc_constants" like "EVENT_HEARTBEAT_PRE_EVENT" which is classed as 1021. - * The normal death event might not fire before the creature has vanished. - Use the Pre-event (but with no stopping the death event) if you want a special - death event to happen. - - Name Normal-End event - Pre-Event - Heartbeat Event 1001 1021 - Percieve Event 1002 1022 - Combat Round Event 1003 1023 - Dialog Event 1004 1024 - Attack Event 1005 1025 - Damaged Event 1006 1026 - Death Event 1007 1027 - Disturbed Event 1008 1028 - Rested Event 1009 1029 - Spell Cast At Event 1011 1031 - Combat Action Event 1012 1032 - Damaged 1HP Event 1014 - - Blocked Event 1015 1035 -************************* [UDE Values] ****************************************/ - -void main() -{ - // Get the user defined number. - // * NOTE: YOU MUST USE AI_GetUDENumber(), not GetUserDefinedEventNumber()! - int nEvent = AI_GetUDENumber(); - - // Events. - switch(nEvent) - { - // Event Heartbeat - // Arguments: Basically, none. Nothing activates this script. Fires every 6 seconds. - case EVENT_HEARTBEAT_PRE_EVENT: - { - // This fires before the rest of the On Heartbeat file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_HEARTBEAT_PRE_EVENT); - } - break; - case EVENT_HEARTBEAT_EVENT: - { - // This fires after the rest of the On Heartbeat file does - - } - break; - - // Event Percieve - // Arguments: GetLastPerceived, GetLastPerceptionSeen, GetLastPerceptionHeard, - // GetLastPerceptionVanished, GetLastPerceptionInaudible. - case EVENT_PERCIEVE_PRE_EVENT: - { - // This fires before the rest of the On Percieve file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_PERCIEVE_PRE_EVENT); - } - break; - case EVENT_PERCIEVE_EVENT: - { - // This fires after the rest of the On Percieve file does - - } - break; - - // Event Combat Round End - // Arguments: GetAttackTarget, GetLastHostileActor, GetAttemptedAttackTarget, - // GetAttemptedSpellTarget (Or these are useful at least!) - case EVENT_END_COMBAT_ROUND_PRE_EVENT: - { - // This fires before the rest of the On Combat Round End file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_END_COMBAT_ROUND_PRE_EVENT); - } - break; - case EVENT_END_COMBAT_ROUND_EVENT: - { - // This fires after the rest of the On Combat Round End file does - - } - break; - - // Event Dialogue - // Arguments: GetListenPatternNumber, GetLastSpeaker, TestStringAgainstPattern, - // GetMatchedSubstring (I think), - case EVENT_ON_DIALOGUE_PRE_EVENT: - { - // This fires before the rest of the dialog file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ON_DIALOGUE_PRE_EVENT); - } - break; - case EVENT_ON_DIALOGUE_EVENT: - { - // This fires after the rest of the dialog file does - - } - break; - - // Event Attacked - // Arguments: GetLastAttacker, GetLastWeaponUsed, GetLastAttackMode, - // GetLastAttackType - case EVENT_ATTACK_PRE_EVENT: - { - // This fires before the rest of the Attacked file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ATTACK_PRE_EVENT); - } - break; - case EVENT_ATTACK_EVENT: - { - // This fires after the rest of the Attacked file does - - } - break; - - // Event Damaged - // Arguments: GetTotalDamageDealt, GetLastDamager, GetCurrentHitPoints - // (and max), GetDamageDealtByType - case EVENT_DAMAGED_PRE_EVENT: - { - // This fires before the rest of the damaged file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DAMAGED_PRE_EVENT); - } - break; - case EVENT_DAMAGED_EVENT: - { - // This fires after the rest of the damaged file does - - } - break; - - // Event Death - // Arguments: GetLastKiller - case EVENT_DEATH_PRE_EVENT: - { - // This fires before the rest of the death file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DEATH_PRE_EVENT); - } - break; - case EVENT_DEATH_EVENT: - { - // This fires after the rest of the death file does - - } - break; - - // Event Distrubed - // Arguments: GetInventoryDisturbItem, GetLastDisturbed, - // GetInventoryDisturbType (should always be stolen :-( ). - case EVENT_DISTURBED_PRE_EVENT: - { - // This fires before the rest of the disturbed file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_DISTURBED_PRE_EVENT); - } - break; - case EVENT_DISTURBED_EVENT: - { - // This fires after the rest of the disturbed file does - - } - break; - - // Event Rested - // Arguments: None - // Note: Not sure if this fires at the end of rest event, but the actual - // duration of the rest is 0, so you never "see" it. - case EVENT_RESTED_PRE_EVENT: - { - // This fires before the rest of the rested file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_RESTED_PRE_EVENT); - } - break; - case EVENT_RESTED_EVENT: - { - // This fires after the rest of the rested file does - - } - break; - - // Event Spell cast at - // Arguments: GetLastSpellCaster, GetLastSpellHarmful GetLastSpell() - case EVENT_SPELL_CAST_AT_PRE_EVENT: - { - // This fires before the rest of the Spell Cast At file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_SPELL_CAST_AT_PRE_EVENT); - } - break; - case EVENT_SPELL_CAST_AT_EVENT: - { - // This fires after the rest of the Spell Cast At End file does - - } - break; - - // Event Blocked - // Arguements: GetBlockingDoor, GetIsDoorActionPossible, GetLocked, - // GetLockKeyRequired, GetLockKeyTag, GetLockUnlockDC, GetPlotFlag. - case EVENT_ON_BLOCKED_PRE_EVENT: - { - // This fires before the rest of the on blocked file does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_ON_BLOCKED_PRE_EVENT); - } - break; - case EVENT_ON_BLOCKED_EVENT: - { - // This fires after the rest of the on blocked file does - - } - break; - - // Event Combat Action - // Arguments: GetAttackTarget(), and lots of others. - // Note: Fires when DetermineCombatRound runs to perform an action. - case EVENT_COMBAT_ACTION_PRE_EVENT: - { - // This fires before the rest of the Determine Combat Round call does - - // Exit (Stop the rest of the script) - SetToExitFromUDE(EVENT_COMBAT_ACTION_PRE_EVENT); - } - break; - case EVENT_COMBAT_ACTION_EVENT: - { - // This fires after the rest of the Determine Combat Round call does - // Calling ClearAllActions should stop any actions added in the call. - - } - break; - - // Event Damaged at 1 HP. - // Arguments: None really. - // Note: Fires OnDamaged, when we have exactly 1HP. Use for Immortal Creatures. - case EVENT_DAMAGED_AT_1_HP: - { - // This fires after the rest of the On Combat Round End file does - - } - break; - - // End all in-built events. Add more in here, if you wish. - } -} diff --git a/_module/nss/nw_c2_defaulte.nss b/_module/nss/nw_c2_defaulte.nss deleted file mode 100644 index f7301cc8..00000000 --- a/_module/nss/nw_c2_defaulte.nss +++ /dev/null @@ -1,332 +0,0 @@ -/*/////////////////////// [On Blocked] ///////////////////////////////////////// - Filename: J_AI_OnBlocked or nw_c2_defaulte -///////////////////////// [On Blocked] ///////////////////////////////////////// - Added in user defined constant - won't open any doors. - 0 = Default (even if not set) opens as appropriate - 1 = Always bashes the door. - 2 = Never open any doors - 3 = Never opens plot doors - - They will: (int is intellgience needed) - 1. Open if not trapped (7 int) - 2. Unlock if possible, and rank is high enough, and it needs no key and is not trapped (7 int) - 3. Untrap the door, if possible, if trapped (7 int) - 4. Else, if has high enough stats, try Knock. (10 int) - 6. Else Equip appropriate weapons and bash (5 int) - - Note: This also fires for blocking via. creatures. It is optimised, and - works by re-targeting and doing a few small things to do with blocking. -///////////////////////// [History] //////////////////////////////////////////// - 1.0 - Opens with Knock. Unlocks door. Ignores trapped doors. - 1.3 - Debug messages. - - New events, even if the change of using them is small! - - No ClearAllactions so any previous movings will carry on once the door is gone. - - Removed debug messages - - Added Creature reaction code - 1.4 - Need to add a "hands" check (done on spawn, to set a setting to not - open doors at all, IE: We do NOT have hands, do not open doors), so - its a little more realistic "out of the box" - - Fixed an instance of GetObjectSeen being repeated. - - Fixed the variable AI_DOOR_INTELLIGENCE not being got via GetAIInteger(). - - Removed unneeded else statement. -///////////////////////// [Workings] /////////////////////////////////////////// - Uses simple code to deal with a door in the best way possible. - - Uses DoDoorAction, which is added to the top of an action queue and doesn't, - therefore, delete any ActionAttack's and so on below it. (Or I hope it - is like this) - - Creatures are reacted by with ClearAllActions usually. -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetBlockingDoor, GetIsDoorActionPossible, GetLocked, GetLockKeyRequired - GetLockKeyTag, GetLockUnlockDC, GetPlotFlag, DoDoorAction -///////////////////////// [On Blocked] ///////////////////////////////////////*/ - -#include "J_INC_OTHER_AI" - -// Fires the end-blocked event. -void FireBlockedEvent(); -// Range attack oTarget. -int RangedAttack(object oTarget = OBJECT_INVALID); - -void main() -{ - // Pre-on blocked-event. Returns TRUE if we interrupt this script call. - if(FirePreUserEvent(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, EVENT_ON_BLOCKED_PRE_EVENT)) return; - - // AI status check. Is the AI on? - if(GetAIOff()) return; - - // This CAN return a blocking creature. - object oBlocker = GetBlockingDoor(); - int nBlockerType = GetObjectType(oBlocker); - - if(!GetIsObjectValid(oBlocker)) return; - - // Anyone blocked by an enemy will re-target them (and attack them), blocked - // by someone they cannot get they will cast seeing spells and react, and if - // blocked by a friend, they may run back and use a ranged weapon if they - // have one. - if(nBlockerType == OBJECT_TYPE_CREATURE) - { - // Are we doing something that should not be overriden? (even fleeing, - // if stuck, we can't do anything else then move again on heartbeat!) - if(GetIsPerformingSpecialAction()) return; - - // Blocked timer, we normally do an action. A small timer stops a lot - // of lag. - if(GetLocalTimer(AI_TIMER_BLOCKED)) return; - - // Set the timer for 1 second - SetLocalTimer(AI_TIMER_BLOCKED, 1.0); - - // Is it an enemy? - if(GetIsEnemy(oBlocker)) - { - // Check if seen or heard - if(GetObjectSeen(oBlocker) || GetObjectHeard(oBlocker)) - { - // Enemy :-) We can re-target (as know of thier presence), using - // them as a target. - // - This overrides even casting a spell - basically, as we should - // be moving, this will re-cast it at someone or something in range - SetAIObject(AI_ATTACK_SPECIFIC_OBJECT, oBlocker); - - // Check if we can do combat - if we cannot, we can re-do combat - // next time - if(!GetIsBusyWithAction()) - { - // Attacks if we are not attacking - ClearAllActions(); - DetermineCombatRound(oBlocker); - return; - } - } - else - { - // Invisible? Not there? Some odd error? We set that we know of - // someone invisible, and will attack if not in combat. - if(GetHasEffect(EFFECT_TYPE_INVISIBILITY, oBlocker) || - GetStealthMode(oBlocker) == STEALTH_MODE_ACTIVATED) - { - SetAIObject(AI_LAST_TO_GO_INVISIBLE, oBlocker); - } - // Shout to allies - AISpeakString(AI_SHOUT_CALL_TO_ARMS); - - // Check if we can do combat - if(!GetIsBusyWithAction()) - { - // Attacks if we are not attacking - ClearAllActions(); - DetermineCombatRound(); - return; - } - } - } - // Else is non-enemy, a friend or neutral - else - { - // As we are blocked by them, we re-do combat - we have a choice of - // either using a Bow to attack our target (if that was what - // we were doing) and move back a little, or re-initiate combat - - // Were we attacking in combat? - object oPrevious = GetAttackTarget(); - - // Check action - if(GetCurrentAction() == ACTION_ATTACKOBJECT) - { - // This gets set to FALSE if we can cutthrough attack, - // or whatever. - - int bPreviousAttackFailed = FALSE; - // Check if we can see our previous target - if(GetObjectSeen(oPrevious) || - (GetObjectHeard(oPrevious) && LineOfSightObject(OBJECT_SELF, oPrevious))) - { - // We can! see if we can re-attack with ranged weapon, else - // doesn't matter we can see them - bPreviousAttackFailed = RangedAttack(oPrevious); - } - - // If we havn't added an action yet... - if(bPreviousAttackFailed == FALSE) - { - // We have not stopped the script - so determine combat - // round against nearest seen or heard enemy! - if(!RangedAttack()) - { - // Else normal round to try and get a new target - ClearAllActions(); - DetermineCombatRound(); - } - } - // Action attack, normally means melee attack. If we can, we - // attack our previous target if seen, ELSE we will re-initate - // combat. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // Fire the On blocked event as normal - FireBlockedEvent(); - return; - } - else // if(nAction == ACTION_CASTSPELL and others) - { - // Reinitate combat, but don't attack oPrevious - ClearAllActions(); - DetermineCombatRound(); - - // Action attack, normally means melee attack. If we can, we - // attack our previous target if seen, ELSE we will re-initate - // combat. - AISpeakString(AI_SHOUT_I_WAS_ATTACKED); - - // Fire the On blocked event as normal - FireBlockedEvent(); - return; - } - } - } - // Placeable - Currently not returned, however, added just in case! - else if(nBlockerType == OBJECT_TYPE_PLACEABLE) - { - // Check for plot, and therefore attack it to bring it down. - // - Remember, ActionAttack will re-initiate when combat round fires - // again in 3 or 6 seconds (or less, if we just were moving) - if(!GetPlotFlag(oBlocker) && - GetIsPlaceableObjectActionPossible(oBlocker, PLACEABLE_ACTION_BASH)) - { - // Do placeable action - DoPlaceableObjectAction(oBlocker, PLACEABLE_ACTION_BASH); - FireBlockedEvent(); - return; - } - return; - } - // Door behaviour - else if(nBlockerType == OBJECT_TYPE_DOOR) - { - int nDoorIntelligence = GetAIInteger(AI_DOOR_INTELLIGENCE); - int nInt = GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE); - if(nDoorIntelligence == 1)// 1 = Always bashes the doors, plot, locked or anything. - { - DoDoorAction(oBlocker, DOOR_ACTION_BASH); - // We re-initiate combat. - FireBlockedEvent(); - return; - } - else if(nDoorIntelligence == 2)// 2 = Never open anything, bashing or not. - { - FireBlockedEvent(); - return; - } - else if(nDoorIntelligence == 3)// 3 = Never tries anything against plot doors. - { - if(GetPlotFlag(oBlocker)) - { - FireBlockedEvent(); - return; - } - } - if(nInt >= 5) - { - // Need some intelligence :-) - if(nInt >= 7) - { - // Right, first, we may...shock...open it!!! - // Checks Key, lock, trap and if the action is possible. - if(GetIsDoorActionPossible(oBlocker, DOOR_ACTION_OPEN) && - !GetLocked(oBlocker) && - !GetIsTrapped(oBlocker) && - (!GetLockKeyRequired(oBlocker) || - (GetLockKeyRequired(oBlocker) && GetItemPossessor(GetObjectByTag(GetLockKeyTag(oBlocker))) == OBJECT_SELF))) - { - DoDoorAction(oBlocker, DOOR_ACTION_OPEN); - FireBlockedEvent(); - return; - } - // Unlock it with the skill, if it is not trapped and we can :-P - // We take 20 off the door DC, thats our minimum roll, after all. - if(GetLocked(oBlocker) && - !GetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER) && - !GetLockKeyRequired(oBlocker) && GetHasSkill(SKILL_OPEN_LOCK) && - GetIsDoorActionPossible(oBlocker, DOOR_ACTION_UNLOCK) && !GetIsTrapped(oBlocker) && - (GetSkillRank(SKILL_OPEN_LOCK) >= (GetLockLockDC(oBlocker) - 20))) - { - DoDoorAction(oBlocker, DOOR_ACTION_UNLOCK); - FireBlockedEvent(); - return; - } - // Specilist thing - knock - if(nInt >= 10) - { - if((GetIsDoorActionPossible(oBlocker, DOOR_ACTION_KNOCK)) && - GetLockUnlockDC(oBlocker) <= 25 && - !GetLockKeyRequired(oBlocker) && GetHasSpell(SPELL_KNOCK)) - { - DoDoorAction(oBlocker, DOOR_ACTION_KNOCK); - FireBlockedEvent(); - return; - } - } - } - // If Our Int is over 5, we will bash after everything else. - if(GetIsDoorActionPossible(oBlocker, DOOR_ACTION_BASH) && !GetPlotFlag(oBlocker)) - { - if(GetAttackTarget() != oBlocker) - { - DoDoorAction(oBlocker, DOOR_ACTION_BASH); - } - FireBlockedEvent(); - return; - } - } - } - // Fire Blocked event - FireBlockedEvent(); -} -// Fires the end-blocked event. -void FireBlockedEvent() -{ - // Fire End-blocked-UDE - FireUserEvent(AI_FLAG_UDE_ON_BLOCKED_EVENT, EVENT_ON_BLOCKED_EVENT); -} -// Range attack oTarget. -int RangedAttack(object oTarget) -{ - // If we are primarily melee, don't use this - if(!GetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER)) return FALSE; - - object oRangedTarget = oTarget; - if(!GetIsObjectValid(oRangedTarget)) - { - oRangedTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_IS_ALIVE, TRUE); - if(!GetIsObjectValid(oTarget)) - { - oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_HEARD, CREATURE_TYPE_IS_ALIVE, TRUE); - // heard must be in LOS to attack, as we are probably stuck - if(!GetIsObjectValid(oTarget) && LineOfSightObject(OBJECT_SELF, oRangedTarget)) - { - return FALSE; - } - } - } - // Ranged weapon attack against oTarget - // doesn't matter we can see them - object oRanged = GetAIObject(AI_WEAPON_RANGED); - int nAmmo = GetAIInteger(AI_WEAPON_RANGED_AMMOSLOT); - - // Check ammo and validness - if(GetIsObjectValid(oRanged) && (nAmmo == INVENTORY_SLOT_RIGHTHAND || - GetIsObjectValid(GetItemInSlot(nAmmo)))) - { - // Attack with it - ClearAllActions(); - ActionEquipItem(oRanged, INVENTORY_SLOT_RIGHTHAND); - ActionAttack(oRangedTarget); - // Stop - return TRUE; - } - return FALSE; -} diff --git a/_module/nss/nw_c2_dimdoors.nss b/_module/nss/nw_c2_dimdoors.nss deleted file mode 100644 index b9f03cda..00000000 --- a/_module/nss/nw_c2_dimdoors.nss +++ /dev/null @@ -1,15 +0,0 @@ -// Dimension Doors spawn in -// This is the DimDoors varient. It requires "nw_c2_dimdoor" in the UDE - -// Flags combat round event, and then fires the default spawn in script. - -#include "J_INC_CONSTANTS" - -void main() -{ - // Spawn in condition - SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, AI_UDE_MASTER); - - // Execute the default On Spawn file. - ExecuteScript("nw_c2_default9", OBJECT_SELF); -} diff --git a/_module/nss/nw_c2_dropin9.nss b/_module/nss/nw_c2_dropin9.nss deleted file mode 100644 index 3226088b..00000000 --- a/_module/nss/nw_c2_dropin9.nss +++ /dev/null @@ -1,23 +0,0 @@ -// Drop in - EffectAppear used on us, IF we are a flying creature. -// Uses the SoU "spellsIsFlying" so is updated with new updates, and makes sure -// it doesn't make things spawn in that shouldn't. - -// It also is pretty clever and executes the default On Spawn file after -// the appear animation. - -#include "X0_I0_SPELLS" - -void main() -{ - // Are we flying? - if(spellsIsFlying(OBJECT_SELF)) - { - // Generate effect - effect eAppear = EffectAppear(); - - // Apply it to us instantly. - ApplyEffectToObject(DURATION_TYPE_INSTANT, eAppear, OBJECT_SELF); - } - // Execute the default On Spawn file. - ExecuteScript("nw_c2_default9", OBJECT_SELF); -} diff --git a/_module/nss/nw_c2_gargoyle.nss b/_module/nss/nw_c2_gargoyle.nss deleted file mode 100644 index fe449f60..00000000 --- a/_module/nss/nw_c2_gargoyle.nss +++ /dev/null @@ -1,28 +0,0 @@ -//:://///////////////////////////////////////////// -//:: NW_C2_GARGOYLE.nss -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - on gargoyle's heartbeat, if no PC nearby then become a statue -*/ -//::////////////////////////////////////////////// -//:: Created By: Brent -//:: Created On: January 17, 2001 -//::////////////////////////////////////////////// -//:: Noel made the orientation correct, May 2002 -//:: January 2003: Yaron: Made it look cooler - -void main() -{ - object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); - if ((GetIsObjectValid(oPC) != TRUE) || (GetIsDead(oPC) == TRUE) || GetDistanceToObject(oPC) >= 20.0) - { - location l = GetLocation(OBJECT_SELF); - location lNew = Location( GetAreaFromLocation(l), GetPositionFromLocation(l), GetFacingFromLocation(l) + 180); -// CreateObject( OBJECT_TYPE_PLACEABLE, "plc_statue3", lNew ); - CreateObject(OBJECT_TYPE_PLACEABLE, "stat_emraldgarg", lNew); - SetIsDestroyable( TRUE, FALSE, FALSE ); - DestroyObject(OBJECT_SELF, 0.5); - } -} - diff --git a/_module/nss/nw_c2_herbivore.nss b/_module/nss/nw_c2_herbivore.nss deleted file mode 100644 index 40b0abea..00000000 --- a/_module/nss/nw_c2_herbivore.nss +++ /dev/null @@ -1,35 +0,0 @@ -// Herbivore -// - Always runs. Doesn't open doors. Animations. - -#include "j_inc_spawnin" - -void main() -{ - SetAIInteger(AI_MORALE, -1); - // Always run - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by ENEMIES who speak in Stars - IE - // "*Nods*" will be ignored, while "Nods" will not, nor "*Nods" - - SetAIInteger(AI_DOOR_INTELLIGENCE, 2); - // This will determine what to do with blocking doors. Default is 0 or not set, which - // means intelligence will take the key, and they may unlock, untrap, knock or bash it. - // 1 = Always bashes the door (does not check for plot flag, or if it can be opened). - // 2 = Never open any doors (none! Just stops there) - // 3 = Never attempts to open (bash or anything) plot doors - - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Animations - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - - // Note: You shouldn't really remove this. Also performs hiding ETC. - DelayCommand(2.0f, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/nw_c2_lycan_9.nss b/_module/nss/nw_c2_lycan_9.nss deleted file mode 100644 index 08d205c8..00000000 --- a/_module/nss/nw_c2_lycan_9.nss +++ /dev/null @@ -1,38 +0,0 @@ -// Lycanthorpe spawn in file. -// - On attacked event. Fearless. - -#include "j_inc_spawnin" - -void main() -{ - SetAIInteger(AI_INTELLIGENCE, 10); - // This is the intelligence of the creature 1-10. Default to 10 - // Read the file in "Explainations" about this intelligence for more info. - - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Fearless - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by ENEMIES who speak in Stars - IE - // "*Nods*" will be ignored, while "Nods" will not, nor "*Nods" - - SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - - // Note: You shouldn't really remove this. Also performs hiding ETC. - DelayCommand(2.0f, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/nw_c2_omnivore.nss b/_module/nss/nw_c2_omnivore.nss deleted file mode 100644 index 51e1e941..00000000 --- a/_module/nss/nw_c2_omnivore.nss +++ /dev/null @@ -1,37 +0,0 @@ -// Spawn in default for omnivores. -// Omnivore script, no opening doors, random walking. Fearless - -#include "j_inc_spawnin" - -void main() -{ - SetAIInteger(AI_INTELLIGENCE, 10); - // This is the intelligence of the creature 1-10. Default to 10 - // Read the file in "Explainations" about this intelligence for more info. - - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // This will make the creature never flee at all. - // This ONLY AFFECTS MORALE! Here, uncommented by default. :-) - // Note: This is set if we are Immune by item/feat/fearless race, at the end of spawn - - SetAIInteger(AI_DOOR_INTELLIGENCE, 2); - // This will determine what to do with blocking doors. Default is 0 or not set, which - // means intelligence will take the key, and they may unlock, untrap, knock or bash it. - // 1 = Always bashes the door (does not check for plot flag, or if it can be opened). - // 2 = Never open any doors (none! Just stops there) - // 3 = Never attempts to open (bash or anything) plot doors - - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Animations - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - - // Note: You shouldn't really remove this. Also performs hiding ETC. - DelayCommand(2.0f, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/nw_c2_stnkbtdie.nss b/_module/nss/nw_c2_stnkbtdie.nss deleted file mode 100644 index 91405ab7..00000000 --- a/_module/nss/nw_c2_stnkbtdie.nss +++ /dev/null @@ -1,29 +0,0 @@ -//:://///////////////////////////////////////////// -//:: Stink Beetle OnDeath Event -//:: Copyright (c) 2002 Bioware Corp. -//::////////////////////////////////////////////// -/* - Releases the Stink Beetle's Stinking Cloud - special ability OnDeath. -*/ -//::////////////////////////////////////////////// -//:: Created By: Andrew -//:: Created On: Jan 2002 -//::////////////////////////////////////////////// - -// Jasperre - added execute script for default death file (especially to remove corpses) - -void main() -{ - //Declare major variables - effect eAOE = EffectAreaOfEffect(AOE_MOB_TYRANT_FOG,"NW_S1_Stink_A"); - location lTarget = GetLocation(OBJECT_SELF); - - //Create the AOE object at the selected location - ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(2)); - - // Jaspere - Execute death script - - // Fire the normal death script - ExecuteScript("nw_c2_default7", OBJECT_SELF); -} diff --git a/_module/nss/nw_s2_layonhand.nss b/_module/nss/nw_s2_layonhand.nss deleted file mode 100644 index 921eb7da..00000000 --- a/_module/nss/nw_s2_layonhand.nss +++ /dev/null @@ -1,76 +0,0 @@ -//:://///////////////////////////////////////////// -//:: Lay_On_Hands -//:: NW_S2_LayOnHand.nss -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - The Paladin is able to heal his Chr Bonus times - his level. -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Aug 15, 2001 -//:: Modified 69MEH69 JUL2003 -//::////////////////////////////////////////////// -#include "69_hench_lib" -#include "NW_I0_SPELLS" -#include "prc_inc_racial" -void main() -{ - //Declare major variables - object oTarget = GetSpellTargetObject(); - int nChr = GetAbilityModifier(ABILITY_CHARISMA); - if (nChr < 0) - { - nChr = 0; - } - int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN); - //Caluclate the amount to heal - int nHeal = nLevel * nChr; - if(nHeal <= 0) - { - nHeal = 1; - } - effect eHeal = EffectHeal(nHeal); - effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); - effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE); - effect eDam; - int nTouch; - string sTag = GetTag(oTarget); - object oArea = GetArea(oTarget); - int nCHP = GetLocalInt(oArea, "nCHP" +sTag); - //Check if the target is an undead - if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - //Fire cast spell at event for the specified target - SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS)); - //Make a ranged touch attack - nTouch = TouchAttackMelee(oTarget); - if(nTouch > 0) - { - if(nTouch == 2) - { - nHeal *= 2; - } - SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS)); - eDam = EffectDamage(nHeal, DAMAGE_TYPE_DIVINE); - //Apply the VFX impact and effects - ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget); - } - } - else - { - //Fire cast spell at event for the specified target - SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS, FALSE)); - //Apply the VFX impact and effects - ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); - ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); - if(GetIsHenchmanDying(oTarget)) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHeal); - } - } - -} - diff --git a/_module/nss/nw_s3_balordeth.nss b/_module/nss/nw_s3_balordeth.nss deleted file mode 100644 index 8b36186d..00000000 --- a/_module/nss/nw_s3_balordeth.nss +++ /dev/null @@ -1,62 +0,0 @@ -//:://///////////////////////////////////////////// -//:: Balor On Death -//:: NW_S3_BALORDETH -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - Fireball explosion does 50 damage to all within - 20ft -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Jan 9, 2002 -//::////////////////////////////////////////////// - -#include "NW_I0_SPELLS" -void main() -{ - //Declare major variables - object oCaster = OBJECT_SELF; - int nMetaMagic = GetMetaMagicFeat(); - int nDamage; - float fDelay; - effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL); - effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); - effect eDam; - //Get the spell target location as opposed to the spell target. - location lTarget = GetLocation(OBJECT_SELF); - //Limit Caster level for the purposes of damage - //Apply the fireball explosion at the location captured above. - ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); - //Declare the spell shape, size and the location. Capture the first target object in the shape. - object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); - //Cycle through the targets within the spell shape until an invalid object is captured. - while (GetIsObjectValid(oTarget)) - { - //Fire cast spell at event for the specified target - SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FIREBALL)); - //Get the distance between the explosion and the target to calculate delay - fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20; - if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay)) - { - //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. - nDamage = GetReflexAdjustedDamage(50, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_FIRE); - //Set the damage effect - eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); - if(nDamage > 0) - { - // Apply effects to the currently selected target. - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); - //This visual effect is applied to the target object not the location as above. This visual effect - //represents the flame that erupts on the target not on the ground. - DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); - } - } - //Select the next target within the spell shape. - oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); - } - // Destroy ourselves - we just exploded! - SetIsDestroyable(TRUE, FALSE, FALSE); - SetPlotFlag(OBJECT_SELF, FALSE); - DestroyObject(OBJECT_SELF); -} diff --git a/_module/nss/ondeath_ostland.nss b/_module/nss/ondeath_ostland.nss index c04fbb98..c7ff1094 100644 --- a/_module/nss/ondeath_ostland.nss +++ b/_module/nss/ondeath_ostland.nss @@ -18,14 +18,224 @@ void main() object oNPC = OBJECT_SELF; object oPC = GetLastKiller(); +// Makes sure armor's droppable flag is set to 0 +/* SetDroppableFlag(GetItemInSlot(INVENTORY_SLOT_CHEST, OBJECT_SELF), 0); + + if ((GetResRef(oNPC) == "ra_bandit001") || + (GetResRef(oNPC) == "ra_brigand001") || + (GetResRef(oNPC) == "ra_brigand002")) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC); + + // Give a 3% chance to drop armor &/or equipped weapon + int bDroppableA = d100() > 97; + int bDroppableW = d100() > 97; + int bDroppableS = d100() > 97; + + SetDroppableFlag(oArmor, bDroppableA); + SetDroppableFlag(oWeapon, bDroppableW); + SetDroppableFlag(oWeapon, bDroppableS); + + }*/ + +int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX"); + if(nVFX) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF); + } + int nFirey = GetLocalInt(OBJECT_SELF,"FIREY"); + if (nFirey) + { + effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY"); + if (nShadowy) + { + + effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nStony = GetLocalInt(OBJECT_SELF,"STONY"); + if (nStony) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nWoody = GetLocalInt(OBJECT_SELF,"WOODY"); + if (nWoody) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nIcy = GetLocalInt(OBJECT_SELF,"ICY"); + if (nIcy) + { + effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20"); + if (nConcealed20) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(20, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50"); + if (nConcealed50) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(50, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR"); + if (nGlow == 1) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 2) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 3) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 4) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 5) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 6) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 7) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 8) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 9) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 10) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 11) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 12) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 13) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 14) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + else if (nGlow == 15) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 16) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + //:: Track which PC's have seen Ostland dead SQL_SetLocalIntOnAll(oPC, "bKilledOstland", 1); //:: Set quest stage & update DB. AddPersistentJournalQuestEntry("DishonestPatrol", 1, oPC); +//:: Execute CODI AI NPC OnDeath script + ExecuteScript("no_ai_dth", OBJECT_SELF); + //:: Execute Default NPC OnDeath script - ExecuteScript("nw_c2_default7", OBJECT_SELF); + //ExecuteScript("nw_c2_default7", OBJECT_SELF); //:: Execute PRC NPC OnDeath script ExecuteScript("prc_npc_death", OBJECT_SELF); diff --git a/_module/nss/ostland_ondeath.nss b/_module/nss/ostland_ondeath.nss new file mode 100644 index 00000000..8313d660 --- /dev/null +++ b/_module/nss/ostland_ondeath.nss @@ -0,0 +1,242 @@ +//:://///////////////////////////////////////////// +//:: Name ostland_ondeath +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + Sheriff Ostland's OnDeath script +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221129 +//::////////////////////////////////////////////// + +#include "sql_db_partywide" +#include "pqj_inc" + +void main() +{ + object oNPC = OBJECT_SELF; + object oPC = GetLastKiller(); + +// Makes sure armor's droppable flag is set to 0 +/* SetDroppableFlag(GetItemInSlot(INVENTORY_SLOT_CHEST, OBJECT_SELF), 0); + + if ((GetResRef(oNPC) == "ra_bandit001") || + (GetResRef(oNPC) == "ra_brigand001") || + (GetResRef(oNPC) == "ra_brigand002")) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC); + + // Give a 3% chance to drop armor &/or equipped weapon + int bDroppableA = d100() > 97; + int bDroppableW = d100() > 97; + int bDroppableS = d100() > 97; + + SetDroppableFlag(oArmor, bDroppableA); + SetDroppableFlag(oWeapon, bDroppableW); + SetDroppableFlag(oWeapon, bDroppableS); + + }*/ + +int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX"); + if(nVFX) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF); + } + int nFirey = GetLocalInt(OBJECT_SELF,"FIREY"); + if (nFirey) + { + effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY"); + if (nShadowy) + { + + effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nStony = GetLocalInt(OBJECT_SELF,"STONY"); + if (nStony) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nWoody = GetLocalInt(OBJECT_SELF,"WOODY"); + if (nWoody) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nIcy = GetLocalInt(OBJECT_SELF,"ICY"); + if (nIcy) + { + effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20"); + if (nConcealed20) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(20, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50"); + if (nConcealed50) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(50, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR"); + if (nGlow == 1) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 2) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 3) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 4) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 5) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 6) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 7) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 8) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 9) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 10) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 11) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 12) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 13) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 14) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + else if (nGlow == 15) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 16) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + +//:: Track which PC's have seen Ostland dead + SQL_SetLocalIntOnAll(oPC, "bKilledOstland", 1); + +//:: Set quest stage & update DB. + AddPersistentJournalQuestEntry("DishonestPatrol", 1, oPC); + +//:: Execute CODI AI NPC OnDeath script + ExecuteScript("no_ai_dth", OBJECT_SELF); + +//:: Execute Default NPC OnDeath script + //ExecuteScript("nw_c2_default7", OBJECT_SELF); + +//:: Execute PRC NPC OnDeath script + ExecuteScript("prc_npc_death", OBJECT_SELF); +} diff --git a/_module/nss/ostland_onpercep.nss b/_module/nss/ostland_onpercep.nss new file mode 100644 index 00000000..f9184ec8 --- /dev/null +++ b/_module/nss/ostland_onpercep.nss @@ -0,0 +1,45 @@ +//:://///////////////////////////////////////////// +//:: ostland_onpercep +//:: Copyright (c) 2022 Project RATDOG +//:://///////////////////////////////////////////// +/* + Makes the NPC speak to the PC upon seeing them + the first time. +*/ +//:://///////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221202 +//:://///////////////////////////////////////////// + +void main() +{ +//:: Declare major variables + object oPC = GetLastPerceived(); + object oNPC = OBJECT_SELF; + string sUUID = GetObjectUUID(oPC); + string sTag = GetTag(oNPC); + +//:: Only looks out for players + if (!GetIsPC(oPC)) return; + +//:: Must be seen & not just heard + if (!GetLastPerceptionSeen()) return; + +//:: If NPC has seen PC before stop + int DoOnce = GetLocalInt(oPC,"SeenBy"+sTag); + + if (DoOnce==TRUE) return; + +//:: Execute the PRC NPC OnPerception script + ExecuteScript("prc_npc_percep", OBJECT_SELF); + +//:: Mark that NPC has seen the PC before + SetLocalInt(oPC,"SeenBy"+sTag,GetLocalInt(oPC,"SeenBy"+sTag) + 1); + //SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE); + +//:: Execute the CODI AI NPC OnPerception script + ExecuteScript("no_ai_per", OBJECT_SELF); + +//:: Start conversation + ActionStartConversation(oPC, ""); +} diff --git a/_module/nss/ra_ai_attacked.nss b/_module/nss/ra_ai_attacked.nss new file mode 100644 index 00000000..c3f06633 --- /dev/null +++ b/_module/nss/ra_ai_attacked.nss @@ -0,0 +1,34 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_attacked +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnAttacked event script caller to run CODI + AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + //-------------------------------------------------------------------------- + // GZ: 2003-10-16 + // Make Plot Creatures Ignore Attacks + //-------------------------------------------------------------------------- + if (GetPlotFlag(OBJECT_SELF)) + { + return; + } + +//:: Execute the CODI AI NPC OnAttacked script + ExecuteScript("no_ai_atk", OBJECT_SELF); + +//:: Execute the Default NPC OnAttacked script + //ExecuteScript("nw_c2_default5", OBJECT_SELF); + +//:: Execute the PRC NPC OnAttacked script + ExecuteScript("prc_npc_physatt", OBJECT_SELF); + +} diff --git a/_module/nss/ra_ai_endcmbtrnd.nss b/_module/nss/ra_ai_endcmbtrnd.nss new file mode 100644 index 00000000..90dc23e8 --- /dev/null +++ b/_module/nss/ra_ai_endcmbtrnd.nss @@ -0,0 +1,25 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_endcmbtrnd +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC EndCombatRound event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnCombatRoundEnd script + ExecuteScript("no_ai_cmb", OBJECT_SELF); + +//:: Execute the default NPC OnCombatRoundEnd script + //ExecuteScript("nw_c2_default3", OBJECT_SELF); + +//:: Execute the PRC NPC OnCombatRoundEnd script + ExecuteScript("prc_npc_combat", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_heartbeat.nss b/_module/nss/ra_ai_heartbeat.nss new file mode 100644 index 00000000..4e2dc561 --- /dev/null +++ b/_module/nss/ra_ai_heartbeat.nss @@ -0,0 +1,28 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_heartbeat +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC Heartbeat event script caller to run CODI + AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ +//:: Equips best armor + if ((!GetIsInCombat(OBJECT_SELF) && (GetItemInSlot(INVENTORY_SLOT_CHEST) == OBJECT_INVALID))) + DelayCommand(0.5f, ActionEquipMostEffectiveArmor()); + +//:: Execute the CODI NPC OnHeartbeat script + ExecuteScript("no_ai_hrt", OBJECT_SELF); + +//:: Execute the default NPC OnHeartbeat script + //ExecuteScript("nw_c2_default1", OBJECT_SELF); + +//:: Execute the PRC NPC OnHeartbeat script + ExecuteScript("prc_npc_hb", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_onblocked.nss b/_module/nss/ra_ai_onblocked.nss new file mode 100644 index 00000000..f6a67355 --- /dev/null +++ b/_module/nss/ra_ai_onblocked.nss @@ -0,0 +1,22 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onblocked +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnBlocked event script caller to run CODI + AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnBlocked script + ExecuteScript("no_ai_blk", OBJECT_SELF); + +//:: Execute the PRC NPC OnBlocked script + ExecuteScript("prc_npc_blocked", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_onconverse.nss b/_module/nss/ra_ai_onconverse.nss new file mode 100644 index 00000000..3ea72820 --- /dev/null +++ b/_module/nss/ra_ai_onconverse.nss @@ -0,0 +1,26 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onconverse +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnConversation event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnConversation script + ExecuteScript("no_ai_cnv", OBJECT_SELF); + +//:: Execute the default NPC OnConversation script + //ExecuteScript("nw_c2_default4", OBJECT_SELF); + +//:: Execute the PRC NPC OnConversation script + ExecuteScript("prc_npc_conv", OBJECT_SELF); + +} diff --git a/_module/nss/ra_ai_ondamaged.nss b/_module/nss/ra_ai_ondamaged.nss new file mode 100644 index 00000000..c9188cb9 --- /dev/null +++ b/_module/nss/ra_ai_ondamaged.nss @@ -0,0 +1,33 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_ondamaged +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnDamaged event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + //-------------------------------------------------------------------------- + // GZ: 2003-10-16 + // Make Plot Creatures Ignore Attacks + //-------------------------------------------------------------------------- + if (GetPlotFlag(OBJECT_SELF)) + { + return; + } + +//:: Execute the CODI AI NPC OnDamaged script + ExecuteScript("no_ai_dam", OBJECT_SELF); + +//:: Execute the Default NPC OnDamaged script + //ExecuteScript("nw_c2_default6", OBJECT_SELF); + +//:: Execute the PRC NPC OnDamaged script + ExecuteScript("prc_npc_damaged", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_ondeath.nss b/_module/nss/ra_ai_ondeath.nss new file mode 100644 index 00000000..94587820 --- /dev/null +++ b/_module/nss/ra_ai_ondeath.nss @@ -0,0 +1,233 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_ondeath +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnDeath event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + object oNPC = OBJECT_SELF; + +// Makes sure armor's droppable flag is set to 0 +/* SetDroppableFlag(GetItemInSlot(INVENTORY_SLOT_CHEST, OBJECT_SELF), 0); + + if ((GetResRef(oNPC) == "ra_bandit001") || + (GetResRef(oNPC) == "ra_brigand001") || + (GetResRef(oNPC) == "ra_brigand002")) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC); + + // Give a 3% chance to drop armor &/or equipped weapon + int bDroppableA = d100() > 97; + int bDroppableW = d100() > 97; + int bDroppableS = d100() > 97; + + SetDroppableFlag(oArmor, bDroppableA); + SetDroppableFlag(oWeapon, bDroppableW); + SetDroppableFlag(oWeapon, bDroppableS); + + }*/ + +int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX"); + if(nVFX) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF); + } + int nFirey = GetLocalInt(OBJECT_SELF,"FIREY"); + if (nFirey) + { + effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY"); + if (nShadowy) + { + + effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nStony = GetLocalInt(OBJECT_SELF,"STONY"); + if (nStony) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nWoody = GetLocalInt(OBJECT_SELF,"WOODY"); + if (nWoody) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nIcy = GetLocalInt(OBJECT_SELF,"ICY"); + if (nIcy) + { + effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20"); + if (nConcealed20) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(20, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50"); + if (nConcealed50) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(50, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR"); + if (nGlow == 1) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 2) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 3) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 4) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 5) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 6) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 7) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 8) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 9) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 10) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 11) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 12) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 13) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 14) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + else if (nGlow == 15) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 16) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + +//:: Execute CODI AI NPC OnDeath script + ExecuteScript("no_ai_dth", OBJECT_SELF); + +//:: Execute Default NPC OnDeath script + //ExecuteScript("nw_c2_default7", OBJECT_SELF); + +//:: Execute PRC NPC OnDeath script + ExecuteScript("prc_npc_death", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_ondisturb.nss b/_module/nss/ra_ai_ondisturb.nss new file mode 100644 index 00000000..4f814363 --- /dev/null +++ b/_module/nss/ra_ai_ondisturb.nss @@ -0,0 +1,26 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_ondisturb +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnDisturbed event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnDisturbed script + ExecuteScript("no_ai_dis", OBJECT_SELF); + +//:: Execute the default NPC OnDisturbed script + //ExecuteScript("nw_c2_default8", OBJECT_SELF); + +//:: Execute the PRC NPC OnDisturbed script + ExecuteScript("prc_npc_blocked", OBJECT_SELF); + +} diff --git a/_module/nss/ra_ai_onpercept.nss b/_module/nss/ra_ai_onpercept.nss new file mode 100644 index 00000000..c04556f7 --- /dev/null +++ b/_module/nss/ra_ai_onpercept.nss @@ -0,0 +1,25 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onpercept +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnPerception event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnPerception script + ExecuteScript("no_ai_per", OBJECT_SELF); + +//:: Execute the default NPC OnPerception script + //ExecuteScript("nw_c2_default2", OBJECT_SELF); + +//:: Execute the PRC NPC OnPerception script + ExecuteScript("prc_npc_percep", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_onrested.nss b/_module/nss/ra_ai_onrested.nss new file mode 100644 index 00000000..c87a127a --- /dev/null +++ b/_module/nss/ra_ai_onrested.nss @@ -0,0 +1,25 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onrested +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnRested event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + +//:: Execute the CODI AI NPC OnRested script + ExecuteScript("no_ai_rst", OBJECT_SELF); + +//:: Execute the default NPC OnRested script + //ExecuteScript("nw_c2_defaulta", OBJECT_SELF); + +//:: Execute the PRC NPC OnRested script + ExecuteScript("prc_npc_rested", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_onspawn.nss b/_module/nss/ra_ai_onspawn.nss new file mode 100644 index 00000000..13cc7d87 --- /dev/null +++ b/_module/nss/ra_ai_onspawn.nss @@ -0,0 +1,521 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onspawn +//:: Copyright (c) 2001 Bioware Corp. +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnSpawn event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +/* + 2003-07-28: Georg Zoeller: + + If you set a ninteger on the creature named + "X2_USERDEFINED_ONSPAWN_EVENTS" + The creature will fire a pre and a post-spawn + event on itself, depending on the value of that + variable + 1 - Fire Userdefined Event 1510 (pre spawn) + 2 - Fire Userdefined Event 1511 (post spawn) + 3 - Fire both events + + 2007-12-31: Deva Winblood + Modified to look for X3_HORSE_OWNER_TAG and if + it is defined look for an NPC with that tag + nearby or in the module (checks near first). + It will make that NPC this horse's master. + + 20221201: Jaysyn + Modified to read desired CODI AI spawner + from string var "SPAWN_TYPE" set on the NPC, + defaults to fighter. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Keith Warner, Georg Zoeller +//:: Created On: June 11/03 +//:: Modified By: Jaysyn +//:: Modified On: 20221201 +//::////////////////////////////////////////////// + +const int EVENT_USER_DEFINED_PRESPAWN = 1510; +const int EVENT_USER_DEFINED_POSTSPAWN = 1511; + +#include "NW_I0_GENERIC" +#include "ms_name_inc" +#include "x2_inc_switches" +#include "rnd_commoner_inc" + + + +void ShrinkEm(object oPC) +{ + SetObjectVisualTransform(oPC, OBJECT_VISUAL_TRANSFORM_SCALE, 0.5f); +} + +void GrowEm(object oPC) +{ + SetObjectVisualTransform(oPC, OBJECT_VISUAL_TRANSFORM_SCALE, 1.5f); +} + +void main() +{ + string sTag; + string sResRef = GetResRef(OBJECT_SELF); + + string sSpawnType = "no_spn_ftr"; + + sSpawnType = GetLocalString(OBJECT_SELF,"SPAWN_TYPE"); + + if (sSpawnType == "") + { + sSpawnType = "no_spn_ftr"; + } + + object oNPC; + + // User defined OnSpawn event requested? + int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); + + + // Pre Spawn Event requested + if (nSpecEvent == 1 || nSpecEvent == 3 ) + { + SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); + } + + sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); + if (GetStringLength(sTag)>0) + { // look for master + oNPC=GetNearestObjectByTag(sTag); + if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) + { // master found + AddHenchman(oNPC); + } // master found + else + { // look in module + oNPC=GetObjectByTag(sTag); + if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) + { // master found + AddHenchman(oNPC); + } // master found + else + { // master does not exist - remove X3_HORSE_OWNER_TAG + DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); + } // master does not exist - remove X3_HORSE_OWNER_TAG + } // look in module + } // look for master + + + //:: Sets a random integer on the creature to use with other spell functions + + string sImmune = GetName(OBJECT_SELF)+"_AURA_IMMUNE"; + int nRandomSeed = Random(999); + SetLocalInt(OBJECT_SELF, sImmune, nRandomSeed); + +//:: Creature will quickly & automatically buff itself up with any defensive +//:: spells it has memorized. + + int nAutobuff = GetLocalInt(OBJECT_SELF,"AUTOBUFF"); + if (nAutobuff > 0 ) + { + SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY); + } + +//:: Creature will flee those that close within 7m if they are not friends, +//:: Rangers or Druids. + + int nHerbivore = GetLocalInt(OBJECT_SELF,"CREATURE_VAR_HERBIVORE"); + if (nHerbivore > 0 ) + { + SetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL); + SetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE); + } + +//:: Creature will only attack those that close within 5m and are not friends, +//:: Rangers or Druids. + + int nOmnivore = GetLocalInt(OBJECT_SELF,"CREATURE_VAR_OMNIVORE"); + if (nOmnivore > 0 ) + { + SetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL); + SetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE); + } + + int nOLM = GetLocalInt(OBJECT_SELF,"OLM"); + if (nOLM > 0) + { + DelayCommand(0.0f, ShrinkEm(OBJECT_SELF)); + + effect eSlow = EffectMovementSpeedDecrease(50); + eSlow = SupernaturalEffect(eSlow); + eSlow = ExtraordinaryEffect(eSlow); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSlow,OBJECT_SELF)); + } + + int nHuge = GetLocalInt(OBJECT_SELF,"HUGE"); + if (nHuge > 0) + { + DelayCommand(0.0f, GrowEm(OBJECT_SELF)); + + } + + int nNoStun = GetLocalInt(OBJECT_SELF,"NOSTUN"); + if (nNoStun > 0) + { + effect eNoStun = EffectImmunity(IMMUNITY_TYPE_STUN); + eNoStun = SupernaturalEffect(eNoStun); + eNoStun = ExtraordinaryEffect(eNoStun); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoStun,OBJECT_SELF)); + } + int nNatInvis = GetLocalInt(OBJECT_SELF,"NATURAL_INVIS"); + if (nNatInvis > 0) + { + effect eNatInvis = EffectInvisibility(4); + eNatInvis = SupernaturalEffect(eNatInvis); + eNatInvis = ExtraordinaryEffect(eNatInvis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNatInvis,OBJECT_SELF)); + } + + int nNoSleep = GetLocalInt(OBJECT_SELF,"NOSLEEP"); + if (nNoSleep > 0) + { + effect eNoSleep = EffectImmunity(IMMUNITY_TYPE_SLEEP); + eNoSleep = SupernaturalEffect(eNoSleep); + eNoSleep = ExtraordinaryEffect(eNoSleep); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoSleep,OBJECT_SELF)); + } + + int nNoDaze = GetLocalInt(OBJECT_SELF,"NODAZE"); + if (nNoDaze > 0) + { + effect eNoDaze = EffectImmunity(IMMUNITY_TYPE_DAZED); + eNoDaze = SupernaturalEffect(eNoDaze); + eNoDaze = ExtraordinaryEffect(eNoDaze); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoDaze,OBJECT_SELF)); + } + + int nNoBlind = GetLocalInt(OBJECT_SELF,"NOBLIND"); + if (nNoBlind > 0) + { + effect eNoBlind = EffectImmunity(IMMUNITY_TYPE_BLINDNESS); + eNoBlind = SupernaturalEffect(eNoBlind); + eNoBlind = ExtraordinaryEffect(eNoBlind); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoBlind,OBJECT_SELF)); + } + + int nNoDeaf = GetLocalInt(OBJECT_SELF,"NODEAF"); + if (nNoDeaf > 0) + { + effect eNoDeaf = EffectImmunity(IMMUNITY_TYPE_DEAFNESS); + eNoDeaf = SupernaturalEffect(eNoDeaf); + eNoDeaf = ExtraordinaryEffect(eNoDeaf); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eNoDeaf,OBJECT_SELF)); + } + + int nDeaf = GetLocalInt(OBJECT_SELF,"IS_DEAF"); + if (nDeaf > 0) + { + effect eDeaf = EffectDeaf(); + eDeaf = SupernaturalEffect(eDeaf); + eDeaf = ExtraordinaryEffect(eDeaf); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDeaf,OBJECT_SELF)); + } + + /* Fix for the new golems to reduce their number of attacks */ + + int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS); + if (nNumber >0 ) + { + SetBaseAttackBonus(nNumber); + } + + int nVFX = GetLocalInt(OBJECT_SELF,"SpawnVFX"); + if(nVFX) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(nVFX)),OBJECT_SELF); + } + + int nRegen = GetLocalInt(OBJECT_SELF,"FAST_HEALING"); + if(nRegen) + { + effect eRegen = EffectRegenerate(nRegen, 6.0f); + eRegen = SupernaturalEffect(eRegen); + eRegen = ExtraordinaryEffect(eRegen); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eRegen, OBJECT_SELF)); + } + + int nShadowy = GetLocalInt(OBJECT_SELF,"SHADOWY"); + if (nShadowy) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nStony = GetLocalInt(OBJECT_SELF,"STONY"); + if (nStony) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nFirey = GetLocalInt(OBJECT_SELF,"FIREY"); + if (nFirey) + { + effect eVis = EffectVisualEffect(VFX_DUR_INFERNO_NO_SOUND); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + int nWoody = GetLocalInt(OBJECT_SELF,"WOODY"); + if (nWoody) + { + effect eVis = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed20 = GetLocalInt(OBJECT_SELF,"CONCEALED20"); + if (nConcealed20) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(20, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nConcealed50 = GetLocalInt(OBJECT_SELF,"CONCEALED50"); + if (nConcealed50) + { + effect eVis = EffectVisualEffect(VFX_DUR_BLUR ); + effect eConceal = EffectConcealment(50, 0); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nIcy = GetLocalInt(OBJECT_SELF,"ICY"); + if (nIcy) + { + effect eVis = EffectVisualEffect(VFX_DUR_ICESKIN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + + int nSR = GetLocalInt(OBJECT_SELF,"SPELL_RESISTANCE"); + if ( nSR ) + { + effect eSR = EffectSpellResistanceIncrease(nSR); + eSR = SupernaturalEffect(eSR); + eSR = ExtraordinaryEffect(eSR); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSR,OBJECT_SELF); + } + + int nAttackBonus = GetLocalInt(OBJECT_SELF,"ATTACK_BONUS"); + if ( nAttackBonus ) + { + effect eAttack = EffectAttackIncrease(nAttackBonus); + eAttack = SupernaturalEffect(eAttack); + eAttack = ExtraordinaryEffect(eAttack); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eAttack,OBJECT_SELF); + } + + int nAcidShield = GetLocalInt(OBJECT_SELF,"ACID_SHIELD"); + if ( nAcidShield ) + { + effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d8,DAMAGE_TYPE_ACID); + eShield = SupernaturalEffect(eShield); + eShield = ExtraordinaryEffect(eShield); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF); + } + + int nSerratedEdge = GetLocalInt(OBJECT_SELF,"SERRATED_EDGE"); + if ( nSerratedEdge ) + { + effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d6,DAMAGE_TYPE_SLASHING); + eShield = SupernaturalEffect(eShield); + eShield = ExtraordinaryEffect(eShield); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF); + } + + int nSpikedArmor = GetLocalInt(OBJECT_SELF,"SPIKED_ARMOR"); + if ( nSpikedArmor ) + { + effect eShield = EffectDamageShield(0,DAMAGE_BONUS_1d4,DAMAGE_TYPE_PIERCING); + eShield = SupernaturalEffect(eShield); + eShield = ExtraordinaryEffect(eShield); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eShield,OBJECT_SELF); + } + + int nGlow = GetLocalInt (OBJECT_SELF,"GLOW_COLOR"); + if (nGlow == 1) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 2) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 3) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 4) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_GREY); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 5) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BLUE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 6) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_BROWN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 7) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 8) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 9) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 10) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 11) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 12) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_ORANGE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 13) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_PURPLE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 14) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 15) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + else if (nGlow == 16) + { + effect eVis = EffectVisualEffect(VFX_DUR_GLOW_YELLOW); + eVis = SupernaturalEffect(eVis); + eVis = ExtraordinaryEffect(eVis); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); + } + +// Check for randomizations. + + ms_Nomenclature(OBJECT_SELF); + + int nKeepskin = GetLocalInt(OBJECT_SELF,"RA_KEEPSKIN"); + if (nKeepskin != 1) + { + rnd_skin(OBJECT_SELF); + } + + rnd_skin(OBJECT_SELF); + + int nKeephead = GetLocalInt(OBJECT_SELF,"RA_KEEPHEAD"); + if (nKeephead != 1) + { + rnd_head(OBJECT_SELF); + } + + int nKeeptats = GetLocalInt(OBJECT_SELF,"RA_KEEPTATS"); + if (nKeeptats != 1) + { + rnd_tattoo(OBJECT_SELF); + } + + +//:: Execute OnSpawn script. + if (sResRef == "monst_spider004") + { + //:: Execute drop in from above spawn. + ExecuteScript("nw_c2_dropin9", OBJECT_SELF); + } + else + { + //:: Execute CODI AI OnSpawn script. + ExecuteScript(sSpawnType, OBJECT_SELF); + + //:: Execute default OnSpawn script. + //ExecuteScript("nw_c2_default9", OBJECT_SELF); + } + + //:: Execute PRC OnSpawn script. + ExecuteScript("prc_npc_spawn", OBJECT_SELF); + + + //Post Spawn event requeste + if (nSpecEvent == 2 || nSpecEvent == 3) + { + SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN)); + } + +} diff --git a/_module/nss/ra_ai_onspelled.nss b/_module/nss/ra_ai_onspelled.nss new file mode 100644 index 00000000..0c28dd01 --- /dev/null +++ b/_module/nss/ra_ai_onspelled.nss @@ -0,0 +1,34 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_onspelled +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnSpellCastAt event script caller to run + CODI AI & PRC events. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +void main() +{ + + //-------------------------------------------------------------------------- + // GZ: 2003-10-16 + // Make Plot Creatures Ignore Attacks + //-------------------------------------------------------------------------- + if (GetPlotFlag(OBJECT_SELF)) + { + return; + } + +//:: Execute the CODI AI NPC OnSpellCastAt script + ExecuteScript("no_ai_spt", OBJECT_SELF); + +//:: Execute the Default NPC OnSpellCastAt script + //ExecuteScript("nw_c2_defaultb", OBJECT_SELF); + +//:: Execute the PRC NPC OnSpellCastAt script + ExecuteScript("prc_npc_spellat", OBJECT_SELF); +} diff --git a/_module/nss/ra_ai_userdef.nss b/_module/nss/ra_ai_userdef.nss new file mode 100644 index 00000000..d4bd5b65 --- /dev/null +++ b/_module/nss/ra_ai_userdef.nss @@ -0,0 +1,67 @@ +//:://///////////////////////////////////////////// +//:: Name ra_ai_userdef +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnUserDefined event script caller to run + CODI AI & PRC events. + + May need to actually disable most of this for + the CODI AI. +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221201 +//::////////////////////////////////////////////// + +const int EVENT_USER_DEFINED_PRESPAWN = 1510; +const int EVENT_USER_DEFINED_POSTSPAWN = 1511; +void main() +{ + int nUser = GetUserDefinedEventNumber(); + + if(nUser == EVENT_HEARTBEAT ) //HEARTBEAT + { + + } + else if(nUser == EVENT_PERCEIVE) // PERCEIVE + { + + } + else if(nUser == EVENT_END_COMBAT_ROUND) // END OF COMBAT + { + + } + else if(nUser == EVENT_DIALOGUE) // ON DIALOGUE + { + + } + else if(nUser == EVENT_ATTACKED) // ATTACKED + { + + } + else if(nUser == EVENT_DAMAGED) // DAMAGED + { + + } + else if(nUser == 1007) // DEATH - do not use for critical code, does not fire reliably all the time + { + + } + else if(nUser == EVENT_DISTURBED) // DISTURBED + { + + } + else if (nUser == EVENT_USER_DEFINED_PRESPAWN) + { + + } + else if (nUser == EVENT_USER_DEFINED_POSTSPAWN) + { + + } + +//:: Execute the PRC NPC OnUserDef script + ExecuteScript("prc_npc_userdef", OBJECT_SELF); + +} diff --git a/_module/nss/ra_bandit_spawn.nss b/_module/nss/ra_bandit_spawn.nss index bbceece6..10e02925 100644 --- a/_module/nss/ra_bandit_spawn.nss +++ b/_module/nss/ra_bandit_spawn.nss @@ -1,11 +1,14 @@ //:://///////////////////////////////////////////// //:: Name ra_bandit_spawn -//:: +//:: Copyright (c) 2001 Bioware Corp. +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnSpawn event script caller to run + CODI AI & PRC events. +*/ //::////////////////////////////////////////////// /* - Default On Spawn script - - 2003-07-28: Georg Zoeller: If you set a ninteger on the creature named @@ -23,10 +26,17 @@ nearby or in the module (checks near first). It will make that NPC this horse's master. + 20221201: Jaysyn + Modified to read desired CODI AI spawner + from string var "SPAWN_TYPE" set on the NPC, + defaults to fighter. + */ //::////////////////////////////////////////////// //:: Created By: Keith Warner, Georg Zoeller //:: Created On: June 11/03 +//:: Modified By: Jaysyn +//:: Modified On: 20221201 //::////////////////////////////////////////////// const int EVENT_USER_DEFINED_PRESPAWN = 1510; @@ -52,7 +62,17 @@ void GrowEm(object oPC) void main() { string sTag; + string sResRef = GetResRef(OBJECT_SELF); + + string sSpawnType = GetLocalString(OBJECT_SELF,"SPAWN_TYPE"); + + if (sSpawnType == "") + { + sSpawnType = "no_spw_ftr"; + } + object oNPC; + // User defined OnSpawn event requested? int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); @@ -448,7 +468,7 @@ void main() // Check for randomizations. - // RndBanditArmor(OBJECT_SELF); + RndBanditArmor(OBJECT_SELF); ms_Nomenclature(OBJECT_SELF); @@ -472,11 +492,14 @@ void main() rnd_tattoo(OBJECT_SELF); } - // Execute PRC OnSpawn script. - ExecuteScript("prc_npc_spawn", OBJECT_SELF); - // Execute default OnSpawn script. - ExecuteScript("nw_c2_default9", OBJECT_SELF); +//:: Execute CODI AI OnSpawn script. + ExecuteScript(sSpawnType, OBJECT_SELF); +//:: Execute default OnSpawn script. + //ExecuteScript("nw_c2_default9", OBJECT_SELF); + +//:: Execute PRC OnSpawn script. + ExecuteScript("prc_npc_spawn", OBJECT_SELF); //Post Spawn event requeste if (nSpecEvent == 2 || nSpecEvent == 3) diff --git a/_module/nss/ra_drag_default9.nss b/_module/nss/ra_drag_default9.nss deleted file mode 100644 index b4d77fa4..00000000 --- a/_module/nss/ra_drag_default9.nss +++ /dev/null @@ -1,649 +0,0 @@ -/*/////////////////////// [On Spawn] /////////////////////////////////////////// - Filename: ra_drag_default9 - - Modified J_AI_OnSpawn for dragons. - - Edited: 2021-10-19 - Editor: Jaysyn -///////////////////////// [On Spawn] /////////////////////////////////////////// - This file contains options that will determine some AI behaviour, and a lot - of toggles for turning things on/off. A big read, but might be worthwhile. - - The documentation is actually fully in the readme files, under the name - "On Spawn.html", under "AI File Explanations". - - The order of the options: - - - Important Spawn Settings N/A - - Targeting & Fleeing (AI_TARGETING_FLEE_MASTER) - - Fighting & Spells (AI_COMBAT_MASTER) - - Other Combat - Healing, Skills & Bosses (AI_OTHER_COMBAT_MASTER) - - Other - Death corpses, minor things (AI_OTHER_MASTER) - - User Defined (AI_UDE_MASTER) - - Shouts N/A - - Default Bioware settings (WP's, Anims) (NW_GENERIC_MASTER) - - The OnSpawn file is a settings file. These things are set onto a creature, to - define cirtain actions. If more than one creature has this script, they all - use the settings, unless If/Else statements are used somehow. There is also - the process of setting any spells/feats availible, and hiding and walk waypoints - are started. - - Other stuff: - - Targeting is imporant :-D - - If you delete this script, there is a template for the On Spawn file - in the zip it came in, for use in the "scripttemplate" directory. -///////////////////////// [History] //////////////////////////////////////////// - Note: I have removed: - - Default "Teleporting" and exit/return (this seemed bugged anyway, or useless) - - Spawn in animation. This can be, of course, re-added. - - Day/night posting. This is uneeded, with a changed walk waypoints that does it automatically. - - 1.0-1.2 - Used short amount of spawn options. - 1.3 - All constants names are changed, I am afraid. - - Added Set/Delete/GetAIInteger/Constant/Object. This makes sure that the AI - doesn't ever interfere with other things - it pre-fixes all stored things - with AI_INTEGER_ (and so on) - 1.4 - TO DO: Clear up some old non-working ones - - Added in User Defined part of the script, an auto-turn-off-spells for - Ranger and Paladin classes. Need to test - perhaps 1.64 fixed it? - - - Spawn options changed: - - Removed AI level settings (can still be done manually) - - Added optional (and off by default) fear-visual for fleeing - - -///////////////////////// [Workings] /////////////////////////////////////////// - Note: You can do without all the comments (it may be that you don't want - the extra KB it adds or something, although it does not at all slow down a module) - so as long as you have these at the end: - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0, SpawnWalkWayPoints()); - - Oh, and the include file (Below, "j_inc_spawnin") must be at the top like - here. Also recommended is the AI_INTELLIGENCE and AI_MORALE being set (if - not using custom AI). -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetIsEncounterCreature -///////////////////////// [On Spawn] /////////////////////////////////////////*/ - -// Treasure Includes - See end of spawn for uncomment options. - -//#include "nw_o2_coninclude" -// Uncomment this if you want default NwN Treasure - Uses line "GenerateNPCTreasure()" at the end of spawn. -// - This generates random things from the default pallet based on the creatures level + race - -//#include "x0_i0_treasure" -// Uncomment this if you want the SoU Treasure - Uses line "CTG_GenerateNPCTreasure()" at the end of spawn. -// - This will spawn treasure based on chests placed in the module. See "x0_i0_treasure" for more information. - -// This is required for all spawn in options! -#include "J_INC_SPAWNIN" - -void main() -{ -/************************ [Important Spawn Settings] **************************/ - SetAIInteger(AI_INTELLIGENCE, 16); - // Intelligence value of the creauture. Can be 1-10, read readme's for help. - SetAIInteger(AI_MORALE, 16); - // Will save (See readme). Remember: -1 or below means they always flee. - //SetCustomAIFileName("CUSTOM_AI_FILE"); - // Sets our custom AI file. Really, only animation settings will apply when this is set. - // - Can sort actions against a imputted target (EG: On Percieved enemy) by - // "GetLocalObject(OBJECT_SELF, "AI_TEMP_SET_TARGET");" -/************************ [Important Spawn Settings] **************************/ - -/************************ [Targeting] ****************************************** - All targeting settings. -************************* [Targeting] *****************************************/ - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HP, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest current HP. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_AC, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest AC (as in 1.2). - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HD, AI_TARGETING_FLEE_MASTER); - // Target the lowest hit dice - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_MAGE_CLASSES, AI_TARGETING_FLEE_MASTER); - // We go straight for mages/sorcerors. Nearest one. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_ARCHERS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest enemy with a ranged weapon equipped. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_PCS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest seen PC enemy. - - //SetAIConstant(AI_FAVOURED_ENEMY_RACE, RACIAL_TYPE_HUMAN); - // The AI attacks the nearest enemy, seen, of this race. Use the RACIAL_* constants. - //SetAIConstant(AI_FAVOURED_ENEMY_CLASS, CLASS_TYPE_BARD); - // The AI attacks the nearest enemy, seen, of this class. Use the CLASS_* constants. - - // Target changing - see readme for info. - //SetAIInteger(AI_MAX_TURNS_TO_ATTACK_ONE_TARGET, 6); - // Maximum rounds to attack the current target, before re-checking. - // % Chance to re-set each target type each round (Could result in current target still) - //SetAIInteger(AI_MELEE_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_RANGED_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_SPELL_LAST_TO_NEW_TARGET_CHANCE, 20); - - // We only target PC's if there are any in range if this is set - //SetSpawnInCondition(AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS, AI_TARGETING_FLEE_MASTER); - - // Main explanation of AI_SetAITargetingValues, see the AI readme (spawn file) - // - Remember, uncommenting one will just ignore it (so will never check target's - // AC without TARGETING_AC on) - - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12); - // Spell mantals are checked only for the spell target. Either Absense of or got any. - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 2, 6); - // AC is used for all phisical attacks. Lower targets lower (By default). - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 2, 4); - // Used for spell attacks. Saves are sorta a AC versus spells. - - // Phisical protections. Used by spells, ranged and melee. - // Jasperre - simple check if we are a fighter (hit lower phisicals) or a - // mage (attack higher!) - if(GetBaseAttackBonus(OBJECT_SELF) > ((GetHitDice(OBJECT_SELF)/2) + 1)) - { - // Fighter/Clerics (It is over a mages BAB + 1 (IE 0.5 BAB/Level) target lower - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_LOWER, 2, 6); - } - else - { - // Mages target higher (so dispel/elemental attack those who fighters - // cannot hit as much). (the lowest BAB, under half our hit dice in BAB) - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5); - } - // Base attack bonus. Used for spells and phisical attacks. Checked with GetBaseAttackBonus. - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - // Hit dice - how powerful in levels the enemy is. Used for all checks. - AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3); - - //AI_SetAITargetingValues(TARGETING_HP_PERCENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_CURRENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_MAXIMUM, TARGET_LOWER, 1, 3); - // The HP's are the last thing to choose a target with. -/************************ [Targeting] *****************************************/ - -/************************ [Fleeing] ******************************************** - Fleeing - these are toggled on/off by FEARLESS flag. - - 3 or under intelligence will just run away. 4 or more will know where allies - are, and if there are none, will not run. -************************* [Fleeing] *******************************************/ - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Forces them to not flee. This may be set with AI_SetMaybeFearless at the end. - //SetSpawnInCondition(AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS, AI_TARGETING_FLEE_MASTER); - // This will make the creature never fight against impossible odds (8HD+ different) - //SetSpawnInCondition(AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER); - // This turns OFF any sort of group morale bonuses. - - //SetAIInteger(AMOUNT_OF_HD_DIFFERENCE_TO_CHECK, -2); - // If enemy is within this amount of HD, we do not check morale. - //SetAIInteger(BASE_MORALE_SAVE, 20); - // Base DC of the will save. It is set to 20 + HD difference - Morale - Group morale mod. - //SetAIInteger(HP_PERCENT_TO_CHECK_AT, 80); - // %HP needed to be at to check morale. This doesn't affect "Never fight impossible odds" - //SetSpawnInCondition(AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT, AI_TARGETING_FLEE_MASTER); - // This will turn off overriding HP checks. AI may decide to run even - // not at the %HP above, this turns the checks off. - - //SetAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6); - // Damage needed to be done at once to get a massive morale penalty (Below) - //SetAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6); - // Penalty for the above, set for some time to negativly affect morale. Added to save DC for fleeing. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER); - // If set, just runs to nearest non-seen ally, and removes the loop for a good group of allies to run to. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER); - // They will flee to the nearest object of the tag below, if set. - //SetLocalString(OBJECT_SELF, AI_FLEE_OBJECT, "BOSS_TAG_OR_WHATEVER"); - // This needs setting if the above is to work. - - //SetSpawnInCondition(AI_FLAG_FLEEING_USE_VISUAL_EFFECT, AI_TARGETING_FLEE_MASTER); - // If this is on, we play a visual effect while we flee. -/************************ [Fleeing] *******************************************/ - -/************************ [Combat - Fighters] ********************************** - Fighter (Phiscal attacks, really) specific stuff - disarmed weapons, better - at hand to hand, and archer behaviour. -************************* [Combat - Fighters] *********************************/ - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - - //SetAIInteger(AI_RANGED_WEAPON_RANGE, 3); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - //SetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER); - // Set if you want them to move forwards into HTH sooner. Will always - // if the enemy is a mage/archer, else % based on range. - - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER); - // For archers. If they have ally support, they'd rather move back & shoot then go into HTH. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER); - // This forces the move back from attackers, and shoot bows. Very small chance to go melee. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER); - // This will make the creature ALWAYs use any bows it has. ALWAYS. - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL, AI_COMBAT_MASTER); - // Turns off any attempts to kill dying PCs, or attack low hit point people. - // This is only ever attempted at 9 or 10 intelligence anyway. -/************************ [Combat - Fighters] *********************************/ - -/************************ [Combat - Spell Casters] ***************************** - Spellcaster AI has been improved significantly. As well as adding all new spells, - now spellcasters more randomly choose spells from the same level (EG: they - may choose not to cast magic missile, and cast negative energy ray instead). - - There are also options here for counterspelling, fast buffing, Cheat cast spells, - dispelling, spell triggers, long ranged spells first, immunity toggles, and AOE settings. -************************* [Combat - Spell Casters] ****************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - // Casts spells only if the caster would not move into range to cast them. - // IE long range spells, then medium, then short (unless the enemy comes to us!) - //SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // When an enemy comes in 40M, we fast-cast many defensive spells, as if prepared. - //SetSpawnInCondition(AI_FLAG_COMBAT_SUMMON_FAMILIAR, AI_COMBAT_MASTER); - // The caster summons thier familiar/animal companion. Either a nameless Bat or Badger respectivly. - - // Counterspelling/Dispelling... - // It checks for these classes within the 20M counterspell range. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Arcane (Mage/Sorceror) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Divine (Cleric/Druid) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP, AI_COMBAT_MASTER); - // Recommended. Only counterspells with 5+ allies in group. - - //SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_MAGES_MORE, AI_COMBAT_MASTER); - // Targets seen mages to dispel, else uses normal spell target. - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - // This will make the mage not dispel just anything all the time, but important (spell-stopping) - // things first, others later, after some spells. If off, anything is dispelled. - - // AOE's - //SetSpawnInCondition(AI_FLAG_COMBAT_NEVER_HIT_ALLIES, AI_COMBAT_MASTER); - // Override toggle. Forces to never cast AOE's if it will hit an ally + harm them. - //SetSpawnInCondition(AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE, AI_COMBAT_MASTER); - // Allies who will survive the blast are ignored for calculating best target. - //SetAIInteger(AI_AOE_ALLIES_LOWEST_IN_AOE, 3); - // Defualt: 3. If amount of allies in blast radius are equal or more then - // this, then that location is ignored. - //SetAIInteger(AI_AOE_HD_DIFFERENCE, -8); - // Very weak allies (who are not comparable to us) are ignored if we would hit them. - - // For these 2, if neither are set, the AI will choose AOE more if there are - // lots of enemies, or singles if there are not many. - //SetSpawnInCondition(AI_FLAG_COMBAT_SINGLE_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, single target spells are used first. - //SetSpawnInCondition(AI_FLAG_COMBAT_MANY_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, AOE spells are used first. - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - // A few Death spells may be cast top-prioritory if the enemy will always fail saves. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - // Will use a better target to summon a creature at (EG: Ranged attacker) - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - // Turns On "GetIsImmune" checks. Auto on for 7+ Intel. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - // Turns On checks for Globes & levels of spells. Auto on for 9+ Intel. - - //SetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER); - // This will make the caster buff more allies - or, in fact, use spells - // to buff allies which they might have not used before. - - //SetSpawnInCondition(AI_FLAG_COMBAT_USE_ALL_POTIONS, AI_COMBAT_MASTER); - // Uses all buffing spells before melee. - - //SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_ICE_DAGGER, SPELL_HORIZIKAULS_BOOM, SPELL_MELFS_ACID_ARROW, SPELL_NEGATIVE_ENERGY_RAY, SPELL_FLAME_ARROW); - // Special: Mages cast for ever with this set. - - // Spell triggers - //SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION); - // This is just an example. See readme for more info. - -/************************ [Combat - Spell Casters] ****************************/ - -/************************ [Combat - Dragons] *********************************** - I have a fondness for dragons - in NWN they are deprived of many abilities. Here - are some new ones for your enjoyment! Switches and flying for ANYTHING! :-) -************************* [Combat - Dragons] **********************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_WING_BUFFET, AI_COMBAT_MASTER); - //This sets so there is no Dragon wing buffet. Readme has details of it. - SetAIInteger(AI_DRAGON_FREQUENCY_OF_BUFFET, 3); - // Min. Amount of Rounds between each buffet. See readme for counter defaults. Def: 3 - SetAIInteger(AI_DRAGON_FREQUENCY_OF_BREATH, 3); - // Min. Amount of Rounds between each breath use. See readme for counter defaults. Def: 3 - - // Default checks for dragon flying automatic turning on of flying. - if(GetLevelByClass(CLASS_TYPE_DRAGON) || MyPRCGetRacialType(OBJECT_SELF) == RACIAL_TYPE_DRAGON) - { - SetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER); - // This turns ON combat flying. I think anything winged looks A-OK. See readme for info. - } -/************************ [Combat - Dragons] **********************************/ - -/************************ [Combat Other - Healers/Healing] ********************* - Healing behaviour - not specifically clerics. See readme. -************************* [Combat Other - Healers/Healing] ********************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_HEAL_AT_PERCENT_NOT_AMOUNT, AI_OTHER_COMBAT_MASTER); - // if this is set, we ignore the amount we need to be damaged, as long - // as we are under AI_HEALING_US_PERCENT. - SetAIInteger(AI_HEALING_US_PERCENT, 80); - // % of HP we need to be at until we heal us at all. Default: 50 - //SetAIInteger(AI_HEALING_ALLIES_PERCENT, 60); - // % of HP allies would need to be at to heal them Readme = info. Default: 60 - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER); - // Turns on rasing dead with Resurrection/Raise dead. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER); - // This turns off all healing. - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally healing. - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_RESTORE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally restoring (Remove/Restoration). - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_USE_BAD_HEALING_SPELLS, AI_OTHER_COMBAT_MASTER); - // This forces all cure spells to be used, check readme. - //SetAIInteger(SECONDS_BETWEEN_STATUS_CHECKS, 30); - // Seconds between when we loop everyone for bad effects like Fear/stun ETC. If not set, done each round. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER); - // ActionGiveItem standard healing potion's to allies who need them, if they possess them. - -/************************ [Combat Other - Healers/Healing] ********************/ - -/************************ [Combat Other - Skills] ****************************** - Skills are a part of fighting - EG Taunt. These are mainly on/off switches. - A creature will *may* use it if they are not set to "NO_" for the skill. -************************* [Combat Other - Skills] *****************************/ - - // "NO" - This is for forcing the skill NEVER to be used by the combat AI. - // "FORCE" - This forces it on (and to be used), except if they have no got the skill. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_SEARCH, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_SEARCH, AI_OTHER_COMBAT_MASTER); - // - Concentration - special notes in the readme - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - -/************************ [Combat Other - Skills] *****************************/ - -/************************ [Combat Other - Leaders] ***************************** - Leaders/Bosses can be set to issue some orders and inspire more morale - and bring - a lot of allies to a battle at once! -************************* [Combat Other - Leaders] ****************************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Special leader. Can issuse some orders. See readme for details. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER); - // Boss shout. 1 time use - calls all creatures in X meters (below) for battle! - //SetAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60); - // Defaults to a 60 M range. This can change it. Note: 1 toolset square = 10M. - -/************************ [Combat Other - Leaders] ****************************/ - -/************************ [Other - Behaviour/Generic] ************************** - This is generic behaviours - alright, really it is all things that cannot - really be categorised. -************************* [Other - Behaviour/Generic] *************************/ - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER); - // No ClearAllActions() before BeginConversation. May keep a creature sitting. - //SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - //SetSpawnInCondition(AI_FLAG_OTHER_CHEAT_MORE_POTIONS, AI_OTHER_MASTER); - // If at low HP, and no potion, create one and use it. - //SetAIConstant(AI_POLYMORPH_INTO, POLYMORPH_TYPE_WEREWOLF); - // Polymorph to this creature when damaged (once, natural effect). - - //AI_CreateRandomStats(-3, 3, 6); - // Create (Effect-applied) random statistics. - //AI_CreateRandomOther(-2, 2, -2, 2, -2, 2, -2, 2); - // Create (Effect-applied) random HP, saves, AC. - - //SetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER); - // This will store our spawn location, and then move back there after combat. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - //SetSpawnInCondition(AI_FLAG_OTHER_DONT_SHOUT, AI_OTHER_MASTER); - // Turns off all silent talking NPC's do to other NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER); - // Move randomly closer to enemies in range set below. - //SetAIInteger(AI_SEARCH_IF_ENEMIES_NEAR_RANGE, 25); - // This is the range creatures use, in metres. - - //SetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER); - // One shot. We won't instantly attack a creature we see. See readme. - - //SetAIInteger(AI_DOOR_INTELLIGENCE, 1); - // 3 Special "What to do with Doors" settings. See readme. Good for animals. - - //SetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER); - // When combat is over, creature rests. Useful for replenising health. - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER); - // Stops any use of "PlayVoiceChat". Use with Custom speakstrings. - - /*** Death settings - still under AI_OTHER_MASTER ***/ - - //AI_SetDeathResRef("Resref Here"); - // Creates a creature from the string set. Instantly destroys this creatures body on death. - - //SetAIConstant(AI_DEATH_VISUAL_EFFECT, VFX_FNF_IMPLOSION); - // Fires this visual effect number instantly on death. Use FNF and IMP ones. - - //SetAIInteger(AI_CORPSE_DESTROY_TIME, 30); - // Seconds before body finally gets destroyed. Used for Clerical Raise Dead on NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER); - // This turns off the SetDestroyable() usually performed, and the above timer. - - //SetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER); - // Makes the death file use Bioware's cool SetLootable() feature when corpses would disappear. - - /*** Lag and a few performance settings - still under AI_OTHER_MASTER ***/ - - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - // The creature doesn't check for, or use any items that cast spells. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - //The creature doesn't ever cast spells (and never checks them) - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_LISTENING, AI_OTHER_MASTER); - // The creature doesn't have SetListening() set. Turns of the basic listening for shouts. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER); - // Uses EquipMostDamaging(), like Bioware code. No shield/second weapon equipped. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_CURING_ALLIES, AI_OTHER_MASTER); - // This will stop checks for and curing of allies ailments. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER); - // Stops the heartbeat running (Except Pre-Heartbeat-event). - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER); - // Ignores targeting settings. VERY good for lag/bad AI. Attacks nearest seen enemy. - -/************************ [Other - Behaviour/Generic] *************************/ - -/************************ [User Defined and Shouts] **************************** - The user defined events, set up to fire here. - - New "Start combat attack" and "End Combat Attack" events - - New "Pre" events. Use these to optionally stop a script from firing - under cirtain circumstances as well! (Read nw_c2_defaultd or j_ai_onuserdef) - (User Defined Event = UDE) -************************* [User Defined and Shouts] ***************************/ - - // This is REQUIRED if we use any Pre-events. If not there, it will default - // to the default User Defined Event script for the default AI. - SetCustomUDEFileName("k_ai_onuserdef"); - - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_EVENT, AI_UDE_MASTER); // UDE 1001 - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER); // UDE 1021 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_EVENT, AI_UDE_MASTER); // UDE 1002 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, AI_UDE_MASTER); // UDE 1022 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, AI_UDE_MASTER); // UDE 1003 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, AI_UDE_MASTER); // UDE 1023 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_EVENT, AI_UDE_MASTER); // UDE 1004 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, AI_UDE_MASTER); // UDE 1024 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); // UDE 1005 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_PRE_EVENT, AI_UDE_MASTER); // UDE 1025 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_EVENT, AI_UDE_MASTER); // UDE 1006 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_PRE_EVENT, AI_UDE_MASTER); // UDE 1026 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_EVENT, AI_UDE_MASTER); // UDE 1007 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_PRE_EVENT, AI_UDE_MASTER); // UDE 1027 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_EVENT, AI_UDE_MASTER); // UDE 1008 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_PRE_EVENT, AI_UDE_MASTER); // UDE 1028 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_EVENT, AI_UDE_MASTER); // UDE 1009 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_PRE_EVENT, AI_UDE_MASTER); // UDE 1029 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, AI_UDE_MASTER); // UDE 1011 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, AI_UDE_MASTER); // UDE 1031 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_EVENT, AI_UDE_MASTER); // UDE 1015 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, AI_UDE_MASTER); // UDE 1035 - - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_EVENT, AI_UDE_MASTER); // UDE 1012 - // Fires when we have finnished all combat actions. - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT, AI_UDE_MASTER); // UDE 1032 - // This fires at the start of DetermineCombatRound() *IF they can do an action*. - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_AT_1_HP, AI_UDE_MASTER); // UDE 1014 - // Fires when we are damaged, and are at 1 HP. Use for immortal-flagged creatures. - - /*** Speakstrings - as it were, said under cirtain conditions % chance each time ***/ - - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CONVERSATION, 100, 4, "Hello there", "I hope you enjoy your stay", "Do you work here too?", "*Hic*"); - // On Conversation - see readme. Replaces BeginConversation(). - - // Morale - //AI_SetSpawnInSpeakArray(AI_TALK_ON_MORALE_BREAK, 100, 3, "No more!", "I'm outta here!", "Catch me if you can!"); - // Spoken at running point, if they run to a group of allies. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CANNOT_RUN, 100, 3, "Never give up! Never surrender!", "I've no where to run, so make my day!", "RRRAAAAA!!!"); - // Spoken at running point, if they can find no ally to run to, and 4+ Intelligence. See readme - //AI_SetSpawnInSpeakValue(AI_TALK_ON_STUPID_RUN, "Ahhhhgggg! NO MORE! Run!!"); - // As above, when morale breaks + no ally, but they panic and run from enemy at 3 or less intelligence. - - // Combat - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 5, 4, "Come on!", "You won't win!", "We are not equals! I am better!", "Nothing will stop me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 5, 4, "I'll try! try! and try again!", "Tough man, are we?", "Trying out your 'skills'? Pathetic excuse!", "Nothing good will come from killing me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 5, 4, "My strength is mighty then yours!", "You will definatly die!", "NO chance for you!", "No mercy! Not for YOU!"); - // Spoken each DetermineCombatRound. % is /1000. See readme for Equal/Over/Under values. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_TAUNT, 100, 3, "You're going down!", "No need to think, let my blade do it for you!", "Time to meet your death!"); - // If the creature uses thier skill, taunt, on an enemy this will be said. - - // Event-driven. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PERCIEVE_ENEMY, 70, 6, "Stand and fight, lawbreaker!", "Don't run from the law!", "I have my orders!", "I am ready for violence!", "CHARGE!", "Time you died!"); - // This is said when they see/hear a new enemy, and start attacking them. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_DAMAGED, 20, 2, "Ouch, damn you!", "Haha! Nothing will stop me!"); - // A random value is set to speak when damaged, and may fire same time as below ones. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PHISICALLY_ATTACKED, 20, 2, "Hah! Mear weapons won't defeat me!", "Pah! You cannot defeat me with such rubbish!"); - // This is said when an enemy attacks the creature with a melee/ranged weapon. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_HOSTILE_SPELL_CAST_AT, 20, 2, "No one spell will stop me!", "Is that all you have!?!"); - // This is said when an enemy attacks the creature with a hostile spell. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_DEATH, "Agggggg!"); - // This will ALWAYS be said, whenever the creature dies. - - // Specific potion ones. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_PASS_POTION, "Here! Catch!"); - // This will be spoken when the creature passes a potion to an ally. See readme. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_GOT_POTION, "Got it!"); - // This will be spoken by the creature we pass the potion too, using AssignCommand(). - - // Leader ones - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_SEND_RUNNER, "Quickly! We need help!"); - // This will be said when the leader, if this creature, sends a runner. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_ATTACK_TARGET, "Help attack this target!"); - // When the leader thinks target X should be attacked, it will say this. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_BOSS_SHOUT, "Come my minions! To battle!"); - // This will be said when the leader, if this creature, sees an enemy and uses his "Boss Monster Shout", if turned on. - - -/************************ [User Defined and Shouts] ***************************/ - -/************************ [Bioware: Animations/Waypoints/Treasure] ************* - All Bioware Stuff. I'd check out "x0_c2_spwn_def" for the SoU/Hordes revisions. -************************* [Bioware: Animations/Waypoints/Treasure] ************/ - - // SetSpawnInCondition(NW_FLAG_STEALTH, NW_GENERIC_MASTER); - // SetSpawnInCondition(NW_FLAG_SEARCH, NW_GENERIC_MASTER); - // Uses said skill while WalkWaypoints() - - // SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING, NW_GENERIC_MASTER); - // Separate the NPC's waypoints into day & night. See comment in "nw_i0_generic" for use. - - // SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // This will cause an NPC to use common animations it possesses, - // and use social ones to any other nearby friendly NPCs. - // SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Same as above, except NPC will wander randomly around the area. - - // SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); - // Interacts with placeables + More civilized actions. See Readme. - // SetAnimationCondition(NW_ANIM_FLAG_CHATTER); - // Will use random voicechats during animations, if Civilized - // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); - // Will move around the area a bit more, if using Immobile Animations. See readme. - - // Treasure generating. - //CTG_GenerateNPCTreasure(); - // SoU. Requires "x0_i0_treasure" to be uncommented. See readme. - //GenerateNPCTreasure(); - // Default NwN. Requires "nw_o2_coninclude" to be uncommented. See readme. - -/************************ [Bioware: Animations/Waypoints/Treasure] ************/ - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - -/************************ [User] *********************************************** - This is the ONLY place you should add user things, on spawn, such as - visual effects or anything, as it is after SetUpEndOfSpawn. By default, this - does have encounter animations on. This is here, so is easily changed :-D - - Be careful otherwise. - - Notes: - - SetListening is already set to TRUE, unless AI_FLAG_OTHER_LAG_NO_LISTENING is on. - - SetListenPattern's are set from 0 to 7. - - You can use the wrappers AI_SpawnInInstantVisual and AI_SpawnInPermamentVisual - for visual effects (Instant/Permament as appropriate). -************************* [User] **********************************************/ - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - // Leave this in if you use the variable for creature attacks, as for golems. Bioware's code. - int nNumber = GetLocalInt(OBJECT_SELF, "CREATURE_VAR_NUMBER_OF_ATTACKS"); - if(nNumber > 0) - { - SetBaseAttackBonus(nNumber); - } - - // If we are a ranger or paladin class, do not cast spells. This can be - // manually removed if wished. To get the spells they have working correctly, - // remove this, and use Monster Abilties instead of thier normal class spells. -// if(GetLevelByClass(CLASS_TYPE_RANGER) >= 1 || GetLevelByClass(CLASS_TYPE_PALADIN) >= 1) -// { -// SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); -// } - -/************************ [User] **********************************************/ - - // Note: You shouldn't really remove this, even if they have no waypoints. - DelayCommand(2.0, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/ra_rnd_pirat_spw.nss b/_module/nss/ra_rnd_pirat_spw.nss index e8a73d52..76046ae0 100644 --- a/_module/nss/ra_rnd_pirat_spw.nss +++ b/_module/nss/ra_rnd_pirat_spw.nss @@ -1,12 +1,14 @@ //:://///////////////////////////////////////////// //:: Name ra_rnd_pirat_spw //:: Copyright (c) 2001 Bioware Corp. -//:: Copyright (c) NWN Dark Sun +//:: Copyright (c) 2022 Project RATDOG +//::////////////////////////////////////////////// +/* + NPC OnSpawn event script caller to run + CODI AI & PRC events. +*/ //::////////////////////////////////////////////// /* - Default On Spawn script - - 2003-07-28: Georg Zoeller: If you set a ninteger on the creature named @@ -24,10 +26,17 @@ nearby or in the module (checks near first). It will make that NPC this horse's master. + 20221201: Jaysyn + Modified to read desired CODI AI spawner + from string var "SPAWN_TYPE" set on the NPC, + defaults to fighter. + */ //::////////////////////////////////////////////// //:: Created By: Keith Warner, Georg Zoeller //:: Created On: June 11/03 +//:: Modified By: Jaysyn +//:: Modified On: 20221201 //::////////////////////////////////////////////// const int EVENT_USER_DEFINED_PRESPAWN = 1510; @@ -39,6 +48,7 @@ const int EVENT_USER_DEFINED_POSTSPAWN = 1511; #include "rnd_commoner_inc" #include "ra_rnd_armor_inc" + void ShrinkEm(object oPC) { SetObjectVisualTransform(oPC, OBJECT_VISUAL_TRANSFORM_SCALE, 0.5f); @@ -52,7 +62,17 @@ void GrowEm(object oPC) void main() { string sTag; + string sResRef = GetResRef(OBJECT_SELF); + + string sSpawnType = GetLocalString(OBJECT_SELF,"SPAWN_TYPE"); + + if (sSpawnType == "") + { + sSpawnType = "no_spw_ftr"; + } + object oNPC; + // User defined OnSpawn event requested? int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); @@ -63,7 +83,6 @@ void main() SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); } -//:: Initialize Mount System sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); if (GetStringLength(sTag)>0) { // look for master @@ -447,8 +466,13 @@ void main() DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,OBJECT_SELF)); } -// Check for randomizations. +//:: Check for randomizations. +//:: Randomize Armor + RndPirateArmor(OBJECT_SELF); + ActionEquipMostEffectiveArmor(); + +//:: Randomize / Set Name ms_Nomenclature(OBJECT_SELF); int nKeepskin = GetLocalInt(OBJECT_SELF,"RA_KEEPSKIN"); @@ -471,19 +495,19 @@ void main() rnd_tattoo(OBJECT_SELF); } -//:: Randomize Armor - RndPirateArmor(OBJECT_SELF); - ActionEquipMostEffectiveArmor(); - // Execute default OnSpawn script. - ExecuteScript("nw_c2_default9", OBJECT_SELF); + //:: Execute CODI AI OnSpawn script. + ExecuteScript(sSpawnType, OBJECT_SELF); - // Execute PRC OnSpawn script. +//:: Execute default OnSpawn script. + //ExecuteScript("nw_c2_default9", OBJECT_SELF); + +//:: Execute PRC OnSpawn script. ExecuteScript("prc_npc_spawn", OBJECT_SELF); - //Post Spawn event requeste + //Post Spawn event request if (nSpecEvent == 2 || nSpecEvent == 3) { SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN)); diff --git a/_module/nss/ra_spbook_zana.nss b/_module/nss/ra_spbook_zana.nss new file mode 100644 index 00000000..84b12ed9 --- /dev/null +++ b/_module/nss/ra_spbook_zana.nss @@ -0,0 +1,108 @@ +//:://///////////////////////////////////////////// +//:: Zaraphia's Spellbook +//:: ra_spbook_zara.nss +//:: Copyright (c) 2021 Project RATDOG +//::////////////////////////////////////////////// +/* + For Wizards: + Produces scrolls for he following spells: + + daze, detect magic, flare, ghost sound, light, + mage hand, prestidigitation, read magic, feather fall, + identify, mage armor, shield, sleep, alter self, + invisibility, mirror image, fireball, haste + + burning hands, chill touch, mage armor, summon + monster I, blindness/deafness, ghoul touch, knock, + Melf’s acid arrow, dispel magic, slow + + For other Arcane magic users: Grants XP + + For PCs w/ UMD: Grants XP +*/ +//::////////////////////////////////////////////// +//:: Created By: Jaysyn +//:: Created On: 20221202 +//::////////////////////////////////////////////// + +#include "x2_inc_switches" +#include "prc_class_const" + +void main() +{ + + object oPC; + object oItem; + + int nEvent =GetUserDefinedItemEventNumber(); + + if (nEvent == X2_ITEM_EVENT_ACTIVATE) + { + oPC = GetItemActivator(); + oItem = GetItemActivated(); + int nLevel = GetHitDice(oPC); + + int nLearnChance = (18 * GetAbilityModifier(3, oPC)); + + int nUmd = GetSkillRank(SKILL_USE_MAGIC_DEVICE,oPC, TRUE); + + int nWiz = GetLevelByClass(CLASS_TYPE_WIZARD, oPC); + + int nArc = GetLevelByClass(CLASS_TYPE_BARD, oPC) + +GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + +GetLevelByClass(CLASS_TYPE_BEGUILER, oPC) + +GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC) + +GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC) + +GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC) + +GetLevelByClass(CLASS_TYPE_WARMAGE, oPC) + +GetLevelByClass(CLASS_TYPE_WARLOCK, oPC) + +GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC) + +GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC); + + if (nWiz >= 1) + { + FloatingTextStringOnCreature("You dig through the bandit's spellbook to find some new spells.",oPC); + + //:: Spawn scrolls + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr112",oPC);} //:: Burning Hands scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("prc_scr_1137",oPC);} //:: Chill Touch scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr104",oPC);} //:: Mage Armor scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr105",oPC);} //:: Summon Creature I scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("nw_it_sparscr211",oPC);} //:: Blindness / Deafness scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("nw_it_sparscr209",oPC);} //:: Ghoul Touch scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("nw_it_sparscr216",oPC);} //:: Knock scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("nw_it_sparscr202",oPC);} //:: Melf's Acid Arrow scroll + if( d100() < nLearnChance - 15) {CreateItemOnObject("nw_it_sparscr309",oPC);} //:: Fireball scroll + if( d100() < nLearnChance - 15) {CreateItemOnObject("nw_it_sparscr301",oPC);} //:: Dispel Magic scroll + if( d100() < nLearnChance - 15) {CreateItemOnObject("nw_it_sparscr313",oPC);} //:: Slow scroll + if( d100() < nLearnChance - 0) {CreateItemOnObject("nw_it_sparscr003",oPC);} //:: Daze scroll + if( d100() < nLearnChance - 0) {CreateItemOnObject("x1_it_sparscr001",oPC);} //:: Flare scroll + if( d100() < nLearnChance - 0) {CreateItemOnObject("nw_it_sparscr004",oPC);} //:: Light scroll + if( d100() < nLearnChance - 0) {CreateItemOnObject("prc_scr_945",oPC);} //:: Mage Hand scroll + if( d100() < nLearnChance - 0) {CreateItemOnObject("prc_scr_957",oPC);} //:: Read Magic scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr106",oPC);} //:: Identify scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("x1_it_sparscr103",oPC);} //:: Shield scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr108",oPC);} //:: Sleep scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("prc_scr_1431",oPC);} //:: Alter Self scroll + if( d100() < nLearnChance - 5) {CreateItemOnObject("nw_it_sparscr207",oPC);} //:: Invisibility scroll + if( d100() < nLearnChance - 10) {CreateItemOnObject("prc_scr_1164",oPC);} //:: Mirror Image scroll + if( d100() < nLearnChance - 15) {CreateItemOnObject("nw_it_sparscr312",oPC);} //:: Haste scroll + } + + else if (nArc >= 1) + { + GiveXPToCreature(oPC,(2000/nLevel)); + FloatingTextStringOnCreature("You read the book, which provides you valuable arcane knowledge, the equivalent of hard-earned experience.",oPC); + } + + else if (GetHasSkill(SKILL_USE_MAGIC_DEVICE,oPC)) + { + GiveXPToCreature(oPC,((300+(nUmd*12))/nLevel)); + FloatingTextStringOnCreature("You read the book, but not being an arcane spellcaster, you find much of it incomprehensible.",oPC); + } + else + { + FloatingTextStringOnCreature("You can't make heads or tails out of this book.",oPC); + } + } +} \ No newline at end of file diff --git a/_module/nss/re_c2_commoner9.nss b/_module/nss/re_c2_commoner9.nss deleted file mode 100644 index 914ee7b1..00000000 --- a/_module/nss/re_c2_commoner9.nss +++ /dev/null @@ -1,646 +0,0 @@ -/*/////////////////////// [On Spawn] /////////////////////////////////////////// - Filename: J_AI_OnSpawn or nw_c2_default9 -///////////////////////// [On Spawn] /////////////////////////////////////////// - This file contains options that will determine some AI behaviour, and a lot - of toggles for turning things on/off. A big read, but might be worthwhile. - - The documentation is actually fully in the readme files, under the name - "On Spawn.html", under "AI File Explanations". - - The order of the options: - - - Important Spawn Settings N/A - - Targeting & Fleeing (AI_TARGETING_FLEE_MASTER) - - Fighting & Spells (AI_COMBAT_MASTER) - - Other Combat - Healing, Skills & Bosses (AI_OTHER_COMBAT_MASTER) - - Other - Death corpses, minor things (AI_OTHER_MASTER) - - User Defined (AI_UDE_MASTER) - - Shouts N/A - - Default Bioware settings (WP's, Anims) (NW_GENERIC_MASTER) - - The OnSpawn file is a settings file. These things are set onto a creature, to - define cirtain actions. If more than one creature has this script, they all - use the settings, unless If/Else statements are used somehow. There is also - the process of setting any spells/feats availible, and hiding and walk waypoints - are started. - - Other stuff: - - Targeting is imporant :-D - - If you delete this script, there is a template for the On Spawn file - in the zip it came in, for use in the "scripttemplate" directory. -///////////////////////// [History] //////////////////////////////////////////// - Note: I have removed: - - Default "Teleporting" and exit/return (this seemed bugged anyway, or useless) - - Spawn in animation. This can be, of course, re-added. - - Day/night posting. This is uneeded, with a changed walk waypoints that does it automatically. - - 1.0-1.2 - Used short amount of spawn options. - 1.3 - All constants names are changed, I am afraid. - - Added Set/Delete/GetAIInteger/Constant/Object. This makes sure that the AI - doesn't ever interfere with other things - it pre-fixes all stored things - with AI_INTEGER_ (and so on) - 1.4 - TO DO: Clear up some old non-working ones - - Added in User Defined part of the script, an auto-turn-off-spells for - Ranger and Paladin classes. Need to test - perhaps 1.64 fixed it? - - - Spawn options changed: - - Removed AI level settings (can still be done manually) - - Added optional (and off by default) fear-visual for fleeing - - -///////////////////////// [Workings] /////////////////////////////////////////// - Note: You can do without all the comments (it may be that you don't want - the extra KB it adds or something, although it does not at all slow down a module) - so as long as you have these at the end: - - AI_SetUpEndOfSpawn(); - DelayCommand(2.0, SpawnWalkWayPoints()); - - Oh, and the include file (Below, "j_inc_spawnin") must be at the top like - here. Also recommended is the AI_INTELLIGENCE and AI_MORALE being set (if - not using custom AI). -///////////////////////// [Arguments] ////////////////////////////////////////// - Arguments: GetIsEncounterCreature -///////////////////////// [On Spawn] /////////////////////////////////////////*/ - -// Treasure Includes - See end of spawn for uncomment options. - -//#include "nw_o2_coninclude" -// Uncomment this if you want default NwN Treasure - Uses line "GenerateNPCTreasure()" at the end of spawn. -// - This generates random things from the default pallet based on the creatures level + race - -//#include "x0_i0_treasure" -// Uncomment this if you want the SoU Treasure - Uses line "CTG_GenerateNPCTreasure()" at the end of spawn. -// - This will spawn treasure based on chests placed in the module. See "x0_i0_treasure" for more information. - -// This is required for all spawn in options! -#include "prc_inc_racial" -#include "J_INC_SPAWNIN" - - -void main() -{ -/************************ [Important Spawn Settings] **************************/ - SetAIInteger(AI_INTELLIGENCE, 10); - // Intelligence value of the creauture. Can be 1-10, read readme's for help. - SetAIInteger(AI_MORALE, 10); - // Will save (See readme). Remember: -1 or below means they always flee. - //SetCustomAIFileName("CUSTOM_AI_FILE"); - // Sets our custom AI file. Really, only animation settings will apply when this is set. - // - Can sort actions against a imputted target (EG: On Percieved enemy) by - // "GetLocalObject(OBJECT_SELF, "AI_TEMP_SET_TARGET");" -/************************ [Important Spawn Settings] **************************/ - -/************************ [Targeting] ****************************************** - All targeting settings. -************************* [Targeting] *****************************************/ - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HP, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest current HP. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_AC, AI_TARGETING_FLEE_MASTER); - // We only attack the lowest AC (as in 1.2). - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_LOWER_HD, AI_TARGETING_FLEE_MASTER); - // Target the lowest hit dice - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_MAGE_CLASSES, AI_TARGETING_FLEE_MASTER); - // We go straight for mages/sorcerors. Nearest one. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_ARCHERS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest enemy with a ranged weapon equipped. - //SetSpawnInCondition(AI_FLAG_TARGETING_LIKE_PCS, AI_TARGETING_FLEE_MASTER); - // We go for the nearest seen PC enemy. - - //SetAIConstant(AI_FAVOURED_ENEMY_RACE, RACIAL_TYPE_HUMAN); - // The AI attacks the nearest enemy, seen, of this race. Use the RACIAL_* constants. - //SetAIConstant(AI_FAVOURED_ENEMY_CLASS, CLASS_TYPE_BARD); - // The AI attacks the nearest enemy, seen, of this class. Use the CLASS_* constants. - - // Target changing - see readme for info. - //SetAIInteger(AI_MAX_TURNS_TO_ATTACK_ONE_TARGET, 6); - // Maximum rounds to attack the current target, before re-checking. - // % Chance to re-set each target type each round (Could result in current target still) - //SetAIInteger(AI_MELEE_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_RANGED_LAST_TO_NEW_TARGET_CHANCE, 20); - //SetAIInteger(AI_SPELL_LAST_TO_NEW_TARGET_CHANCE, 20); - - // We only target PC's if there are any in range if this is set - //SetSpawnInCondition(AI_FLAG_TARGETING_FILTER_FOR_PC_TARGETS, AI_TARGETING_FLEE_MASTER); - - // Main explanation of AI_SetAITargetingValues, see the AI readme (spawn file) - // - Remember, uncommenting one will just ignore it (so will never check target's - // AC without TARGETING_AC on) - - AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12); - // Spell mantals are checked only for the spell target. Either Absense of or got any. - AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9); - // Range - very imporant! Basis for all ranged/spell attacks. - AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 2, 6); - // AC is used for all phisical attacks. Lower targets lower (By default). - AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 2, 4); - // Used for spell attacks. Saves are sorta a AC versus spells. - - // Phisical protections. Used by spells, ranged and melee. - // Jasperre - simple check if we are a fighter (hit lower phisicals) or a - // mage (attack higher!) - if(GetBaseAttackBonus(OBJECT_SELF) > ((GetHitDice(OBJECT_SELF)/2) + 1)) - { - // Fighter/Clerics (It is over a mages BAB + 1 (IE 0.5 BAB/Level) target lower - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_LOWER, 2, 6); - } - else - { - // Mages target higher (so dispel/elemental attack those who fighters - // cannot hit as much). (the lowest BAB, under half our hit dice in BAB) - AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5); - } - // Base attack bonus. Used for spells and phisical attacks. Checked with GetBaseAttackBonus. - AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4); - // Hit dice - how powerful in levels the enemy is. Used for all checks. - AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3); - - //AI_SetAITargetingValues(TARGETING_HP_PERCENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_CURRENT, TARGET_LOWER, 1, 3); - //AI_SetAITargetingValues(TARGETING_HP_MAXIMUM, TARGET_LOWER, 1, 3); - // The HP's are the last thing to choose a target with. -/************************ [Targeting] *****************************************/ - -/************************ [Fleeing] ******************************************** - Fleeing - these are toggled on/off by FEARLESS flag. - - 3 or under intelligence will just run away. 4 or more will know where allies - are, and if there are none, will not run. -************************* [Fleeing] *******************************************/ - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Forces them to not flee. This may be set with AI_SetMaybeFearless at the end. - //SetSpawnInCondition(AI_FLAG_FLEEING_NEVER_FIGHT_IMPOSSIBLE_ODDS, AI_TARGETING_FLEE_MASTER); - // This will make the creature never fight against impossible odds (8HD+ different) - //SetSpawnInCondition(AI_FLAG_FLEEING_TURN_OFF_GROUP_MORALE, AI_TARGETING_FLEE_MASTER); - // This turns OFF any sort of group morale bonuses. - - //SetAIInteger(AMOUNT_OF_HD_DIFFERENCE_TO_CHECK, -2); - // If enemy is within this amount of HD, we do not check morale. - //SetAIInteger(BASE_MORALE_SAVE, 20); - // Base DC of the will save. It is set to 20 + HD difference - Morale - Group morale mod. - //SetAIInteger(HP_PERCENT_TO_CHECK_AT, 80); - // %HP needed to be at to check morale. This doesn't affect "Never fight impossible odds" - //SetSpawnInCondition(AI_FLAG_FLEEING_NO_OVERRIDING_HP_AMOUNT, AI_TARGETING_FLEE_MASTER); - // This will turn off overriding HP checks. AI may decide to run even - // not at the %HP above, this turns the checks off. - - //SetAIInteger(AI_DAMAGE_AT_ONCE_FOR_MORALE_PENALTY, GetMaxHitPoints()/6); - // Damage needed to be done at once to get a massive morale penalty (Below) - //SetAIInteger(AI_DAMAGE_AT_ONCE_PENALTY, 6); - // Penalty for the above, set for some time to negativly affect morale. Added to save DC for fleeing. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_NEAREST_NONE_SEEN, AI_TARGETING_FLEE_MASTER); - // If set, just runs to nearest non-seen ally, and removes the loop for a good group of allies to run to. - - //SetSpawnInCondition(AI_FLAG_FLEEING_FLEE_TO_OBJECT, AI_TARGETING_FLEE_MASTER); - // They will flee to the nearest object of the tag below, if set. - //SetLocalString(OBJECT_SELF, AI_FLEE_OBJECT, "BOSS_TAG_OR_WHATEVER"); - // This needs setting if the above is to work. - - //SetSpawnInCondition(AI_FLAG_FLEEING_USE_VISUAL_EFFECT, AI_TARGETING_FLEE_MASTER); - // If this is on, we play a visual effect while we flee. -/************************ [Fleeing] *******************************************/ - -/************************ [Combat - Fighters] ********************************** - Fighter (Phiscal attacks, really) specific stuff - disarmed weapons, better - at hand to hand, and archer behaviour. -************************* [Combat - Fighters] *********************************/ - SetSpawnInCondition(AI_FLAG_COMBAT_PICK_UP_DISARMED_WEAPONS, AI_COMBAT_MASTER); - // This sets to pick up weapons which are disarmed. - - //SetAIInteger(AI_RANGED_WEAPON_RANGE, 3); - // This is the range at which they go into melee (from using a ranged weapon). Default is 3 or 5. - - //SetSpawnInCondition(AI_FLAG_COMBAT_BETTER_AT_HAND_TO_HAND, AI_COMBAT_MASTER); - // Set if you want them to move forwards into HTH sooner. Will always - // if the enemy is a mage/archer, else % based on range. - - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ATTACKING, AI_COMBAT_MASTER); - // For archers. If they have ally support, they'd rather move back & shoot then go into HTH. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_MOVE_BACK, AI_COMBAT_MASTER); - // This forces the move back from attackers, and shoot bows. Very small chance to go melee. - //SetSpawnInCondition(AI_FLAG_COMBAT_ARCHER_ALWAYS_USE_BOW, AI_COMBAT_MASTER); - // This will make the creature ALWAYs use any bows it has. ALWAYS. - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_GO_FOR_THE_KILL, AI_COMBAT_MASTER); - // Turns off any attempts to kill dying PCs, or attack low hit point people. - // This is only ever attempted at 9 or 10 intelligence anyway. -/************************ [Combat - Fighters] *********************************/ - -/************************ [Combat - Spell Casters] ***************************** - Spellcaster AI has been improved significantly. As well as adding all new spells, - now spellcasters more randomly choose spells from the same level (EG: they - may choose not to cast magic missile, and cast negative energy ray instead). - - There are also options here for counterspelling, fast buffing, Cheat cast spells, - dispelling, spell triggers, long ranged spells first, immunity toggles, and AOE settings. -************************* [Combat - Spell Casters] ****************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER); - // Casts spells only if the caster would not move into range to cast them. - // IE long range spells, then medium, then short (unless the enemy comes to us!) - //SetSpawnInCondition(AI_FLAG_COMBAT_FLAG_FAST_BUFF_ENEMY, AI_COMBAT_MASTER); - // When an enemy comes in 40M, we fast-cast many defensive spells, as if prepared. - //SetSpawnInCondition(AI_FLAG_COMBAT_SUMMON_FAMILIAR, AI_COMBAT_MASTER); - // The caster summons thier familiar/animal companion. Either a nameless Bat or Badger respectivly. - - // Counterspelling/Dispelling... - // It checks for these classes within the 20M counterspell range. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ARCANE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Arcane (Mage/Sorceror) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_DIVINE, AI_COMBAT_MASTER); - // If got dispels, it counterspells Divine (Cleric/Druid) spellcasters. - //SetSpawnInCondition(AI_FLAG_COMBAT_COUNTER_SPELL_ONLY_IN_GROUP, AI_COMBAT_MASTER); - // Recommended. Only counterspells with 5+ allies in group. - - //SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_MAGES_MORE, AI_COMBAT_MASTER); - // Targets seen mages to dispel, else uses normal spell target. - SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER); - // This will make the mage not dispel just anything all the time, but important (spell-stopping) - // things first, others later, after some spells. If off, anything is dispelled. - - // AOE's - //SetSpawnInCondition(AI_FLAG_COMBAT_NEVER_HIT_ALLIES, AI_COMBAT_MASTER); - // Override toggle. Forces to never cast AOE's if it will hit an ally + harm them. - //SetSpawnInCondition(AI_FLAG_COMBAT_AOE_DONT_MIND_IF_THEY_SURVIVE, AI_COMBAT_MASTER); - // Allies who will survive the blast are ignored for calculating best target. - //SetAIInteger(AI_AOE_ALLIES_LOWEST_IN_AOE, 3); - // Defualt: 3. If amount of allies in blast radius are equal or more then - // this, then that location is ignored. - //SetAIInteger(AI_AOE_HD_DIFFERENCE, -8); - // Very weak allies (who are not comparable to us) are ignored if we would hit them. - - // For these 2, if neither are set, the AI will choose AOE more if there are - // lots of enemies, or singles if there are not many. - //SetSpawnInCondition(AI_FLAG_COMBAT_SINGLE_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, single target spells are used first. - //SetSpawnInCondition(AI_FLAG_COMBAT_MANY_TARGETING, AI_COMBAT_MASTER); - // For Same-level spells, AOE spells are used first. - - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER); - // A few Death spells may be cast top-prioritory if the enemy will always fail saves. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER); - // Will use a better target to summon a creature at (EG: Ranged attacker) - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER); - // Turns On "GetIsImmune" checks. Auto on for 7+ Intel. - SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER); - // Turns On checks for Globes & levels of spells. Auto on for 9+ Intel. - - //SetSpawnInCondition(AI_FLAG_COMBAT_MORE_ALLY_BUFFING_SPELLS, AI_COMBAT_MASTER); - // This will make the caster buff more allies - or, in fact, use spells - // to buff allies which they might have not used before. - - //SetSpawnInCondition(AI_FLAG_COMBAT_USE_ALL_POTIONS, AI_COMBAT_MASTER); - // Uses all buffing spells before melee. - - //SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_ICE_DAGGER, SPELL_HORIZIKAULS_BOOM, SPELL_MELFS_ACID_ARROW, SPELL_NEGATIVE_ENERGY_RAY, SPELL_FLAME_ARROW); - // Special: Mages cast for ever with this set. - - // Spell triggers - //SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION); - // This is just an example. See readme for more info. - -/************************ [Combat - Spell Casters] ****************************/ - -/************************ [Combat - Dragons] *********************************** - I have a fondness for dragons - in NWN they are deprived of many abilities. Here - are some new ones for your enjoyment! Switches and flying for ANYTHING! :-) -************************* [Combat - Dragons] **********************************/ - - //SetSpawnInCondition(AI_FLAG_COMBAT_NO_WING_BUFFET, AI_COMBAT_MASTER); - //This sets so there is no Dragon wing buffet. Readme has details of it. - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BUFFET, 3); - // Min. Amount of Rounds between each buffet. See readme for counter defaults. Def: 3 - //SetAIInteger(AI_DRAGON_FREQUENCY_OF_BREATH, 3); - // Min. Amount of Rounds between each breath use. See readme for counter defaults. Def: 3 - - // Default checks for dragon flying automatic turning on of flying. - if(GetLevelByClass(CLASS_TYPE_DRAGON) || MyPRCGetRacialType(OBJECT_SELF) == RACIAL_TYPE_DRAGON) - { - SetSpawnInCondition(AI_FLAG_COMBAT_FLYING, AI_COMBAT_MASTER); - // This turns ON combat flying. I think anything winged looks A-OK. See readme for info. - } -/************************ [Combat - Dragons] **********************************/ - -/************************ [Combat Other - Healers/Healing] ********************* - Healing behaviour - not specifically clerics. See readme. -************************* [Combat Other - Healers/Healing] ********************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_HEAL_AT_PERCENT_NOT_AMOUNT, AI_OTHER_COMBAT_MASTER); - // if this is set, we ignore the amount we need to be damaged, as long - // as we are under AI_HEALING_US_PERCENT. - //SetAIInteger(AI_HEALING_US_PERCENT, 50); - // % of HP we need to be at until we heal us at all. Default: 50 - //SetAIInteger(AI_HEALING_ALLIES_PERCENT, 60); - // % of HP allies would need to be at to heal them Readme = info. Default: 60 - SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER); - // Turns on rasing dead with Resurrection/Raise dead. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CURING, AI_OTHER_COMBAT_MASTER); - // This turns off all healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_CURE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally healing. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_ONLY_RESTORE_SELF, AI_OTHER_COMBAT_MASTER); - // This turns off ally restoring (Remove/Restoration). - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_USE_BAD_HEALING_SPELLS, AI_OTHER_COMBAT_MASTER); - // This forces all cure spells to be used, check readme. - //SetAIInteger(SECONDS_BETWEEN_STATUS_CHECKS, 30); - // Seconds between when we loop everyone for bad effects like Fear/stun ETC. If not set, done each round. - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GIVE_POTIONS_TO_HELP, AI_OTHER_COMBAT_MASTER); - // ActionGiveItem standard healing potion's to allies who need them, if they possess them. - -/************************ [Combat Other - Healers/Healing] ********************/ - -/************************ [Combat Other - Skills] ****************************** - Skills are a part of fighting - EG Taunt. These are mainly on/off switches. - A creature will *may* use it if they are not set to "NO_" for the skill. -************************* [Combat Other - Skills] *****************************/ - - // "NO" - This is for forcing the skill NEVER to be used by the combat AI. - // "FORCE" - This forces it on (and to be used), except if they have no got the skill. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PICKPOCKETING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_TAUNTING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_EMPATHY, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_HIDING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_OPENING_LOCKED_DOORS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_USING_HEALING_KITS, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_PARRYING, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_SEARCH, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_SEARCH, AI_OTHER_COMBAT_MASTER); - // - Concentration - special notes in the readme - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_NO_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_FORCE_CONCENTRATION, AI_OTHER_COMBAT_MASTER); - -/************************ [Combat Other - Skills] *****************************/ - -/************************ [Combat Other - Leaders] ***************************** - Leaders/Bosses can be set to issue some orders and inspire more morale - and bring - a lot of allies to a battle at once! -************************* [Combat Other - Leaders] ****************************/ - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER); - // Special leader. Can issuse some orders. See readme for details. - - //SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_BOSS_MONSTER_SHOUT, AI_OTHER_COMBAT_MASTER); - // Boss shout. 1 time use - calls all creatures in X meters (below) for battle! - //SetAIInteger(AI_BOSS_MONSTER_SHOUT_RANGE, 60); - // Defaults to a 60 M range. This can change it. Note: 1 toolset square = 10M. - -/************************ [Combat Other - Leaders] ****************************/ - -/************************ [Other - Behaviour/Generic] ************************** - This is generic behaviours - alright, really it is all things that cannot - really be categorised. -************************* [Other - Behaviour/Generic] *************************/ - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_CLEAR_ACTIONS_BEFORE_CONVERSATION, AI_OTHER_MASTER); - // No ClearAllActions() before BeginConversation. May keep a creature sitting. - //SetSpawnInCondition(AI_FLAG_OTHER_NO_POLYMORPHING, AI_OTHER_MASTER); - // This will stop all polymorphing spells feats from being used. - //SetSpawnInCondition(AI_FLAG_OTHER_CHEAT_MORE_POTIONS, AI_OTHER_MASTER); - // If at low HP, and no potion, create one and use it. - //SetAIConstant(AI_POLYMORPH_INTO, POLYMORPH_TYPE_WEREWOLF); - // Polymorph to this creature when damaged (once, natural effect). - - //AI_CreateRandomStats(-3, 3, 6); - // Create (Effect-applied) random statistics. - //AI_CreateRandomOther(-2, 2, -2, 2, -2, 2, -2, 2); - // Create (Effect-applied) random HP, saves, AC. - - //SetSpawnInCondition(AI_FLAG_OTHER_RETURN_TO_SPAWN_LOCATION, AI_OTHER_MASTER); - // This will store our spawn location, and then move back there after combat. - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by PC's (Enemies) who speak actions in Stars - *Bow* - - //SetSpawnInCondition(AI_FLAG_OTHER_DONT_SHOUT, AI_OTHER_MASTER); - // Turns off all silent talking NPC's do to other NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_SEARCH_IF_ENEMIES_NEAR, AI_OTHER_MASTER); - // Move randomly closer to enemies in range set below. - //SetAIInteger(AI_SEARCH_IF_ENEMIES_NEAR_RANGE, 25); - // This is the range creatures use, in metres. - - //SetSpawnInCondition(AI_FLAG_OTHER_ONLY_ATTACK_IF_ATTACKED, AI_OTHER_MASTER); - // One shot. We won't instantly attack a creature we see. See readme. - - //SetAIInteger(AI_DOOR_INTELLIGENCE, 1); - // 3 Special "What to do with Doors" settings. See readme. Good for animals. - - //SetSpawnInCondition(AI_FLAG_OTHER_REST_AFTER_COMBAT, AI_OTHER_MASTER); - // When combat is over, creature rests. Useful for replenising health. - - //SetSpawnInCondition(AI_FLAG_OTHER_NO_PLAYING_VOICE_CHAT, AI_OTHER_MASTER); - // Stops any use of "PlayVoiceChat". Use with Custom speakstrings. - - /*** Death settings - still under AI_OTHER_MASTER ***/ - - //AI_SetDeathResRef("Resref Here"); - // Creates a creature from the string set. Instantly destroys this creatures body on death. - - //SetAIConstant(AI_DEATH_VISUAL_EFFECT, VFX_FNF_IMPLOSION); - // Fires this visual effect number instantly on death. Use FNF and IMP ones. - - //SetAIInteger(AI_CORPSE_DESTROY_TIME, 30); - // Seconds before body finally gets destroyed. Used for Clerical Raise Dead on NPC's. - - //SetSpawnInCondition(AI_FLAG_OTHER_TURN_OFF_CORPSES, AI_OTHER_MASTER); - // This turns off the SetDestroyable() usually performed, and the above timer. - - //SetSpawnInCondition(AI_FLAG_OTHER_USE_BIOWARE_LOOTING, AI_OTHER_MASTER); - // Makes the death file use Bioware's cool SetLootable() feature when corpses would disappear. - - /*** Lag and a few performance settings - still under AI_OTHER_MASTER ***/ - - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_ITEMS, AI_OTHER_MASTER); - // The creature doesn't check for, or use any items that cast spells. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); - //The creature doesn't ever cast spells (and never checks them) - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_LISTENING, AI_OTHER_MASTER); - // The creature doesn't have SetListening() set. Turns of the basic listening for shouts. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_EQUIP_MOST_DAMAGING, AI_OTHER_MASTER); - // Uses EquipMostDamaging(), like Bioware code. No shield/second weapon equipped. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_CURING_ALLIES, AI_OTHER_MASTER); - // This will stop checks for and curing of allies ailments. - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_IGNORE_HEARTBEAT, AI_OTHER_MASTER); - // Stops the heartbeat running (Except Pre-Heartbeat-event). - //SetSpawnInCondition(AI_FLAG_OTHER_LAG_TARGET_NEAREST_ENEMY, AI_OTHER_MASTER); - // Ignores targeting settings. VERY good for lag/bad AI. Attacks nearest seen enemy. - -/************************ [Other - Behaviour/Generic] *************************/ - -/************************ [User Defined and Shouts] **************************** - The user defined events, set up to fire here. - - New "Start combat attack" and "End Combat Attack" events - - New "Pre" events. Use these to optionally stop a script from firing - under cirtain circumstances as well! (Read nw_c2_defaultd or j_ai_onuserdef) - (User Defined Event = UDE) -************************* [User Defined and Shouts] ***************************/ - - // This is REQUIRED if we use any Pre-events. If not there, it will default - // to the default User Defined Event script for the default AI. - SetCustomUDEFileName("k_ai_onuserdef"); - - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_EVENT, AI_UDE_MASTER); // UDE 1001 - //SetSpawnInCondition(AI_FLAG_UDE_HEARTBEAT_PRE_EVENT, AI_UDE_MASTER); // UDE 1021 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_EVENT, AI_UDE_MASTER); // UDE 1002 - //SetSpawnInCondition(AI_FLAG_UDE_PERCIEVE_PRE_EVENT, AI_UDE_MASTER); // UDE 1022 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_EVENT, AI_UDE_MASTER); // UDE 1003 - //SetSpawnInCondition(AI_FLAG_UDE_END_COMBAT_ROUND_PRE_EVENT, AI_UDE_MASTER); // UDE 1023 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_EVENT, AI_UDE_MASTER); // UDE 1004 - //SetSpawnInCondition(AI_FLAG_UDE_ON_DIALOGUE_PRE_EVENT, AI_UDE_MASTER); // UDE 1024 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); // UDE 1005 - //SetSpawnInCondition(AI_FLAG_UDE_ATTACK_PRE_EVENT, AI_UDE_MASTER); // UDE 1025 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_EVENT, AI_UDE_MASTER); // UDE 1006 - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_PRE_EVENT, AI_UDE_MASTER); // UDE 1026 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_EVENT, AI_UDE_MASTER); // UDE 1007 - //SetSpawnInCondition(AI_FLAG_UDE_DEATH_PRE_EVENT, AI_UDE_MASTER); // UDE 1027 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_EVENT, AI_UDE_MASTER); // UDE 1008 - //SetSpawnInCondition(AI_FLAG_UDE_DISTURBED_PRE_EVENT, AI_UDE_MASTER); // UDE 1028 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_EVENT, AI_UDE_MASTER); // UDE 1009 - //SetSpawnInCondition(AI_FLAG_UDE_RESTED_PRE_EVENT, AI_UDE_MASTER); // UDE 1029 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_EVENT, AI_UDE_MASTER); // UDE 1011 - //SetSpawnInCondition(AI_FLAG_UDE_SPELL_CAST_AT_PRE_EVENT, AI_UDE_MASTER); // UDE 1031 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_EVENT, AI_UDE_MASTER); // UDE 1015 - //SetSpawnInCondition(AI_FLAG_UDE_ON_BLOCKED_PRE_EVENT, AI_UDE_MASTER); // UDE 1035 - - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_EVENT, AI_UDE_MASTER); // UDE 1012 - // Fires when we have finnished all combat actions. - //SetSpawnInCondition(AI_FLAG_UDE_COMBAT_ACTION_PRE_EVENT, AI_UDE_MASTER); // UDE 1032 - // This fires at the start of DetermineCombatRound() *IF they can do an action*. - //SetSpawnInCondition(AI_FLAG_UDE_DAMAGED_AT_1_HP, AI_UDE_MASTER); // UDE 1014 - // Fires when we are damaged, and are at 1 HP. Use for immortal-flagged creatures. - - /*** Speakstrings - as it were, said under cirtain conditions % chance each time ***/ - - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CONVERSATION, 100, 4, "Hello there", "I hope you enjoy your stay", "Do you work here too?", "*Hic*"); - // On Conversation - see readme. Replaces BeginConversation(). - - // Morale - //AI_SetSpawnInSpeakArray(AI_TALK_ON_MORALE_BREAK, 100, 3, "No more!", "I'm outta here!", "Catch me if you can!"); - // Spoken at running point, if they run to a group of allies. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_CANNOT_RUN, 100, 3, "Never give up! Never surrender!", "I've no where to run, so make my day!", "RRRAAAAA!!!"); - // Spoken at running point, if they can find no ally to run to, and 4+ Intelligence. See readme - //AI_SetSpawnInSpeakValue(AI_TALK_ON_STUPID_RUN, "Ahhhhgggg! NO MORE! Run!!"); - // As above, when morale breaks + no ally, but they panic and run from enemy at 3 or less intelligence. - - // Combat - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 5, 4, "Come on!", "You won't win!", "We are not equals! I am better!", "Nothing will stop me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 5, 4, "I'll try! try! and try again!", "Tough man, are we?", "Trying out your 'skills'? Pathetic excuse!", "Nothing good will come from killing me!"); - //AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 5, 4, "My strength is mighty then yours!", "You will definatly die!", "NO chance for you!", "No mercy! Not for YOU!"); - // Spoken each DetermineCombatRound. % is /1000. See readme for Equal/Over/Under values. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_TAUNT, 100, 3, "You're going down!", "No need to think, let my blade do it for you!", "Time to meet your death!"); - // If the creature uses thier skill, taunt, on an enemy this will be said. - - // Event-driven. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PERCIEVE_ENEMY, 70, 6, "Stand and fight, lawbreaker!", "Don't run from the law!", "I have my orders!", "I am ready for violence!", "CHARGE!", "Time you died!"); - // This is said when they see/hear a new enemy, and start attacking them. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_DAMAGED, 20, 2, "Ouch, damn you!", "Haha! Nothing will stop me!"); - // A random value is set to speak when damaged, and may fire same time as below ones. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_PHISICALLY_ATTACKED, 20, 2, "Hah! Mear weapons won't defeat me!", "Pah! You cannot defeat me with such rubbish!"); - // This is said when an enemy attacks the creature with a melee/ranged weapon. - //AI_SetSpawnInSpeakArray(AI_TALK_ON_HOSTILE_SPELL_CAST_AT, 20, 2, "No one spell will stop me!", "Is that all you have!?!"); - // This is said when an enemy attacks the creature with a hostile spell. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_DEATH, "Agggggg!"); - // This will ALWAYS be said, whenever the creature dies. - - // Specific potion ones. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_PASS_POTION, "Here! Catch!"); - // This will be spoken when the creature passes a potion to an ally. See readme. - //AI_SetSpawnInSpeakValue(AI_TALK_WE_GOT_POTION, "Got it!"); - // This will be spoken by the creature we pass the potion too, using AssignCommand(). - - // Leader ones - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_SEND_RUNNER, "Quickly! We need help!"); - // This will be said when the leader, if this creature, sends a runner. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_ATTACK_TARGET, "Help attack this target!"); - // When the leader thinks target X should be attacked, it will say this. - //AI_SetSpawnInSpeakValue(AI_TALK_ON_LEADER_BOSS_SHOUT, "Come my minions! To battle!"); - // This will be said when the leader, if this creature, sees an enemy and uses his "Boss Monster Shout", if turned on. - - -/************************ [User Defined and Shouts] ***************************/ - -/************************ [Bioware: Animations/Waypoints/Treasure] ************* - All Bioware Stuff. I'd check out "x0_c2_spwn_def" for the SoU/Hordes revisions. -************************* [Bioware: Animations/Waypoints/Treasure] ************/ - - // SetSpawnInCondition(NW_FLAG_STEALTH, NW_GENERIC_MASTER); - // SetSpawnInCondition(NW_FLAG_SEARCH, NW_GENERIC_MASTER); - // Uses said skill while WalkWaypoints() - - SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING, NW_GENERIC_MASTER); - // Separate the NPC's waypoints into day & night. See comment in "nw_i0_generic" for use. - - // SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // This will cause an NPC to use common animations it possesses, - // and use social ones to any other nearby friendly NPCs. - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - // Same as above, except NPC will wander randomly around the area. - - SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED); - // Interacts with placeables + More civilized actions. See Readme. - SetAnimationCondition(NW_ANIM_FLAG_CHATTER); - // Will use random voicechats during animations, if Civilized - // SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); - // Will move around the area a bit more, if using Immobile Animations. See readme. - - // Treasure generating. - //CTG_GenerateNPCTreasure(); - // SoU. Requires "x0_i0_treasure" to be uncommented. See readme. - //GenerateNPCTreasure(); - // Default NwN. Requires "nw_o2_coninclude" to be uncommented. See readme. - -/************************ [Bioware: Animations/Waypoints/Treasure] ************/ - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - -/************************ [User] *********************************************** - This is the ONLY place you should add user things, on spawn, such as - visual effects or anything, as it is after SetUpEndOfSpawn. By default, this - does have encounter animations on. This is here, so is easily changed :-D - - Be careful otherwise. - - Notes: - - SetListening is already set to TRUE, unless AI_FLAG_OTHER_LAG_NO_LISTENING is on. - - SetListenPattern's are set from 0 to 7. - - You can use the wrappers AI_SpawnInInstantVisual and AI_SpawnInPermamentVisual - for visual effects (Instant/Permament as appropriate). -************************* [User] **********************************************/ - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - // Leave this in if you use the variable for creature attacks, as for golems. Bioware's code. - int nNumber = GetLocalInt(OBJECT_SELF, "CREATURE_VAR_NUMBER_OF_ATTACKS"); - if(nNumber > 0) - { - SetBaseAttackBonus(nNumber); - } - - // If we are a ranger or paladin class, do not cast spells. This can be - // manually removed if wished. To get the spells they have working correctly, - // remove this, and use Monster Abilties instead of thier normal class spells. -// if(GetLevelByClass(CLASS_TYPE_RANGER) >= 1 || GetLevelByClass(CLASS_TYPE_PALADIN) >= 1) -// { -// SetSpawnInCondition(AI_FLAG_OTHER_LAG_NO_SPELLS, AI_OTHER_MASTER); -// } - -/************************ [User] **********************************************/ - - // Note: You shouldn't really remove this, even if they have no waypoints. - DelayCommand(2.0, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/spawn_cfg_group.nss b/_module/nss/spawn_cfg_group.nss index 75a24d15..6b9a369d 100644 --- a/_module/nss/spawn_cfg_group.nss +++ b/_module/nss/spawn_cfg_group.nss @@ -176,6 +176,24 @@ string SpawnGroup(object oSpawn, string sTemplate) // Only Make Modifications Between These Lines // ------------------------------------------- + //:: Brigands + if (sTemplate == "group_brigands") + { + switch(d3(1)) + { + case 1: + sRetTemplate = "RA_BRIGAND001"; + break; + case 2: + sRetTemplate = "RA_BRIGAND001"; + break; + case 3: + sRetTemplate = "RA_F_BRIGAND001"; + break; + } + } + //:: Brigands + // Aragnak in Lair if (sTemplate == "grp_aragnak") { diff --git a/_module/nss/spawn_chk_custom.nss b/_module/nss/spawn_chk_custom.nss index 58c4d93f..e2c02e4d 100644 --- a/_module/nss/spawn_chk_custom.nss +++ b/_module/nss/spawn_chk_custom.nss @@ -199,6 +199,30 @@ int SpawnCheckCustom(object oSpawn) //:: Checks for stage 2 or lower for the "Spider's Captive quest" +/* //:: Checks for stage 98 or lower (Drusilla's not dead) for the "Vengeful Druid quest" + if (nSpawnCheckCustom == 52) + { + //:: Initialize major variables + object oArea = GetArea(OBJECT_SELF); + object oPC = GetFirstObjectInArea(oArea); + + //:: Cycle through PCs in Area + while (oPC != OBJECT_INVALID) + { + //:: Check quest stage + if ( RetrieveQuestState("VengefulDruid", oPC) <= 98 ) + { + nProcessSpawn = TRUE; + //SendMessageToPC(oPC, "Spawn Processed"); + SetLocalInt(oSpawn, "SpawnProcessed", TRUE); + } + + oPC = GetNextObjectInArea(oArea); + } + } +//:: Checks for stage 98 or lower (Drusilla's not dead) for the "Vengeful Druid quest" */ + + // ------------------------------------------- // Only Make Modifications Between These Lines // diff --git a/_module/nss/spawn_chk_pcs.nss b/_module/nss/spawn_chk_pcs.nss index 06d35d86..24a45970 100644 --- a/_module/nss/spawn_chk_pcs.nss +++ b/_module/nss/spawn_chk_pcs.nss @@ -1,6 +1,11 @@ // // Spawn Check - PCs // + +// void main (){} + + + int ParseFlagValue(string sName, string sFlag, int nDigits, int nDefault); int ParseSubFlagValue(string sName, string sFlag, int nDigits, string sSubFlag, int nSubDigits, int nDefault); object GetChildByTag(object oSpawn, string sChildTag); @@ -111,7 +116,19 @@ int SpawnCheckPCs(object oSpawn) } // - + //:: #52 - Spawn if Drusilla isn't dead + if (nCheckPCs == 52) + { + // Check Journal Quest Entry + int nQuest = GetLocalInt(oPC, "VengefulDruid"); + if (nQuest <= 89) + { + // Quest Entry is less to or equal to 89, Spawn! + nProcessSpawn = TRUE; + } + } + //:: #52 - Spawn if Drusilla isn't dead + // ------------------------------------------- // Only Make Modifications Between These Lines // diff --git a/_module/nss/wererat_onspawn.nss b/_module/nss/wererat_onspawn.nss deleted file mode 100644 index 73dde2ff..00000000 --- a/_module/nss/wererat_onspawn.nss +++ /dev/null @@ -1,96 +0,0 @@ -//:://///////////////////////////////////////////// -//:: wererat_onspawn.nss -//:: Copyright (c) 2022 Project RATDOG -//::////////////////////////////////////////////// -/* - OnSpawn event script for wererats. - -*/ -//::////////////////////////////////////////////// -//:: Created By: Jaysyn -//:: Created On: 20220703 -//::////////////////////////////////////////////// - -const int EVENT_USER_DEFINED_PRESPAWN = 1510; -const int EVENT_USER_DEFINED_POSTSPAWN = 1511; - -#include "j_inc_spawnin" -#include "ms_name_inc" -#include "rnd_commoner_inc" - -void main() -{ - string sTag; - object oNPC; - // User defined OnSpawn event requested? - int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); - - - // Pre Spawn Event requested - if (nSpecEvent == 1 || nSpecEvent == 3 ) - { - SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); - } - - SetAIInteger(AI_INTELLIGENCE, 10); - // This is the intelligence of the creature 1-10. Default to 10 - // Read the file in "Explainations" about this intelligence for more info. - - SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER); - // Fearless - - SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER); - // This will ignore ALL chat by ENEMIES who speak in Stars - IE - // "*Nods*" will be ignored, while "Nods" will not, nor "*Nods" - - SetSpawnInCondition(AI_FLAG_UDE_ATTACK_EVENT, AI_UDE_MASTER); - - // AI Behaviour. DO NOT CHANGE! DO NOT CHANGE!!! - AI_SetUpEndOfSpawn(); - // This MUST be called. It fires these events: - // SetUpSpells, SetUpSkillToUse, SetListeningPatterns, SetWeapons, AdvancedAuras. - // These MUST be called! the AI might fail to work correctly if they don't fire! - - // Example (and default) of user addition: - // - If we are from an encounter, set mobile (move around) animations. - if(GetIsEncounterCreature()) - { - SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, NW_GENERIC_MASTER); - } - -// Check for randomizations. - - ms_Nomenclature(OBJECT_SELF); - - int nKeepskin = GetLocalInt(OBJECT_SELF,"RA_KEEPSKIN"); - if (nKeepskin != 1) - { - rnd_skin(OBJECT_SELF); - } - - rnd_skin(OBJECT_SELF); - - int nKeephead = GetLocalInt(OBJECT_SELF,"RA_KEEPHEAD"); - if (nKeephead != 1) - { - rnd_head(OBJECT_SELF); - } - - int nKeeptats = GetLocalInt(OBJECT_SELF,"RA_KEEPTATS"); - if (nKeeptats != 1) - { - rnd_tattoo(OBJECT_SELF); - } - - - // Execute default OnSpawn script. - ExecuteScript("nw_c2_default9", OBJECT_SELF); - - // Execute PRC OnSpawn script. - ExecuteScript("prc_npc_spawn", OBJECT_SELF); - - // Note: You shouldn't really remove this. Also performs hiding ETC. - DelayCommand(2.0f, SpawnWalkWayPoints()); - // Delayed walk waypoints, as to not upset instant combat spawning. - // This will also check if to change to day/night posts during the walking, no heartbeats. -} diff --git a/_module/nss/x0_s0_inflict.nss b/_module/nss/x0_s0_inflict.nss deleted file mode 100644 index 5217e3e0..00000000 --- a/_module/nss/x0_s0_inflict.nss +++ /dev/null @@ -1,64 +0,0 @@ -//:://///////////////////////////////////////////// -//:: [Inflict Wounds] -//:: [X0_S0_Inflict.nss] -//:: Copyright (c) 2002 Bioware Corp. -//::////////////////////////////////////////////// -//:: This script is used by all the inflict spells -//:: -//::////////////////////////////////////////////// -//:: Created By: Brent -//:: Created On: July 2002 -//:: Modified: 69MEH69 JUL2003 -//::////////////////////////////////////////////// -//:: VFX Pass By: -#include "X0_I0_SPELLS" // * this is the new spells include for expansion packs -#include "prc_inc_racial" - -void main() -{ - int nSpellID = GetSpellId(); - object oTarget = GetSpellTargetObject(); - string sTag = GetTag(oTarget); - object oArea = GetArea(oTarget); - int nCHP = GetLocalInt(oArea, "nCHP" +sTag); - int nCure; - switch (nSpellID) - { -/*Minor*/ case 431: spellsInflictTouchAttack(1, 0, 1, 246, VFX_IMP_HEALING_G, nSpellID); - nCure = 1; - if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure); - } - break; -/*Light*/ case 432: case 609: spellsInflictTouchAttack(d8(), 5, 8, 246, VFX_IMP_HEALING_G, nSpellID); - nCure = d8(1); - if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure); - } - break; -/*Moderate*/ case 433: case 610: spellsInflictTouchAttack(d8(2), 10, 16, 246, VFX_IMP_HEALING_G, nSpellID); - nCure = d8(2); - if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure); - } - break; -/*Serious*/ case 434: case 611: spellsInflictTouchAttack(d8(3), 15, 24, 246, VFX_IMP_HEALING_G, nSpellID); - nCure = d8(3); - if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure); - } - break; -/*Critical*/ case 435: case 612: spellsInflictTouchAttack(d8(4), 20, 32, 246, VFX_IMP_HEALING_G, nSpellID); - nCure = d8(4); - if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) - { - SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure); - } - break; - - } -} diff --git a/_module/nss/x2_def_spawn.nss b/_module/nss/x2_def_spawn.nss index 6c323eaf..58b943d0 100644 --- a/_module/nss/x2_def_spawn.nss +++ b/_module/nss/x2_def_spawn.nss @@ -51,7 +51,10 @@ void GrowEm(object oPC) void main() { string sTag; + string sResRef = GetResRef(OBJECT_SELF); + object oNPC; + // User defined OnSpawn event requested? int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); @@ -470,10 +473,19 @@ void main() } - // Execute default OnSpawn script. - ExecuteScript("nw_c2_default9", OBJECT_SELF); +//:: Execute OnSpawn script. + if (sResRef == "monst_spider004") + { + //:: Execute drop in from above spawn. + ExecuteScript("nw_c2_dropin9", OBJECT_SELF); + } + else + { + //:: Execute default OnSpawn script. + ExecuteScript("nw_c2_default9", OBJECT_SELF); + } - // Execute PRC OnSpawn script. + //:: Execute PRC OnSpawn script. ExecuteScript("prc_npc_spawn", OBJECT_SELF); diff --git a/_module/ra_tdog.mod b/_module/ra_tdog.mod index af9ca2b6..563cce4b 100644 Binary files a/_module/ra_tdog.mod and b/_module/ra_tdog.mod differ diff --git a/_module/utc/corrak1.utc.json b/_module/utc/ac_sheiju.utc.json similarity index 59% rename from _module/utc/corrak1.utc.json rename to _module/utc/ac_sheiju.utc.json index 8b773f44..b5c70048 100644 --- a/_module/utc/corrak1.utc.json +++ b/_module/utc/ac_sheiju.utc.json @@ -2,7 +2,7 @@ "__data_type": "UTC ", "Appearance_Type": { "type": "word", - "value": 1215 + "value": 309 }, "BodyBag": { "type": "byte", @@ -10,11 +10,11 @@ }, "Cha": { "type": "byte", - "value": 13 + "value": 6 }, "ChallengeRating": { "type": "float", - "value": 8.0 + "value": 10.0 }, "ClassList": { "type": "list", @@ -23,37 +23,26 @@ "__struct_id": 2, "Class": { "type": "int", - "value": 25 + "value": 12 }, "ClassLevel": { "type": "short", - "value": 4 - } - }, - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 8 - }, - "ClassLevel": { - "type": "short", - "value": 8 + "value": 10 } } ] }, "Comment": { "type": "cexostring", - "value": "" + "value": "Animal Compaion: Sheiju\r\n\r\nRappan Athuk Reloaded, pg. 266\r\n\r\nKnockdown = Trip\r\n\r\n" }, "Con": { "type": "byte", - "value": 12 + "value": 15 }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -61,26 +50,24 @@ }, "CurrentHitPoints": { "type": "short", - "value": 46 + "value": 60 }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", "value": "" }, "Description": { - "id": 16816556, + "id": 12815, "type": "cexolocstring", - "value": { - "0": "Doppelgangers are strange beings that are able to take on the shapes of those they encounter." - } + "value": {} }, "Dex": { "type": "byte", - "value": 15 + "value": 19 }, "Disarmable": { "type": "byte", @@ -89,72 +76,18 @@ "Equip_ItemList": { "type": "list", "value": [ - { - "__struct_id": 2, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "aarcl002" - } - }, - { - "__struct_id": 16, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "nw_wswrp001" - } - }, - { - "__struct_id": 8192, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "nw_wammbo008" - } - }, { "__struct_id": 16384, - "EquippedRes": { - "type": "resref", - "value": "nw_it_crewpsp005" - } - }, - { - "__struct_id": 32768, - "EquippedRes": { - "type": "resref", - "value": "nw_it_crewpb005" - } - }, - { - "__struct_id": 65536, "EquippedRes": { "type": "resref", "value": "nw_it_crewps005" } - }, - { - "__struct_id": 131072, - "EquippedRes": { - "type": "resref", - "value": "zep_cre_doppelh" - } } ] }, "FactionID": { "type": "word", - "value": 15 + "value": 20 }, "FeatList": { "type": "list", @@ -163,28 +96,14 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 1 + "value": 3297 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 3 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 228 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 10 + "value": 2568 } }, { @@ -198,28 +117,35 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 193 + "value": 23 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 347 + "value": 354 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 41 + "value": 24070 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 251 + "value": 2569 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 291 } }, { @@ -228,21 +154,14 @@ "type": "word", "value": 289 } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 50 - } } ] }, "FirstName": { - "id": 16808884, + "id": 12816, "type": "cexolocstring", "value": { - "0": "Corrak" + "0": "Animal Compaion: Sheiju" } }, "fortbonus": { @@ -259,11 +178,11 @@ }, "HitPoints": { "type": "short", - "value": 46 + "value": 60 }, "Int": { "type": "byte", - "value": 13 + "value": 3 }, "Interruptable": { "type": "byte", @@ -277,197 +196,6 @@ "type": "byte", "value": 0 }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_wbwxl001" - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "InventoryRes": { - "type": "resref", - "value": "nw_wambo001" - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 2, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "it_gold015" - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 3, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem002" - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 4, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem009" - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 5, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem011" - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 6, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem001" - }, - "Repos_PosX": { - "type": "word", - "value": 8 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 7, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem013" - }, - "Repos_PosX": { - "type": "word", - "value": 9 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 8, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem003" - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 9, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "item057" - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - } - } - ] - }, "LastName": { "type": "cexolocstring", "value": {} @@ -482,11 +210,11 @@ }, "MaxHitPoints": { "type": "short", - "value": 58 + "value": 80 }, "NaturalAC": { "type": "byte", - "value": 0 + "value": 10 }, "NoPermDeath": { "type": "byte", @@ -494,7 +222,7 @@ }, "PaletteID": { "type": "byte", - "value": 12 + "value": 7 }, "PerceptionRange": { "type": "byte", @@ -510,11 +238,11 @@ }, "PortraitId": { "type": "word", - "value": 2221 + "value": 319 }, "Race": { "type": "byte", - "value": 23 + "value": 19 }, "refbonus": { "type": "short", @@ -522,55 +250,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -593,7 +321,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 13 } }, { @@ -607,21 +342,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 7 } }, { "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 11 + "value": 13 } }, { @@ -635,14 +363,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 + "value": 7 } }, { @@ -677,14 +398,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 + "value": 0 } }, { @@ -698,7 +412,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 0 } }, { @@ -712,7 +426,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 13 } }, { @@ -726,14 +440,28 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 0 } }, { "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 } }, { @@ -852,7 +580,7 @@ }, "SoundSetFile": { "type": "word", - "value": 188 + "value": 103 }, "SpecAbilityList": { "type": "list", @@ -860,19 +588,19 @@ }, "StartingPackage": { "type": "byte", - "value": 8 + "value": 0 }, "Str": { "type": "byte", - "value": 12 + "value": 17 }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Animal" }, "Tag": { "type": "cexostring", - "value": "corrak1" + "value": "AC_SHEIJU" }, "Tail_New": { "type": "dword", @@ -884,11 +612,46 @@ }, "TemplateResRef": { "type": "resref", - "value": "corrak1" + "value": "ac_sheiju" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Sheiju" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } + } + ] }, "WalkRate": { "type": "int", - "value": 7 + "value": 6 }, "willbonus": { "type": "short", @@ -900,6 +663,6 @@ }, "Wis": { "type": "byte", - "value": 14 + "value": 12 } } diff --git a/_module/utc/acolyteoforcu001.utc.json b/_module/utc/acolyteoforcu001.utc.json index 71b7ace5..e009c3a9 100644 --- a/_module/utc/acolyteoforcu001.utc.json +++ b/_module/utc/acolyteoforcu001.utc.json @@ -256,7 +256,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Acolyte of Orcus" }, "Con": { "type": "byte", @@ -584,55 +584,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -948,6 +948,26 @@ "type": "resref", "value": "acolyteoforcu001" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Acolyte of Orcus" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/bandit002.utc.json b/_module/utc/bandit002.utc.json index b1a3bbaa..189b0133 100644 --- a/_module/utc/bandit002.utc.json +++ b/_module/utc/bandit002.utc.json @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -268,55 +268,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -614,7 +614,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", @@ -632,6 +632,41 @@ "type": "resref", "value": "bandit002" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Bandit" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/corrak002.utc.json b/_module/utc/bandit_corrak.utc.json similarity index 60% rename from _module/utc/corrak002.utc.json rename to _module/utc/bandit_corrak.utc.json index 02df0ee8..babc086c 100644 --- a/_module/utc/corrak002.utc.json +++ b/_module/utc/bandit_corrak.utc.json @@ -2,11 +2,11 @@ "__data_type": "UTC ", "Appearance_Head": { "type": "byte", - "value": 9 + "value": 1 }, "Appearance_Type": { "type": "word", - "value": 6 + "value": 5 }, "ArmorPart_RFoot": { "type": "byte", @@ -86,7 +86,7 @@ }, "Cha": { "type": "byte", - "value": 13 + "value": 17 }, "ChallengeRating": { "type": "float", @@ -95,17 +95,6 @@ "ClassList": { "type": "list", "value": [ - { - "__struct_id": 2, - "Class": { - "type": "int", - "value": 25 - }, - "ClassLevel": { - "type": "short", - "value": 4 - } - }, { "__struct_id": 2, "Class": { @@ -121,27 +110,27 @@ }, "Color_Hair": { "type": "byte", - "value": 11 + "value": 9 }, "Color_Skin": { "type": "byte", - "value": 9 + "value": 117 }, "Color_Tattoo1": { "type": "byte", - "value": 1 + "value": 153 }, "Color_Tattoo2": { "type": "byte", - "value": 1 + "value": 153 }, "Comment": { "type": "cexostring", - "value": "" + "value": "Corrack the Doppelganger\r\n\r\nRappan Athuk Reloaded, pg. " }, "Con": { "type": "byte", - "value": 12 + "value": 10 }, "Conversation": { "type": "resref", @@ -153,26 +142,25 @@ }, "CurrentHitPoints": { "type": "short", - "value": 46 + "value": 47 }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", "value": "" }, "Description": { - "id": 16816556, "type": "cexolocstring", "value": { - "0": "" + "0": "This woman's appearance seems to shift as you look at him." } }, "Dex": { "type": "byte", - "value": 15 + "value": 16 }, "Disarmable": { "type": "byte", @@ -183,13 +171,9 @@ "value": [ { "__struct_id": 2, - "Dropable": { - "type": "byte", - "value": 1 - }, "EquippedRes": { "type": "resref", - "value": "aarcl002" + "value": "x2_mdrowar001" } }, { @@ -200,47 +184,15 @@ }, "EquippedRes": { "type": "resref", - "value": "nw_wswrp001" + "value": "wswmrp012" } }, { "__struct_id": 8192, - "Dropable": { - "type": "byte", - "value": 1 - }, "EquippedRes": { "type": "resref", "value": "nw_wammbo008" } - }, - { - "__struct_id": 16384, - "EquippedRes": { - "type": "resref", - "value": "nw_it_crewpsp005" - } - }, - { - "__struct_id": 32768, - "EquippedRes": { - "type": "resref", - "value": "nw_it_crewpb005" - } - }, - { - "__struct_id": 65536, - "EquippedRes": { - "type": "resref", - "value": "nw_it_crewps005" - } - }, - { - "__struct_id": 131072, - "EquippedRes": { - "type": "resref", - "value": "zep_cre_doppelh" - } } ] }, @@ -255,7 +207,7 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 1 + "value": 0 } }, { @@ -265,6 +217,34 @@ "value": 3 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4562 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3112 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2898 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5195 + } + }, { "__struct_id": 1, "Feat": { @@ -279,6 +259,20 @@ "value": 10 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2468 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2568 + } + }, { "__struct_id": 1, "Feat": { @@ -290,7 +284,84 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 193 + "value": 2919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4095 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4092 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1089 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4735 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3415 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2285 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4550 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 221 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 346 } }, { @@ -304,7 +375,7 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 41 + "value": 4235 } }, { @@ -318,7 +389,7 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 289 + "value": 42 } }, { @@ -327,14 +398,83 @@ "type": "word", "value": 50 } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7914 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7908 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7923 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7924 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7910 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7901 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7930 + } } ] }, "FirstName": { - "id": 16808884, "type": "cexolocstring", "value": { - "0": "Corrak" + "0": "Corrak the Doppelganger" } }, "fortbonus": { @@ -347,15 +487,15 @@ }, "GoodEvil": { "type": "byte", - "value": 50 + "value": 0 }, "HitPoints": { "type": "short", - "value": 46 + "value": 47 }, "Int": { "type": "byte", - "value": 13 + "value": 15 }, "Interruptable": { "type": "byte", @@ -380,7 +520,11 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_wbwxl001" + "value": "nw_it_picks001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", @@ -395,11 +539,11 @@ "__struct_id": 1, "InventoryRes": { "type": "resref", - "value": "nw_wambo001" + "value": "nw_wbwxl001" }, "Repos_PosX": { "type": "word", - "value": 2 + "value": 1 }, "Repos_Posy": { "type": "word", @@ -414,7 +558,7 @@ }, "InventoryRes": { "type": "resref", - "value": "it_gold015" + "value": "nw_wambo001" }, "Repos_PosX": { "type": "word", @@ -433,11 +577,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem002" + "value": "x1_wmgrenade001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 5 + "value": 4 }, "Repos_Posy": { "type": "word", @@ -452,11 +600,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem009" + "value": "x1_wmgrenade001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 6 + "value": 5 }, "Repos_Posy": { "type": "word", @@ -471,11 +623,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem011" + "value": "x1_wmgrenade006" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 7 + "value": 6 }, "Repos_Posy": { "type": "word", @@ -490,11 +646,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem001" + "value": "x1_wmgrenade007" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 8 + "value": 7 }, "Repos_Posy": { "type": "word", @@ -509,11 +669,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem013" + "value": "x1_wmgrenade007" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 9 + "value": 8 }, "Repos_Posy": { "type": "word", @@ -528,7 +692,49 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_gem003" + "value": "x1_wmgrenade007" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion014" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 10, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "it_gold020" }, "Repos_PosX": { "type": "word", @@ -540,7 +746,145 @@ } }, { - "__struct_id": 9, + "__struct_id": 11, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem013" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 12, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 13, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 14, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 15, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 16, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 17, "Dropable": { "type": "byte", "value": 1 @@ -551,18 +895,20 @@ }, "Repos_PosX": { "type": "word", - "value": 6 + "value": 8 }, "Repos_Posy": { "type": "word", - "value": 1 + "value": 2 } } ] }, "LastName": { "type": "cexolocstring", - "value": {} + "value": { + "0": "" + } }, "LawfulChaotic": { "type": "byte", @@ -574,7 +920,7 @@ }, "MaxHitPoints": { "type": "short", - "value": 58 + "value": 55 }, "NaturalAC": { "type": "byte", @@ -586,7 +932,7 @@ }, "PaletteID": { "type": "byte", - "value": 12 + "value": 45 }, "PerceptionRange": { "type": "byte", @@ -602,11 +948,11 @@ }, "PortraitId": { "type": "word", - "value": 67 + "value": 1028 }, "Race": { "type": "byte", - "value": 23 + "value": 125 }, "refbonus": { "type": "short", @@ -614,55 +960,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "talk2pc_onpercp" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -685,7 +1031,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 } }, { @@ -699,84 +1052,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 7 } }, { "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 11 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 8 + "value": 5 } }, { @@ -804,14 +1087,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 0 } }, { "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 9 } }, { @@ -825,7 +1108,140 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 8 + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 13 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 } }, { @@ -860,77 +1276,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 + "value": 4 } }, { @@ -952,7 +1298,7 @@ }, "StartingPackage": { "type": "byte", - "value": 8 + "value": 62 }, "Str": { "type": "byte", @@ -960,11 +1306,11 @@ }, "Subrace": { "type": "cexostring", - "value": "Shapechanger" + "value": "Doppelganger" }, "Tag": { "type": "cexostring", - "value": "corrak2" + "value": "SpawnFaction" }, "Tail_New": { "type": "dword", @@ -976,11 +1322,91 @@ }, "TemplateResRef": { "type": "resref", - "value": "corrak002" + "value": "bandit_corrak" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Corrak" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] }, "WalkRate": { "type": "int", - "value": 7 + "value": 4 }, "willbonus": { "type": "short", @@ -992,6 +1418,6 @@ }, "Wis": { "type": "byte", - "value": 14 + "value": 12 } } diff --git a/_module/utc/bandit_erlin.utc.json b/_module/utc/bandit_erlin.utc.json index 1b386c4a..0c226345 100644 --- a/_module/utc/bandit_erlin.utc.json +++ b/_module/utc/bandit_erlin.utc.json @@ -400,55 +400,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -781,6 +781,66 @@ "type": "cexostring", "value": "Erlin" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } } ] }, diff --git a/_module/utc/bandit_felrara.utc.json b/_module/utc/bandit_felrara.utc.json index 486c91c8..b6974a98 100644 --- a/_module/utc/bandit_felrara.utc.json +++ b/_module/utc/bandit_felrara.utc.json @@ -462,55 +462,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -888,6 +888,21 @@ "type": "int", "value": 1 } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } } ] }, diff --git a/_module/utc/bandit_footman.utc.json b/_module/utc/bandit_footman.utc.json index a8e6e0d7..bde6f4ac 100644 --- a/_module/utc/bandit_footman.utc.json +++ b/_module/utc/bandit_footman.utc.json @@ -180,14 +180,7 @@ "__struct_id": 16, "EquippedRes": { "type": "resref", - "value": "nw_wplss001" - } - }, - { - "__struct_id": 32, - "EquippedRes": { - "type": "resref", - "value": "nw_ashsw001" + "value": "nw_wbwxl001" } }, { @@ -338,7 +331,7 @@ "__struct_id": 1, "InventoryRes": { "type": "resref", - "value": "nw_wbwxl001" + "value": "nw_wplss001" }, "Repos_PosX": { "type": "word", @@ -348,6 +341,21 @@ "type": "word", "value": 0 } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_ashsw001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } } ] }, @@ -407,55 +415,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_rnd_ftman_spw" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -788,6 +796,21 @@ "type": "cexostring", "value": "Footman" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/bandit_gortizin.utc.json b/_module/utc/bandit_gortizin.utc.json index a15df30c..77c28b31 100644 --- a/_module/utc/bandit_gortizin.utc.json +++ b/_module/utc/bandit_gortizin.utc.json @@ -400,55 +400,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -781,6 +781,66 @@ "type": "cexostring", "value": "Gortizin" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } } ] }, diff --git a/_module/utc/grawlic.utc.json b/_module/utc/bandit_grawlic.utc.json similarity index 76% rename from _module/utc/grawlic.utc.json rename to _module/utc/bandit_grawlic.utc.json index 78f3b2a7..6caf3c1e 100644 --- a/_module/utc/grawlic.utc.json +++ b/_module/utc/bandit_grawlic.utc.json @@ -2,7 +2,7 @@ "__data_type": "UTC ", "Appearance_Head": { "type": "byte", - "value": 3 + "value": 5 }, "Appearance_Type": { "type": "word", @@ -86,11 +86,11 @@ }, "Cha": { "type": "byte", - "value": 12 + "value": 8 }, "ChallengeRating": { "type": "float", - "value": 4.0 + "value": 5.0 }, "ClassList": { "type": "list", @@ -110,31 +110,31 @@ }, "Color_Hair": { "type": "byte", - "value": 31 + "value": 135 }, "Color_Skin": { "type": "byte", - "value": 8 + "value": 116 }, "Color_Tattoo1": { "type": "byte", - "value": 1 + "value": 103 }, "Color_Tattoo2": { "type": "byte", - "value": 1 + "value": 102 }, "Comment": { "type": "cexostring", - "value": "" + "value": "Grawlic the Bandit\r\n\r\nImproved Initiative = Run\r\n\r\nRappan Athuk, pg. 270" }, "Con": { "type": "byte", - "value": 14 + "value": 12 }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -142,11 +142,11 @@ }, "CurrentHitPoints": { "type": "short", - "value": 23 + "value": 19 }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -154,11 +154,13 @@ }, "Description": { "type": "cexolocstring", - "value": {} + "value": { + "0": "The greasy dwarf grins & grabs his mace." + } }, "Dex": { "type": "byte", - "value": 17 + "value": 18 }, "Disarmable": { "type": "byte", @@ -178,17 +180,6 @@ "value": "aarcl004" } }, - { - "__struct_id": 8, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "nw_it_mbracer002" - } - }, { "__struct_id": 16, "Dropable": { @@ -197,7 +188,7 @@ }, "EquippedRes": { "type": "resref", - "value": "nw_wbwxl001" + "value": "nw_wblml001" } }, { @@ -208,25 +199,22 @@ }, "EquippedRes": { "type": "resref", - "value": "nw_wammbo007" + "value": "ra_wammbo_shdess" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 } } ] }, "FactionID": { "type": "word", - "value": 7 + "value": 15 }, "FeatList": { "type": "list", "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 1 - } - }, { "__struct_id": 1, "Feat": { @@ -255,6 +243,34 @@ "value": 231 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 408 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3112 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2898 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5195 + } + }, { "__struct_id": 1, "Feat": { @@ -262,6 +278,20 @@ "value": 228 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4710 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2468 + } + }, { "__struct_id": 1, "Feat": { @@ -269,6 +299,13 @@ "value": 206 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2919 + } + }, { "__struct_id": 1, "Feat": { @@ -287,7 +324,70 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 32 + "value": 4095 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4092 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 377 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1089 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3415 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2285 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4792 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4757 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4758 } }, { @@ -322,7 +422,7 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 41 + "value": 4235 } }, { @@ -332,19 +432,96 @@ "value": 251 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, { "__struct_id": 1, "Feat": { "type": "word", "value": 50 } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7914 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7908 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7923 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7924 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7910 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7901 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7930 + } } ] }, "FirstName": { "type": "cexolocstring", "value": { - "0": "Grawlic" + "0": "Grawlic the Bandit" } }, "fortbonus": { @@ -361,15 +538,15 @@ }, "HitPoints": { "type": "short", - "value": 23 + "value": 19 }, "Int": { "type": "byte", - "value": 14 + "value": 11 }, "Interruptable": { "type": "byte", - "value": 1 + "value": 0 }, "IsImmortal": { "type": "byte", @@ -384,9 +561,13 @@ "value": [ { "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, "InventoryRes": { "type": "resref", - "value": "nw_it_torch001" + "value": "nw_wbwxl001" }, "Repos_PosX": { "type": "word", @@ -399,13 +580,21 @@ }, { "__struct_id": 1, + "Dropable": { + "type": "byte", + "value": 1 + }, "InventoryRes": { "type": "resref", - "value": "nw_it_picks001" + "value": "nw_it_mpotion014" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 1 + "value": 2 }, "Repos_Posy": { "type": "word", @@ -420,11 +609,15 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_wswdg001" + "value": "nw_it_mpotion006" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 2 + "value": 3 }, "Repos_Posy": { "type": "word", @@ -439,11 +632,15 @@ }, "InventoryRes": { "type": "resref", - "value": "zep_buckler" + "value": "nw_wambo001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 3 + "value": 4 }, "Repos_Posy": { "type": "word", @@ -458,7 +655,11 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_wswdg001" + "value": "nw_it_picks001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", @@ -477,7 +678,7 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_wswdg001" + "value": "it_gold016" }, "Repos_PosX": { "type": "word", @@ -496,26 +697,7 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_wblms001" - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 7, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_wmgwn012" + "value": "nw_it_gem015" }, "Pickpocketable": { "type": "byte", @@ -531,14 +713,14 @@ } }, { - "__struct_id": 8, + "__struct_id": 7, "Dropable": { "type": "byte", "value": 1 }, "InventoryRes": { "type": "resref", - "value": "nw_it_sparscr103" + "value": "nw_it_gem015" }, "Pickpocketable": { "type": "byte", @@ -554,14 +736,14 @@ } }, { - "__struct_id": 9, + "__struct_id": 8, "Dropable": { "type": "byte", "value": 1 }, "InventoryRes": { "type": "resref", - "value": "nw_it_sparscr106" + "value": "nw_it_gem015" }, "Pickpocketable": { "type": "byte", @@ -569,7 +751,30 @@ }, "Repos_PosX": { "type": "word", - "value": 2 + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 9, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem015" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 9 }, "Repos_Posy": { "type": "word", @@ -582,182 +787,22 @@ "type": "byte", "value": 1 }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_sparscr207" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 11, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_mpotion014" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 12, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_mpotion006" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 9 - }, - "Repos_Posy": { - "type": "word", - "value": 1 - } - }, - { - "__struct_id": 13, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem009" - }, - "Repos_PosX": { - "type": "word", - "value": 1 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 14, - "Dropable": { - "type": "byte", - "value": 1 - }, "InventoryRes": { "type": "resref", "value": "nw_it_gem015" }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 15, - "Dropable": { + "Pickpocketable": { "type": "byte", "value": 1 }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem011" - }, "Repos_PosX": { "type": "word", - "value": 3 + "value": 2 }, "Repos_Posy": { "type": "word", "value": 2 } - }, - { - "__struct_id": 16, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem001" - }, - "Repos_PosX": { - "type": "word", - "value": 4 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 17, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_gem002" - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - } - }, - { - "__struct_id": 18, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "it_gold016" - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 3 - } } ] }, @@ -769,7 +814,7 @@ }, "LawfulChaotic": { "type": "byte", - "value": 100 + "value": 0 }, "Lootable": { "type": "byte", @@ -777,7 +822,7 @@ }, "MaxHitPoints": { "type": "short", - "value": 41 + "value": 31 }, "NaturalAC": { "type": "byte", @@ -805,7 +850,7 @@ }, "PortraitId": { "type": "word", - "value": 12 + "value": 1027 }, "Race": { "type": "byte", @@ -817,241 +862,59 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", "value": [ - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 7 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, { "__struct_id": 0, "Rank": { @@ -1066,6 +929,13 @@ "value": 0 } }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, { "__struct_id": 0, "Rank": { @@ -1087,6 +957,181 @@ "value": 0 } }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, { "__struct_id": 0, "Rank": { @@ -1159,15 +1204,15 @@ }, "Str": { "type": "byte", - "value": 12 + "value": 10 }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Dwarf" }, "Tag": { "type": "cexostring", - "value": "Grawlic" + "value": "BANDIT_GRAWLIC" }, "Tail_New": { "type": "dword", @@ -1179,7 +1224,87 @@ }, "TemplateResRef": { "type": "resref", - "value": "grawlic" + "value": "bandit_grawlic" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Grawlic" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] }, "WalkRate": { "type": "int", @@ -1195,6 +1320,6 @@ }, "Wis": { "type": "byte", - "value": 8 + "value": 11 } } diff --git a/_module/utc/bandit_jel.utc.json b/_module/utc/bandit_jel.utc.json new file mode 100644 index 00000000..58b149cd --- /dev/null +++ b/_module/utc/bandit_jel.utc.json @@ -0,0 +1,1394 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 1 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 7.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 7 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 4 + }, + "Color_Skin": { + "type": "byte", + "value": 38 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 52 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "Jel the Bandit\r\n\r\nRappan Athuk Reloaded, pg. 273" + }, + "Con": { + "type": "byte", + "value": 12 + }, + "Conversation": { + "type": "resref", + "value": "cv_chamed" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 34 + }, + "DecayTime": { + "type": "dword", + "value": 10000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This hulking half-orc spins her axe threateningly." + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Dropable": { + "type": "byte", + "value": 1 + }, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl012" + } + }, + { + "__struct_id": 16, + "Dropable": { + "type": "byte", + "value": 1 + }, + "EquippedRes": { + "type": "resref", + "value": "wdbax002" + } + }, + { + "__struct_id": 512, + "EquippedRes": { + "type": "resref", + "value": "nw_it_mneck012" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "nw_wamar001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 15 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 199 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3112 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2898 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2468 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2568 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2980 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 267 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4095 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4092 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1089 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3415 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3179 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2285 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2569 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 201 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7903 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7914 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7943 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7949 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7913 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7912 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7909 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7919 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7917 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7939 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7905 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7918 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7938 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7908 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7940 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7907 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7902 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7947 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7923 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7924 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7925 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7910 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7927 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7901 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7929 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7930 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7931 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7932 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7906 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Jel the Bandit" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 34 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wbwmsh002" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wammar010" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem015" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem011" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem002" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 40 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 131 + }, + "Race": { + "type": "byte", + "value": 5 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "ra_ai_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "ra_ai_ondamaged" + }, + "ScriptDeath": { + "type": "resref", + "value": "ra_ai_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "ra_ai_onconverse" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "ra_ai_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "ra_ai_endcmbtrnd" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ra_ai_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "ra_ai_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "ra_ai_onpercept" + }, + "ScriptRested": { + "type": "resref", + "value": "ra_ai_onrested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "ra_ai_onspawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "ra_ai_onspelled" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "ra_ai_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 245 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 7 + }, + "Str": { + "type": "byte", + "value": 13 + }, + "Subrace": { + "type": "cexostring", + "value": "Half-Orc" + }, + "Tag": { + "type": "cexostring", + "value": "BANDIT_JEL" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bandit_jel" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Jel" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 9 + } +} diff --git a/_module/utc/zanafia.utc.json b/_module/utc/bandit_zanaphia.utc.json similarity index 82% rename from _module/utc/zanafia.utc.json rename to _module/utc/bandit_zanaphia.utc.json index 5e95fd76..92d3d879 100644 --- a/_module/utc/zanafia.utc.json +++ b/_module/utc/bandit_zanaphia.utc.json @@ -86,11 +86,11 @@ }, "Cha": { "type": "byte", - "value": 10 + "value": 7 }, "ChallengeRating": { "type": "float", - "value": 5.0 + "value": 4.0 }, "ClassList": { "type": "list", @@ -123,6 +123,36 @@ "value": 0 } }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 1576 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 416 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, { "__struct_id": 3, "Spell": { @@ -142,7 +172,7 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 144 + "value": 2079 }, "SpellFlags": { "type": "byte", @@ -157,7 +187,7 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 151 + "value": 1500 }, "SpellFlags": { "type": "byte", @@ -188,21 +218,6 @@ "value": 0 } }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 102 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, { "__struct_id": 3, "Spell": { @@ -222,7 +237,22 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 174 + "value": 417 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 }, "SpellFlags": { "type": "byte", @@ -242,7 +272,7 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 120 + "value": 2845 }, "SpellFlags": { "type": "byte", @@ -272,22 +302,22 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 115 + "value": 102 }, "SpellFlags": { "type": "byte", - "value": 1 + "value": 0 }, "SpellMetaMagic": { "type": "byte", - "value": 0 + "value": 2 } }, { "__struct_id": 3, "Spell": { "type": "word", - "value": 175 + "value": 3209 }, "SpellFlags": { "type": "byte", @@ -303,21 +333,6 @@ "MemorizedList3": { "type": "list", "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 21 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, { "__struct_id": 3, "Spell": { @@ -337,7 +352,7 @@ "__struct_id": 3, "Spell": { "type": "word", - "value": 176 + "value": 78 }, "SpellFlags": { "type": "byte", @@ -355,31 +370,31 @@ }, "Color_Hair": { "type": "byte", - "value": 54 + "value": 118 }, "Color_Skin": { "type": "byte", - "value": 1 + "value": 116 }, "Color_Tattoo1": { "type": "byte", - "value": 1 + "value": 103 }, "Color_Tattoo2": { "type": "byte", - "value": 1 + "value": 102 }, "Comment": { "type": "cexostring", - "value": "" + "value": "Zanaphia the Bandit\r\n\r\nImproved Initiative = Run\r\n\r\nCombat Casting = Enlarge Spell\r\n\r\nRappan Athuk Reloaded, pg. 297\r\n\r\n" }, "Con": { "type": "byte", - "value": 14 + "value": 16 }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -387,11 +402,11 @@ }, "CurrentHitPoints": { "type": "short", - "value": 16 + "value": 13 }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -399,11 +414,13 @@ }, "Description": { "type": "cexolocstring", - "value": {} + "value": { + "0": "This half-elf snarls at you and starts casting a spell." + } }, "Dex": { "type": "byte", - "value": 14 + "value": 11 }, "Disarmable": { "type": "byte", @@ -414,6 +431,10 @@ "value": [ { "__struct_id": 2, + "Dropable": { + "type": "byte", + "value": 1 + }, "EquippedRes": { "type": "resref", "value": "zep_wizrobes" @@ -431,28 +452,21 @@ } }, { - "__struct_id": 8192, + "__struct_id": 128, "EquippedRes": { "type": "resref", - "value": "nw_wambo001" + "value": "ra_itmrng_wiz0" } } ] }, "FactionID": { "type": "word", - "value": 7 + "value": 15 }, "FeatList": { "type": "list", "value": [ - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 944 - } - }, { "__struct_id": 1, "Feat": { @@ -464,14 +478,7 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 946 - } - }, - { - "__struct_id": 1, - "Feat": { - "type": "word", - "value": 11 + "value": 12 } }, { @@ -488,6 +495,13 @@ "value": 235 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 377 + } + }, { "__struct_id": 1, "Feat": { @@ -523,6 +537,13 @@ "value": 945 } }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, { "__struct_id": 1, "Feat": { @@ -542,7 +563,7 @@ "FirstName": { "type": "cexolocstring", "value": { - "0": "Zanafia" + "0": "Zanaphia the Bandit" } }, "fortbonus": { @@ -559,11 +580,11 @@ }, "HitPoints": { "type": "short", - "value": 16 + "value": 13 }, "Int": { "type": "byte", - "value": 17 + "value": 15 }, "Interruptable": { "type": "byte", @@ -582,9 +603,17 @@ "value": [ { "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, "InventoryRes": { "type": "resref", - "value": "nw_wbwxl001" + "value": "nw_it_mpotion006" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", @@ -603,11 +632,11 @@ }, "InventoryRes": { "type": "resref", - "value": "nw_it_mpotion006" + "value": "wandofcharm" }, "Repos_PosX": { "type": "word", - "value": 2 + "value": 1 }, "Repos_Posy": { "type": "word", @@ -622,11 +651,15 @@ }, "InventoryRes": { "type": "resref", - "value": "wandofcharm" + "value": "it_gem015" + }, + "Pickpocketable": { + "type": "byte", + "value": 1 }, "Repos_PosX": { "type": "word", - "value": 3 + "value": 2 }, "Repos_Posy": { "type": "word", @@ -649,7 +682,7 @@ }, "Repos_PosX": { "type": "word", - "value": 4 + "value": 3 }, "Repos_Posy": { "type": "word", @@ -672,7 +705,7 @@ }, "Repos_PosX": { "type": "word", - "value": 5 + "value": 4 }, "Repos_Posy": { "type": "word", @@ -695,7 +728,7 @@ }, "Repos_PosX": { "type": "word", - "value": 6 + "value": 5 }, "Repos_Posy": { "type": "word", @@ -712,9 +745,13 @@ "type": "resref", "value": "it_gem015" }, + "Pickpocketable": { + "type": "byte", + "value": 1 + }, "Repos_PosX": { "type": "word", - "value": 7 + "value": 6 }, "Repos_Posy": { "type": "word", @@ -729,16 +766,35 @@ }, "InventoryRes": { "type": "resref", - "value": "it_gem015" + "value": "ra_it_gold295" }, "Repos_PosX": { "type": "word", - "value": 8 + "value": 7 }, "Repos_Posy": { "type": "word", "value": 0 } + }, + { + "__struct_id": 8, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ra_spbook_zana" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } } ] }, @@ -758,7 +814,7 @@ }, "MaxHitPoints": { "type": "short", - "value": 28 + "value": 31 }, "NaturalAC": { "type": "byte", @@ -798,55 +854,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -862,7 +918,21 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 9 + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 } }, { @@ -883,28 +953,14 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 9 + "value": 1 } }, { "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 + "value": 5 } }, { @@ -939,7 +995,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 2 } }, { @@ -949,6 +1005,34 @@ "value": 0 } }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, { "__struct_id": 0, "Rank": { @@ -967,7 +1051,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 9 + "value": 3 } }, { @@ -1005,34 +1089,6 @@ "value": 0 } }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 9 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 0 - } - }, { "__struct_id": 0, "Rank": { @@ -1140,15 +1196,15 @@ }, "Str": { "type": "byte", - "value": 10 + "value": 13 }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Half-Elf" }, "Tag": { "type": "cexostring", - "value": "Zanafia" + "value": "BANDIT_ZANAPHIA" }, "Tail_New": { "type": "dword", @@ -1160,7 +1216,87 @@ }, "TemplateResRef": { "type": "resref", - "value": "zanafia" + "value": "bandit_zanaphia" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Zanaphia" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_wiz" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] }, "WalkRate": { "type": "int", @@ -1176,6 +1312,6 @@ }, "Wis": { "type": "byte", - "value": 12 + "value": 10 } } diff --git a/_module/utc/banth.utc.json b/_module/utc/banth.utc.json index 7855435f..eca0d3de 100644 --- a/_module/utc/banth.utc.json +++ b/_module/utc/banth.utc.json @@ -105,71 +105,6 @@ "type": "short", "value": 11 }, - "MemorizedList0": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 37 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 100 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 144 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 151 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, "MemorizedList1": { "type": "list", "value": [ @@ -551,7 +486,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Banth" }, "Con": { "type": "byte", @@ -559,7 +494,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -614,17 +549,6 @@ "value": "nw_it_mbracer008" } }, - { - "__struct_id": 16, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "wbwxl002" - } - }, { "__struct_id": 128, "Dropable": { @@ -1064,55 +988,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1394,7 +1318,7 @@ }, "SoundSetFile": { "type": "word", - "value": 65535 + "value": 394 }, "SpecAbilityList": { "type": "list", @@ -1410,11 +1334,11 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", - "value": "Banth" + "value": "BANTH" }, "Tail_New": { "type": "dword", @@ -1428,6 +1352,41 @@ "type": "resref", "value": "banth" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_wiz" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Banth" + } + } + ] + }, "WalkRate": { "type": "int", "value": 4 diff --git a/_module/utc/jel.utc.json b/_module/utc/base_dwarf.utc.json similarity index 76% rename from _module/utc/jel.utc.json rename to _module/utc/base_dwarf.utc.json index 39cb945f..af5bf811 100644 --- a/_module/utc/jel.utc.json +++ b/_module/utc/base_dwarf.utc.json @@ -2,11 +2,11 @@ "__data_type": "UTC ", "Appearance_Head": { "type": "byte", - "value": 8 + "value": 1 }, "Appearance_Type": { "type": "word", - "value": 5 + "value": 0 }, "ArmorPart_RFoot": { "type": "byte", @@ -86,11 +86,11 @@ }, "Cha": { "type": "byte", - "value": 9 + "value": 10 }, "ChallengeRating": { "type": "float", - "value": 5.0 + "value": 0.5 }, "ClassList": { "type": "list", @@ -99,11 +99,11 @@ "__struct_id": 2, "Class": { "type": "int", - "value": 4 + "value": 20 }, "ClassLevel": { "type": "short", - "value": 6 + "value": 1 } } ] @@ -114,7 +114,7 @@ }, "Color_Skin": { "type": "byte", - "value": 36 + "value": 1 }, "Color_Tattoo1": { "type": "byte", @@ -130,11 +130,11 @@ }, "Con": { "type": "byte", - "value": 16 + "value": 12 }, "Conversation": { "type": "resref", - "value": "cv_chamed" + "value": "" }, "CRAdjust": { "type": "int", @@ -142,7 +142,7 @@ }, "CurrentHitPoints": { "type": "short", - "value": 37 + "value": 4 }, "DecayTime": { "type": "dword", @@ -158,7 +158,7 @@ }, "Dex": { "type": "byte", - "value": 13 + "value": 10 }, "Disarmable": { "type": "byte", @@ -166,45 +166,11 @@ }, "Equip_ItemList": { "type": "list", - "value": [ - { - "__struct_id": 2, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "nw_aarcl011" - } - }, - { - "__struct_id": 16, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "wdbax002" - } - }, - { - "__struct_id": 2048, - "Dropable": { - "type": "byte", - "value": 1 - }, - "EquippedRes": { - "type": "resref", - "value": "nw_wamar001" - } - } - ] + "value": [] }, "FactionID": { "type": "word", - "value": 7 + "value": 2 }, "FeatList": { "type": "list", @@ -213,28 +179,42 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 2 + "value": 233 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 3 + "value": 232 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 4 + "value": 231 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 6 + "value": 3112 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2898 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5195 } }, { @@ -248,70 +228,126 @@ "__struct_id": 1, "Feat": { "type": "word", - "value": 10 + "value": 4710 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 391 + "value": 2468 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 26 + "value": 2919 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 28 + "value": 229 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 32 + "value": 230 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 106 + "value": 4095 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 44 + "value": 4092 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 45 + "value": 2884 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 46 + "value": 1089 } }, { "__struct_id": 1, "Feat": { "type": "word", - "value": 144 + "value": 3415 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2285 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4792 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4757 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4758 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 } } ] @@ -319,7 +355,7 @@ "FirstName": { "type": "cexolocstring", "value": { - "0": "Jel" + "0": "BASE_DWARF" } }, "fortbonus": { @@ -328,15 +364,15 @@ }, "Gender": { "type": "byte", - "value": 1 + "value": 0 }, "GoodEvil": { "type": "byte", - "value": 50 + "value": 100 }, "HitPoints": { "type": "short", - "value": 37 + "value": 4 }, "Int": { "type": "byte", @@ -354,156 +390,6 @@ "type": "byte", "value": 0 }, - "ItemList": { - "type": "list", - "value": [ - { - "__struct_id": 0, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_wbwmsh002" - }, - "Repos_PosX": { - "type": "word", - "value": 0 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 1, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_mpotion001" - }, - "Repos_PosX": { - "type": "word", - "value": 2 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 2, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_mpotion016" - }, - "Repos_PosX": { - "type": "word", - "value": 3 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 3, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "potionofvision" - }, - "Repos_PosX": { - "type": "word", - "value": 4 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 4, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "jet" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 5 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 5, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "mossagate" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 6 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 6, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "it_gem015" - }, - "Pickpocketable": { - "type": "byte", - "value": 1 - }, - "Repos_PosX": { - "type": "word", - "value": 7 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - } - ] - }, "LastName": { "type": "cexolocstring", "value": { @@ -512,7 +398,7 @@ }, "LawfulChaotic": { "type": "byte", - "value": 0 + "value": 100 }, "Lootable": { "type": "byte", @@ -520,7 +406,7 @@ }, "MaxHitPoints": { "type": "short", - "value": 55 + "value": 6 }, "NaturalAC": { "type": "byte", @@ -528,11 +414,11 @@ }, "NoPermDeath": { "type": "byte", - "value": 1 + "value": 0 }, "PaletteID": { "type": "byte", - "value": 43 + "value": 38 }, "PerceptionRange": { "type": "byte", @@ -548,11 +434,11 @@ }, "PortraitId": { "type": "word", - "value": 131 + "value": 10 }, "Race": { "type": "byte", - "value": 5 + "value": 0 }, "refbonus": { "type": "short", @@ -634,20 +520,6 @@ "value": 0 } }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 6 - } - }, - { - "__struct_id": 0, - "Rank": { - "type": "byte", - "value": 1 - } - }, { "__struct_id": 0, "Rank": { @@ -687,7 +559,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 1 + "value": 0 } }, { @@ -799,7 +671,21 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 1 + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 } }, { @@ -890,7 +776,7 @@ }, "SoundSetFile": { "type": "word", - "value": 245 + "value": 115 }, "SpecAbilityList": { "type": "list", @@ -898,11 +784,11 @@ }, "StartingPackage": { "type": "byte", - "value": 4 + "value": 82 }, "Str": { "type": "byte", - "value": 17 + "value": 10 }, "Subrace": { "type": "cexostring", @@ -910,7 +796,7 @@ }, "Tag": { "type": "cexostring", - "value": "Jel" + "value": "BASE_DWARF" }, "Tail_New": { "type": "dword", @@ -922,7 +808,7 @@ }, "TemplateResRef": { "type": "resref", - "value": "jel" + "value": "base_dwarf" }, "WalkRate": { "type": "int", diff --git a/_module/utc/caanara.utc.json b/_module/utc/caanara.utc.json index d4aa830c..3544999a 100644 --- a/_module/utc/caanara.utc.json +++ b/_module/utc/caanara.utc.json @@ -42,7 +42,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -215,55 +215,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -625,6 +625,41 @@ "type": "resref", "value": "caanara" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Caanara" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + } + ] + }, "WalkRate": { "type": "int", "value": 5 diff --git a/_module/utc/clericoforcus001.utc.json b/_module/utc/clericoforcus001.utc.json index 8598257d..dd4a6688 100644 --- a/_module/utc/clericoforcus001.utc.json +++ b/_module/utc/clericoforcus001.utc.json @@ -386,7 +386,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Cleric of Orcus" }, "Con": { "type": "byte", @@ -725,55 +725,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -803,7 +803,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 4 } }, { @@ -1071,7 +1071,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", @@ -1089,6 +1089,41 @@ "type": "resref", "value": "clericoforcus001" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Cleric of Orcus" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/clericoforcus003.utc.json b/_module/utc/clericoforcus003.utc.json index c0215106..8b88078a 100644 --- a/_module/utc/clericoforcus003.utc.json +++ b/_module/utc/clericoforcus003.utc.json @@ -546,7 +546,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Gernaldra" }, "Con": { "type": "byte", @@ -566,7 +566,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -895,55 +895,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -973,7 +973,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 4 } }, { @@ -1241,7 +1241,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", @@ -1259,6 +1259,41 @@ "type": "resref", "value": "clericoforcus003" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Gernaldra" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/dmvrock001.utc.json b/_module/utc/dmvrock001.utc.json index 9b5e16fe..6faef8e0 100644 --- a/_module/utc/dmvrock001.utc.json +++ b/_module/utc/dmvrock001.utc.json @@ -42,7 +42,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 0 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -236,55 +236,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -931,6 +931,41 @@ "type": "resref", "value": "dmvrock001" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Nagarshapan" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/dmvrock002.utc.json b/_module/utc/dmvrock002.utc.json index 9063dab9..3b3fb850 100644 --- a/_module/utc/dmvrock002.utc.json +++ b/_module/utc/dmvrock002.utc.json @@ -42,7 +42,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 0 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -236,55 +236,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -931,6 +931,41 @@ "type": "resref", "value": "dmvrock002" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Nargallamar" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/goblina002.utc.json b/_module/utc/goblina002.utc.json index 1d609683..d87607e0 100644 --- a/_module/utc/goblina002.utc.json +++ b/_module/utc/goblina002.utc.json @@ -1,13 +1,89 @@ { "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 163 + }, "Appearance_Type": { "type": "word", - "value": 86 + "value": 886 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 }, "BodyBag": { "type": "byte", "value": 0 }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, "Cha": { "type": "byte", "value": 8 @@ -43,6 +119,22 @@ } ] }, + "Color_Hair": { + "type": "byte", + "value": 167 + }, + "Color_Skin": { + "type": "byte", + "value": 107 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 103 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 102 + }, "Comment": { "type": "cexostring", "value": "" @@ -65,7 +157,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -400,55 +492,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/grimlock.utc.json b/_module/utc/grimlock.utc.json index 38bdf39f..0065cac6 100644 --- a/_module/utc/grimlock.utc.json +++ b/_module/utc/grimlock.utc.json @@ -1,89 +1,13 @@ { "__data_type": "UTC ", - "Appearance_Head": { - "type": "byte", - "value": 110 - }, "Appearance_Type": { "type": "word", - "value": 6 - }, - "ArmorPart_RFoot": { - "type": "byte", - "value": 1 + "value": 2002 }, "BodyBag": { "type": "byte", "value": 0 }, - "BodyPart_Belt": { - "type": "byte", - "value": 0 - }, - "BodyPart_LBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_LFoot": { - "type": "byte", - "value": 1 - }, - "BodyPart_LHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_LShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_LThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Neck": { - "type": "byte", - "value": 1 - }, - "BodyPart_Pelvis": { - "type": "byte", - "value": 1 - }, - "BodyPart_RBicep": { - "type": "byte", - "value": 1 - }, - "BodyPart_RFArm": { - "type": "byte", - "value": 1 - }, - "BodyPart_RHand": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShin": { - "type": "byte", - "value": 1 - }, - "BodyPart_RShoul": { - "type": "byte", - "value": 0 - }, - "BodyPart_RThigh": { - "type": "byte", - "value": 1 - }, - "BodyPart_Torso": { - "type": "byte", - "value": 1 - }, "Cha": { "type": "byte", "value": 6 @@ -119,22 +43,6 @@ } ] }, - "Color_Hair": { - "type": "byte", - "value": 29 - }, - "Color_Skin": { - "type": "byte", - "value": 21 - }, - "Color_Tattoo1": { - "type": "byte", - "value": 1 - }, - "Color_Tattoo2": { - "type": "byte", - "value": 1 - }, "Comment": { "type": "cexostring", "value": "" @@ -157,7 +65,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -451,7 +359,7 @@ }, "PortraitId": { "type": "word", - "value": 129 + "value": 1548 }, "Race": { "type": "byte", @@ -463,55 +371,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -827,9 +735,44 @@ "type": "resref", "value": "grimlock" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Grimlock" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } + } + ] + }, "WalkRate": { "type": "int", - "value": 4 + "value": 7 }, "willbonus": { "type": "short", diff --git a/_module/utc/gudmund.utc.json b/_module/utc/gudmund.utc.json index ec35c6b6..f587b0e1 100644 --- a/_module/utc/gudmund.utc.json +++ b/_module/utc/gudmund.utc.json @@ -686,7 +686,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Gudmund" }, "Con": { "type": "byte", @@ -706,7 +706,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -1430,7 +1430,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", @@ -1448,6 +1448,41 @@ "type": "resref", "value": "gudmund" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Gudmund" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } + } + ] + }, "WalkRate": { "type": "int", "value": 4 diff --git a/_module/utc/gudmund001.utc.json b/_module/utc/gudmund001.utc.json index 1132e68a..f57adb8e 100644 --- a/_module/utc/gudmund001.utc.json +++ b/_module/utc/gudmund001.utc.json @@ -766,7 +766,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Celleen" }, "Con": { "type": "byte", @@ -1075,55 +1075,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1421,7 +1421,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Human" }, "Tag": { "type": "cexostring", @@ -1429,7 +1429,7 @@ }, "Tail_New": { "type": "dword", - "value": 2 + "value": 0 }, "TemplateList": { "type": "list", @@ -1439,6 +1439,41 @@ "type": "resref", "value": "gudmund001" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Celeen" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } + } + ] + }, "WalkRate": { "type": "int", "value": 4 diff --git a/_module/utc/kobold002.utc.json b/_module/utc/kobold002.utc.json index 333a7674..ae8b3e1d 100644 --- a/_module/utc/kobold002.utc.json +++ b/_module/utc/kobold002.utc.json @@ -234,55 +234,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/maphistal.utc.json b/_module/utc/maphistal.utc.json index 1cf49c72..4fd5ad65 100644 --- a/_module/utc/maphistal.utc.json +++ b/_module/utc/maphistal.utc.json @@ -42,7 +42,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -219,55 +219,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -704,6 +704,41 @@ "type": "resref", "value": "maphistal" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Maphistal" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_tYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + } + ] + }, "WalkRate": { "type": "int", "value": 4 diff --git a/_module/utc/npc_bugjuice.utc.json b/_module/utc/npc_bugjuice.utc.json index ccc5690c..1e035bca 100644 --- a/_module/utc/npc_bugjuice.utc.json +++ b/_module/utc/npc_bugjuice.utc.json @@ -1056,7 +1056,7 @@ }, "SoundSetFile": { "type": "word", - "value": 357 + "value": 10014 }, "SpecAbilityList": { "type": "list", @@ -1107,6 +1107,81 @@ "type": "cexostring", "value": "Bugjuice" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "STORE_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "STORE_OUTCAST" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPSKIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHEAD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPTATS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } } ] }, diff --git a/_module/utc/npc_derevash.utc.json b/_module/utc/npc_derevash.utc.json index 2749afc6..d1b6f10c 100644 --- a/_module/utc/npc_derevash.utc.json +++ b/_module/utc/npc_derevash.utc.json @@ -1727,7 +1727,7 @@ }, "SoundSetFile": { "type": "word", - "value": 418 + "value": 10000 }, "SpecAbilityList": { "type": "list", diff --git a/_module/utc/drusilla.utc.json b/_module/utc/npc_drusilla.utc.json similarity index 95% rename from _module/utc/drusilla.utc.json rename to _module/utc/npc_drusilla.utc.json index 3b10b9bf..36ef9332 100644 --- a/_module/utc/drusilla.utc.json +++ b/_module/utc/npc_drusilla.utc.json @@ -452,7 +452,12 @@ "type": "byte", "value": 0 } - }, + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ { "__struct_id": 3, "Spell": { @@ -461,18 +466,13 @@ }, "SpellFlags": { "type": "byte", - "value": 1 + "value": 0 }, "SpellMetaMagic": { "type": "byte", "value": 16 } - } - ] - }, - "MemorizedList4": { - "type": "list", - "value": [ + }, { "__struct_id": 3, "Spell": { @@ -661,7 +661,7 @@ }, "Comment": { "type": "cexostring", - "value": "Drusilla the Druid" + "value": "Drusilla the Druid\r\n\r\nRappan Athuk Reloaded, pg, 265" }, "Con": { "type": "byte", @@ -681,11 +681,11 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", - "value": "" + "value": "Nature" }, "Description": { "type": "cexolocstring", @@ -747,7 +747,7 @@ }, "FactionID": { "type": "word", - "value": 9 + "value": 20 }, "FeatList": { "type": "list", @@ -1023,7 +1023,7 @@ }, "PerceptionRange": { "type": "byte", - "value": 11 + "value": 10 }, "Phenotype": { "type": "int", @@ -1047,55 +1047,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "drusilla_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "drusilla_onperce" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1125,7 +1125,7 @@ "__struct_id": 0, "Rank": { "type": "byte", - "value": 0 + "value": 6 } }, { @@ -1397,7 +1397,7 @@ }, "Tag": { "type": "cexostring", - "value": "NPC_DRUSILLA" + "value": "SpawnFaction" }, "Tail_New": { "type": "dword", @@ -1409,7 +1409,7 @@ }, "TemplateResRef": { "type": "resref", - "value": "drusilla" + "value": "npc_drusilla" }, "VarTable": { "type": "list", @@ -1458,6 +1458,36 @@ "type": "int", "value": 1 } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RA_KEEPHAIR" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_melcast3" + } } ] }, diff --git a/_module/utc/npc_goldeye001.utc.json b/_module/utc/npc_goldeye001.utc.json index 0e47a351..55a5ea8f 100644 --- a/_module/utc/npc_goldeye001.utc.json +++ b/_module/utc/npc_goldeye001.utc.json @@ -527,7 +527,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -545,7 +545,7 @@ }, "Disarmable": { "type": "byte", - "value": 0 + "value": 1 }, "Equip_ItemList": { "type": "list", @@ -557,6 +557,13 @@ "value": "nw_maarcl046" } }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "wblmml003" + } + }, { "__struct_id": 32, "EquippedRes": { @@ -1038,21 +1045,6 @@ "type": "word", "value": 0 } - }, - { - "__struct_id": 7, - "InventoryRes": { - "type": "resref", - "value": "wblmml003" - }, - "Repos_PosX": { - "type": "word", - "value": 1 - }, - "Repos_Posy": { - "type": "word", - "value": 2 - } } ] }, @@ -1112,55 +1104,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bal_grd_onspw" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1442,7 +1434,7 @@ }, "SoundSetFile": { "type": "word", - "value": 0 + "value": 10022 }, "SpecAbilityList": { "type": "list", @@ -1508,6 +1500,21 @@ "type": "cexostring", "value": "RANDOM" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } } ] }, diff --git a/_module/utc/npc_hu_f_outcast.utc.json b/_module/utc/npc_hu_f_outcast.utc.json index 80f33502..073e0bac 100644 --- a/_module/utc/npc_hu_f_outcast.utc.json +++ b/_module/utc/npc_hu_f_outcast.utc.json @@ -699,14 +699,14 @@ }, "Value": { "type": "cexostring", - "value": "Random" + "value": "RANDOM" } }, { "__struct_id": 0, "Name": { "type": "cexostring", - "value": "POST_FIX" + "value": "POSTFIX" }, "Type": { "type": "dword", diff --git a/_module/utc/npc_hu_f_outcgrd.utc.json b/_module/utc/npc_hu_f_outcgrd.utc.json index 44bd0cd5..8a54b26c 100644 --- a/_module/utc/npc_hu_f_outcgrd.utc.json +++ b/_module/utc/npc_hu_f_outcgrd.utc.json @@ -970,7 +970,7 @@ "__struct_id": 0, "Name": { "type": "cexostring", - "value": "POST_FIX" + "value": "POSTFIX" }, "Type": { "type": "dword", @@ -980,6 +980,21 @@ "type": "cexostring", "value": " the Outcast" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/npc_hu_m_outcgrd.utc.json b/_module/utc/npc_hu_m_outcgrd.utc.json index 2716f631..7f4e3a0b 100644 --- a/_module/utc/npc_hu_m_outcgrd.utc.json +++ b/_module/utc/npc_hu_m_outcgrd.utc.json @@ -584,55 +584,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bandit_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -914,7 +914,7 @@ }, "SoundSetFile": { "type": "word", - "value": 135 + "value": 193 }, "SpecAbilityList": { "type": "list", @@ -970,7 +970,7 @@ "__struct_id": 0, "Name": { "type": "cexostring", - "value": "POST_FIX" + "value": "POSTFIX" }, "Type": { "type": "dword", @@ -980,6 +980,21 @@ "type": "cexostring", "value": " the Outcast" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/npc_wau_pal001.utc.json b/_module/utc/npc_wau_pal001.utc.json index f79b39e2..b822bd9e 100644 --- a/_module/utc/npc_wau_pal001.utc.json +++ b/_module/utc/npc_wau_pal001.utc.json @@ -293,6 +293,13 @@ "value": "maarcl071" } }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswmls010" + } + }, { "__struct_id": 32, "EquippedRes": { @@ -940,9 +947,13 @@ }, { "__struct_id": 5, + "Dropable": { + "type": "byte", + "value": 1 + }, "InventoryRes": { "type": "resref", - "value": "nw_wswmls010" + "value": "nw_it_medkit002" }, "Repos_PosX": { "type": "word", @@ -955,25 +966,6 @@ }, { "__struct_id": 6, - "Dropable": { - "type": "byte", - "value": 1 - }, - "InventoryRes": { - "type": "resref", - "value": "nw_it_medkit002" - }, - "Repos_PosX": { - "type": "word", - "value": 8 - }, - "Repos_Posy": { - "type": "word", - "value": 0 - } - }, - { - "__struct_id": 7, "InventoryRes": { "type": "resref", "value": "nw_it_medkit002" @@ -984,12 +976,27 @@ }, "Repos_PosX": { "type": "word", - "value": 8 + "value": 7 }, "Repos_Posy": { "type": "word", "value": 1 } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "potionofvision" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } } ] }, @@ -1049,55 +1056,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bal_grd_onspw" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1445,6 +1452,21 @@ "type": "cexostring", "value": "RANDOM" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/ogre_droog.utc.json b/_module/utc/ogre_droog.utc.json index b1512cf7..b0b231c3 100644 --- a/_module/utc/ogre_droog.utc.json +++ b/_module/utc/ogre_droog.utc.json @@ -364,55 +364,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/ra_brigand001.utc.json b/_module/utc/ra_brigand001.utc.json index 3ee8f2a9..f41f1b50 100644 --- a/_module/utc/ra_brigand001.utc.json +++ b/_module/utc/ra_brigand001.utc.json @@ -584,55 +584,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bandit_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -965,6 +965,21 @@ "type": "cexostring", "value": "Brigand" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/ra_brigand002.utc.json b/_module/utc/ra_brigand002.utc.json index e5fe3764..2f45e39d 100644 --- a/_module/utc/ra_brigand002.utc.json +++ b/_module/utc/ra_brigand002.utc.json @@ -606,55 +606,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bandit_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -987,6 +987,21 @@ "type": "cexostring", "value": "Brigand Leader" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/ra_bugbear01.utc.json b/_module/utc/ra_bugbear01.utc.json index d233c50d..6d173939 100644 --- a/_module/utc/ra_bugbear01.utc.json +++ b/_module/utc/ra_bugbear01.utc.json @@ -259,55 +259,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/ra_f_brigand001.utc.json b/_module/utc/ra_f_brigand001.utc.json index d749a20e..0958b811 100644 --- a/_module/utc/ra_f_brigand001.utc.json +++ b/_module/utc/ra_f_brigand001.utc.json @@ -584,55 +584,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bandit_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -965,6 +965,21 @@ "type": "cexostring", "value": "Brigand" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_f_outlaw001.utc.json b/_module/utc/ra_f_outlaw001.utc.json index 15566393..d6de1cfa 100644 --- a/_module/utc/ra_f_outlaw001.utc.json +++ b/_module/utc/ra_f_outlaw001.utc.json @@ -400,55 +400,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -781,6 +781,21 @@ "type": "cexostring", "value": "Outlaw" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_goblinlead01.utc.json b/_module/utc/ra_goblinlead01.utc.json index a95db700..d1888f3a 100644 --- a/_module/utc/ra_goblinlead01.utc.json +++ b/_module/utc/ra_goblinlead01.utc.json @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -552,55 +552,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -933,6 +933,21 @@ "type": "cexostring", "value": "Goblin Leader" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_goblinscout01.utc.json b/_module/utc/ra_goblinscout01.utc.json index 2d4ea2e3..9a8ce30d 100644 --- a/_module/utc/ra_goblinscout01.utc.json +++ b/_module/utc/ra_goblinscout01.utc.json @@ -530,55 +530,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -911,6 +911,21 @@ "type": "cexostring", "value": "Goblin Scout" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_m_brigwiz001.utc.json b/_module/utc/ra_m_brigwiz001.utc.json index 010e3aa7..84f8c83a 100644 --- a/_module/utc/ra_m_brigwiz001.utc.json +++ b/_module/utc/ra_m_brigwiz001.utc.json @@ -262,7 +262,12 @@ "type": "byte", "value": 0 } - }, + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ { "__struct_id": 3, "Spell": { @@ -271,18 +276,28 @@ }, "SpellFlags": { "type": "byte", - "value": 1 + "value": 0 }, "SpellMetaMagic": { "type": "byte", "value": 16 } - } - ] - }, - "MemorizedList2": { - "type": "list", - "value": [ + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 456 + }, + "SpellFlags": { + "type": "byte", + "value": 0 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 2 + } + }, { "__struct_id": 3, "Spell": { @@ -298,6 +313,21 @@ "value": 0 } }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 0 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 2 + } + }, { "__struct_id": 3, "Spell": { @@ -318,36 +348,6 @@ "MemorizedList3": { "type": "list", "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 456 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 2 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 102 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 2 - } - }, { "__struct_id": 3, "Spell": { @@ -486,7 +486,7 @@ }, "Comment": { "type": "cexostring", - "value": "Brigand :Human Male Wizard 01" + "value": "Brigand: Human Male Wizard 01" }, "Con": { "type": "byte", @@ -711,7 +711,7 @@ "FirstName": { "type": "cexolocstring", "value": { - "0": "Brigand :Human Male Wizard 01" + "0": "Brigand: Human Male Wizard 01" } }, "fortbonus": { @@ -971,55 +971,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "ra_bandit_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1357,30 +1357,15 @@ "__struct_id": 0, "Name": { "type": "cexostring", - "value": "AUTOBUFF" + "value": "SPAWN_TYPE" }, "Type": { "type": "dword", - "value": 1 + "value": 3 }, "Value": { - "type": "int", - "value": 1 - } - }, - { - "__struct_id": 0, - "Name": { "type": "cexostring", - "value": "X2_L_BEH_MAGIC" - }, - "Type": { - "type": "dword", - "value": 1 - }, - "Value": { - "type": "int", - "value": 100 + "value": "no_spn_wiz" } } ] diff --git a/_module/utc/ra_m_outlaw001.utc.json b/_module/utc/ra_m_outlaw001.utc.json index 7a6e12a5..31de507f 100644 --- a/_module/utc/ra_m_outlaw001.utc.json +++ b/_module/utc/ra_m_outlaw001.utc.json @@ -400,55 +400,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -781,6 +781,21 @@ "type": "cexostring", "value": "Outlaw" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_ogre01.utc.json b/_module/utc/ra_ogre01.utc.json index 392e1047..77d21ce9 100644 --- a/_module/utc/ra_ogre01.utc.json +++ b/_module/utc/ra_ogre01.utc.json @@ -252,55 +252,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -633,6 +633,21 @@ "type": "cexostring", "value": "Ogre" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } } ] }, diff --git a/_module/utc/ra_pir8_hu_m01.utc.json b/_module/utc/ra_pir8_hu_m01.utc.json index 03cd2066..a5982388 100644 --- a/_module/utc/ra_pir8_hu_m01.utc.json +++ b/_module/utc/ra_pir8_hu_m01.utc.json @@ -562,43 +562,43 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", @@ -606,11 +606,11 @@ }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -943,6 +943,21 @@ "type": "cexostring", "value": "Pirate Ruffian" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_pir8_hu_m02.utc.json b/_module/utc/ra_pir8_hu_m02.utc.json index f324ea68..84344f0f 100644 --- a/_module/utc/ra_pir8_hu_m02.utc.json +++ b/_module/utc/ra_pir8_hu_m02.utc.json @@ -157,7 +157,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -587,43 +587,43 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", @@ -631,11 +631,11 @@ }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -968,6 +968,21 @@ "type": "cexostring", "value": "Pirate Mate" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rftr" + } } ] }, diff --git a/_module/utc/ra_pir8_hu_m03.utc.json b/_module/utc/ra_pir8_hu_m03.utc.json index d005660c..ac6aa74e 100644 --- a/_module/utc/ra_pir8_hu_m03.utc.json +++ b/_module/utc/ra_pir8_hu_m03.utc.json @@ -695,43 +695,43 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", @@ -739,11 +739,11 @@ }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1091,6 +1091,21 @@ "type": "cexostring", "value": "RANDOM" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_pir8_hu_m04.utc.json b/_module/utc/ra_pir8_hu_m04.utc.json index d08ea7e5..0a48bb67 100644 --- a/_module/utc/ra_pir8_hu_m04.utc.json +++ b/_module/utc/ra_pir8_hu_m04.utc.json @@ -831,43 +831,43 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", @@ -875,11 +875,11 @@ }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1212,6 +1212,21 @@ "type": "cexostring", "value": "Pirate Priest" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } } ] }, diff --git a/_module/utc/ra_wererat003.utc.json b/_module/utc/ra_wererat003.utc.json index 705d256f..c30b09f1 100644 --- a/_module/utc/ra_wererat003.utc.json +++ b/_module/utc/ra_wererat003.utc.json @@ -655,55 +655,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/ra_wererat004.utc.json b/_module/utc/ra_wererat004.utc.json index 1411d47b..f8f35522 100644 --- a/_module/utc/ra_wererat004.utc.json +++ b/_module/utc/ra_wererat004.utc.json @@ -65,7 +65,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -487,55 +487,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "x2_def_ondeath" + "value": "ra_ai_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "x2_def_percept" + "value": "ra_ai_onpercept" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -868,6 +868,21 @@ "type": "cexostring", "value": "Wererat" } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_rog" + } } ] }, diff --git a/_module/utc/ra_wolf001.utc.json b/_module/utc/ra_wolf001.utc.json index 71c0099c..eb5684b1 100644 --- a/_module/utc/ra_wolf001.utc.json +++ b/_module/utc/ra_wolf001.utc.json @@ -229,55 +229,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "nw_c2_default5" + "value": "x2_def_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "nw_c2_default6" + "value": "x2_def_ondamage" }, "ScriptDeath": { "type": "resref", - "value": "nw_c2_default7" + "value": "x2_def_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "nw_c2_default4" + "value": "x2_def_onconv" }, "ScriptDisturbed": { "type": "resref", - "value": "nw_c2_default8" + "value": "x2_def_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "nw_c2_default3" + "value": "x2_def_endcombat" }, "ScriptHeartbeat": { "type": "resref", - "value": "nw_c2_default1" + "value": "x2_def_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "nw_c2_defaulte" + "value": "x2_def_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "nw_c2_default2" + "value": "x2_def_percept" }, "ScriptRested": { "type": "resref", - "value": "nw_c2_defaulta" + "value": "x2_def_rested" }, "ScriptSpawn": { "type": "resref", - "value": "nw_c2_default9" + "value": "x2_def_spawn" }, "ScriptSpellAt": { "type": "resref", - "value": "nw_c2_defaultb" + "value": "x2_def_spellcast" }, "ScriptUserDefine": { "type": "resref", - "value": "nw_c2_defaultd" + "value": "x2_def_userdef" }, "SkillList": { "type": "list", diff --git a/_module/utc/sheriff_ostland.utc.json b/_module/utc/sheriff_ostland.utc.json index 2322376b..cc358910 100644 --- a/_module/utc/sheriff_ostland.utc.json +++ b/_module/utc/sheriff_ostland.utc.json @@ -588,55 +588,55 @@ }, "ScriptAttacked": { "type": "resref", - "value": "x2_def_attacked" + "value": "ra_ai_attacked" }, "ScriptDamaged": { "type": "resref", - "value": "x2_def_ondamage" + "value": "ra_ai_ondamaged" }, "ScriptDeath": { "type": "resref", - "value": "ondeath_ostland" + "value": "ostland_ondeath" }, "ScriptDialogue": { "type": "resref", - "value": "x2_def_onconv" + "value": "ra_ai_onconverse" }, "ScriptDisturbed": { "type": "resref", - "value": "x2_def_ondisturb" + "value": "ra_ai_ondisturb" }, "ScriptEndRound": { "type": "resref", - "value": "x2_def_endcombat" + "value": "ra_ai_endcmbtrnd" }, "ScriptHeartbeat": { "type": "resref", - "value": "x2_def_heartbeat" + "value": "ra_ai_heartbeat" }, "ScriptOnBlocked": { "type": "resref", - "value": "x2_def_onblocked" + "value": "ra_ai_onblocked" }, "ScriptOnNotice": { "type": "resref", - "value": "talk2pc_onpercp" + "value": "ostland_onpercep" }, "ScriptRested": { "type": "resref", - "value": "x2_def_rested" + "value": "ra_ai_onrested" }, "ScriptSpawn": { "type": "resref", - "value": "x2_def_spawn" + "value": "ra_ai_onspawn" }, "ScriptSpellAt": { "type": "resref", - "value": "x2_def_spellcast" + "value": "ra_ai_onspelled" }, "ScriptUserDefine": { "type": "resref", - "value": "x2_def_userdef" + "value": "ra_ai_userdef" }, "SkillList": { "type": "list", @@ -1014,6 +1014,21 @@ "type": "int", "value": 1 } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_ftr" + } } ] }, diff --git a/_module/utc/telok.utc.json b/_module/utc/telok.utc.json index c5d9694c..d6d2ae96 100644 --- a/_module/utc/telok.utc.json +++ b/_module/utc/telok.utc.json @@ -105,101 +105,6 @@ "type": "short", "value": 18 }, - "MemorizedList0": { - "type": "list", - "value": [ - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - }, - { - "__struct_id": 3, - "Spell": { - "type": "word", - "value": 431 - }, - "SpellFlags": { - "type": "byte", - "value": 1 - }, - "SpellMetaMagic": { - "type": "byte", - "value": 0 - } - } - ] - }, "MemorizedList1": { "type": "list", "value": [ @@ -1001,7 +906,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "Telok" }, "Con": { "type": "byte", @@ -1021,7 +926,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -1037,7 +942,7 @@ }, "Disarmable": { "type": "byte", - "value": 0 + "value": 1 }, "Equip_ItemList": { "type": "list", @@ -1717,7 +1622,7 @@ }, "Subrace": { "type": "cexostring", - "value": "" + "value": "Elf" }, "Tag": { "type": "cexostring", @@ -1735,6 +1640,41 @@ "type": "resref", "value": "telok" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_clr" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Telok" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/utc/zep_balrog.utc.json b/_module/utc/zep_balrog.utc.json new file mode 100644 index 00000000..9ef1edf2 --- /dev/null +++ b/_module/utc/zep_balrog.utc.json @@ -0,0 +1,1405 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 1291 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 17.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 24 + }, + "ClassLevel": { + "type": "short", + "value": 13 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Balrog" + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 58 + }, + "DecayTime": { + "type": "dword", + "value": 10000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "id": 16816605, + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp005" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp005" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "zep_cre_pitfb" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "zep_cre_pitfh" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "id": 16808770, + "type": "cexolocstring", + "value": { + "0": "Balrog" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 58 + }, + "Int": { + "type": "byte", + "value": 20 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 123 + }, + "NaturalAC": { + "type": "byte", + "value": 20 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 2150 + }, + "Race": { + "type": "byte", + "value": 20 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 19 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 21 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 17 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 21 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 21 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 21 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 255 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 30 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 88 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 15 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 25 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "ZEP_BALROG" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "zep_balrog" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Balrog" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 20 + } +} diff --git a/_module/utc/zep_sucubusa001.utc.json b/_module/utc/zep_sucubusa001.utc.json index f35e7aea..7cfdcf2f 100644 --- a/_module/utc/zep_sucubusa001.utc.json +++ b/_module/utc/zep_sucubusa001.utc.json @@ -42,7 +42,7 @@ }, "Conversation": { "type": "resref", - "value": "" + "value": "cv_charmed" }, "CRAdjust": { "type": "int", @@ -54,7 +54,7 @@ }, "DecayTime": { "type": "dword", - "value": 5000 + "value": 10000 }, "Deity": { "type": "cexostring", @@ -820,6 +820,41 @@ "type": "resref", "value": "zep_sucubusa001" }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SPAWN_TYPE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "no_spn_fiend" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Corinaria" + } + } + ] + }, "WalkRate": { "type": "int", "value": 7 diff --git a/_module/uti/RA_ITMRNG_WIZ0.uti.json b/_module/uti/RA_ITMRNG_WIZ0.uti.json new file mode 100644 index 00000000..69ea0ae9 --- /dev/null +++ b/_module/uti/RA_ITMRNG_WIZ0.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Ring of Cantrips" + }, + "Cost": { + "type": "dword", + "value": 1260 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring doubles the number of cantrips that an arcane spellcaster can cast each day." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Rings are commonly worn on the fingers as ornamentation, but some are potent magic items." + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Cantrips" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 28 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 85 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 102 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RA_ITMRNG_WIZ0" + }, + "TemplateResRef": { + "type": "resref", + "value": "ra_itmrng_wiz0" + } +} diff --git a/_module/uti/RA_SPBOOK_ZANA.uti.json b/_module/uti/RA_SPBOOK_ZANA.uti.json new file mode 100644 index 00000000..54bfeff6 --- /dev/null +++ b/_module/uti/RA_SPBOOK_ZANA.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 249 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "Zanaphia's Spellbook" + }, + "Cost": { + "type": "dword", + "value": 250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "A spellbook you took from the bandit Zanaphia," + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A spellbook you took from the bandit Zanaphia," + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Zanaphia's Spellbook" + } + }, + "ModelPart1": { + "type": "byte", + "value": 153 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 28 + }, + "CostValue": { + "type": "word", + "value": 31 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 85 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RA_SPBOOK_ZANA" + }, + "TemplateResRef": { + "type": "resref", + "value": "ra_spbook_zana" + } +} diff --git a/_module/uti/RA_WAMMBO_SHDESS.uti.json b/_module/uti/RA_WAMMBO_SHDESS.uti.json new file mode 100644 index 00000000..a4556f02 --- /dev/null +++ b/_module/uti/RA_WAMMBO_SHDESS.uti.json @@ -0,0 +1,152 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Shadow Essence Bolts" + }, + "Cost": { + "type": "dword", + "value": 780 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bolts are covered with shadow essesnce poison." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "These bolts are covered with shadow essesnce poison." + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Essence Bolts" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 28 + }, + "CostValue": { + "type": "word", + "value": 37 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 85 + }, + "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": 10 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 76 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 10 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RA_WAMMBO_SHDESS" + }, + "TemplateResRef": { + "type": "resref", + "value": "ra_wammbo_shdess" + } +} diff --git a/_module/uti/it_gold002.uti.json b/_module/uti/it_gold002.uti.json index efb0d360..e08e1af8 100644 --- a/_module/uti/it_gold002.uti.json +++ b/_module/uti/it_gold002.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "220 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold003.uti.json b/_module/uti/it_gold003.uti.json index fcf51b68..a39120eb 100644 --- a/_module/uti/it_gold003.uti.json +++ b/_module/uti/it_gold003.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "25 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold004.uti.json b/_module/uti/it_gold004.uti.json index 1b6c0e78..45f62bb7 100644 --- a/_module/uti/it_gold004.uti.json +++ b/_module/uti/it_gold004.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "1000 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold005.uti.json b/_module/uti/it_gold005.uti.json index 137a8740..b7e18a8c 100644 --- a/_module/uti/it_gold005.uti.json +++ b/_module/uti/it_gold005.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "500 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold006.uti.json b/_module/uti/it_gold006.uti.json index 41553a8c..79adba8b 100644 --- a/_module/uti/it_gold006.uti.json +++ b/_module/uti/it_gold006.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "100 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold007.uti.json b/_module/uti/it_gold007.uti.json index 7e29b813..6ba7eec8 100644 --- a/_module/uti/it_gold007.uti.json +++ b/_module/uti/it_gold007.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "3000 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold008.uti.json b/_module/uti/it_gold008.uti.json index 4474101b..09d729c6 100644 --- a/_module/uti/it_gold008.uti.json +++ b/_module/uti/it_gold008.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "500 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold009.uti.json b/_module/uti/it_gold009.uti.json index a4ff3ff4..48d99537 100644 --- a/_module/uti/it_gold009.uti.json +++ b/_module/uti/it_gold009.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "2000 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold010.uti.json b/_module/uti/it_gold010.uti.json index dacb3aa1..1d94a74a 100644 --- a/_module/uti/it_gold010.uti.json +++ b/_module/uti/it_gold010.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "400 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold011.uti.json b/_module/uti/it_gold011.uti.json index 9636aae2..6993dc04 100644 --- a/_module/uti/it_gold011.uti.json +++ b/_module/uti/it_gold011.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "5000 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold012.uti.json b/_module/uti/it_gold012.uti.json index 0694283f..005db2bd 100644 --- a/_module/uti/it_gold012.uti.json +++ b/_module/uti/it_gold012.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "500 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold013.uti.json b/_module/uti/it_gold013.uti.json index ffcb091b..cfa5d840 100644 --- a/_module/uti/it_gold013.uti.json +++ b/_module/uti/it_gold013.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "50000 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold014.uti.json b/_module/uti/it_gold014.uti.json index f0f4f821..a838b46a 100644 --- a/_module/uti/it_gold014.uti.json +++ b/_module/uti/it_gold014.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "300 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold015.uti.json b/_module/uti/it_gold015.uti.json index 17237606..c58d0116 100644 --- a/_module/uti/it_gold015.uti.json +++ b/_module/uti/it_gold015.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "160 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold016.uti.json b/_module/uti/it_gold016.uti.json index de7901d2..5b65f477 100644 --- a/_module/uti/it_gold016.uti.json +++ b/_module/uti/it_gold016.uti.json @@ -14,7 +14,7 @@ }, "Comment": { "type": "cexostring", - "value": "" + "value": "303 Gold Pieces" }, "Cost": { "type": "dword", @@ -26,11 +26,15 @@ }, "DescIdentified": { "type": "cexolocstring", - "value": {} + "value": { + "0": "The gold piece, or gp, is the basic unit of trade for adventurers." + } }, "Description": { "type": "cexolocstring", - "value": {} + "value": { + "0": "The gold piece, or gp, is the basic unit of trade for adventurers." + } }, "Identified": { "type": "byte", @@ -39,7 +43,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "303 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold017.uti.json b/_module/uti/it_gold017.uti.json index 09a6c7c5..077bb12b 100644 --- a/_module/uti/it_gold017.uti.json +++ b/_module/uti/it_gold017.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "6828 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold018.uti.json b/_module/uti/it_gold018.uti.json index cae4819e..f844bf2f 100644 --- a/_module/uti/it_gold018.uti.json +++ b/_module/uti/it_gold018.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "12 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold019.uti.json b/_module/uti/it_gold019.uti.json index b09eada4..0e3a6e5b 100644 --- a/_module/uti/it_gold019.uti.json +++ b/_module/uti/it_gold019.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "313 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/it_gold020.uti.json b/_module/uti/it_gold020.uti.json index 8268a8b9..0f3e8ad1 100644 --- a/_module/uti/it_gold020.uti.json +++ b/_module/uti/it_gold020.uti.json @@ -39,7 +39,9 @@ "LocalizedName": { "id": 535, "type": "cexolocstring", - "value": {} + "value": { + "0": "135 Gold Pieces" + } }, "ModelPart1": { "type": "byte", diff --git a/_module/uti/item057.uti.json b/_module/uti/item057.uti.json index b91fe659..f245bc98 100644 --- a/_module/uti/item057.uti.json +++ b/_module/uti/item057.uti.json @@ -2,7 +2,7 @@ "__data_type": "UTI ", "AddCost": { "type": "dword", - "value": 20000 + "value": 0 }, "BaseItem": { "type": "int", @@ -18,7 +18,7 @@ }, "Cost": { "type": "dword", - "value": 20000 + "value": 20952 }, "Cursed": { "type": "byte", @@ -89,7 +89,38 @@ }, "Subtype": { "type": "word", - "value": 335 + "value": 1053 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 33 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 123 + }, + "Subtype": { + "type": "word", + "value": 0 } } ] diff --git a/_module/uti/ra_it_gold295.uti.json b/_module/uti/ra_it_gold295.uti.json new file mode 100644 index 00000000..0abe15fb --- /dev/null +++ b/_module/uti/ra_it_gold295.uti.json @@ -0,0 +1,82 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 76 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "295 Gold Pieces" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "295 Gold Pieces" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "295 Gold Pieces" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "id": 535, + "type": "cexolocstring", + "value": { + "0": "295 Gold Pieces" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 295 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RA_IT_GOLD295" + }, + "TemplateResRef": { + "type": "resref", + "value": "ra_it_gold295" + } +} diff --git a/_module/utm/store_outcast.utm.json b/_module/utm/store_outcast.utm.json new file mode 100644 index 00000000..4c3c1e3a --- /dev/null +++ b/_module/utm/store_outcast.utm.json @@ -0,0 +1,1830 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 1 + }, + "BM_MarkDown": { + "type": "int", + "value": 15 + }, + "Comment": { + "type": "cexostring", + "value": "Outlaw's Store" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "id": 91376, + "type": "cexolocstring", + "value": { + "0": "Outcasts' Store" + } + }, + "MarkDown": { + "type": "int", + "value": 25 + }, + "MarkUp": { + "type": "int", + "value": 150 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "store_outcast" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "x0_misc_fists" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "x0_maarcl015" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_maarcl085" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_cloth028" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "x0_armhe002" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "x0_maarcl009" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "zep_tieflingc001" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "zep_chainbikini" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "item010" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 9, + "InventoryRes": { + "type": "resref", + "value": "bootsofthefrog" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 10, + "InventoryRes": { + "type": "resref", + "value": "cloakofchameleon" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 11, + "InventoryRes": { + "type": "resref", + "value": "hornsofasmodeus" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 12, + "InventoryRes": { + "type": "resref", + "value": "masterworkgreath" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 13, + "InventoryRes": { + "type": "resref", + "value": "robeoftheenlight" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 14, + "InventoryRes": { + "type": "resref", + "value": "handwrapsoftheen" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + } + ] + } + }, + { + "__struct_id": 4, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wammar011" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wammbo010" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wammbu010" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_wammbu001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "x2_wammbo001" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_wammbo003" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_wammbu005" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_wammar006" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_wammar008" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wthmdt009" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wthmsh009" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_wthmax009" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + } + ] + } + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_cfm_bscrl" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_cfm_pbottl" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion003" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion007" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion008" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion008" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion004" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion004" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion022" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion023" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "InventoryRes": { + "type": "resref", + "value": "x2_it_sparscr305" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion019" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion011" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 13, + "InventoryRes": { + "type": "resref", + "value": "nw_it_spdvscr401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 14, + "InventoryRes": { + "type": "resref", + "value": "x1_it_sparscr604" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 15, + "InventoryRes": { + "type": "resref", + "value": "x2_it_sparscr501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 16, + "InventoryRes": { + "type": "resref", + "value": "x1_it_sparscr502" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 17, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr701" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 18, + "InventoryRes": { + "type": "resref", + "value": "x2_it_spdvscr507" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 19, + "InventoryRes": { + "type": "resref", + "value": "x2_it_sparscr601" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 20, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr702" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 21, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr611" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 22, + "InventoryRes": { + "type": "resref", + "value": "x2_it_spdvscr801" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 23, + "InventoryRes": { + "type": "resref", + "value": "x1_it_sparscr603" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 24, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr216" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 25, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr408" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 26, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr912" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 27, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr613" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + } + ] + } + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mring013" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mring008" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mring019" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mring013" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_wmgwn004" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "x2_it_poison019" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem31" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem18" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel31" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel34" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel23" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem03" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec37" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec33" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "InventoryRes": { + "type": "resref", + "value": "x2_it_poison014" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mthnmisc10" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "InventoryRes": { + "type": "resref", + "value": "nw_it_contain001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 12, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 13, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mthnmisc08" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 14, + "InventoryRes": { + "type": "resref", + "value": "nw_it_contain005" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 15, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mthnmisc05" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 16, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mthnmisc06" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 17, + "InventoryRes": { + "type": "resref", + "value": "nw_it_contain006" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 18, + "InventoryRes": { + "type": "resref", + "value": "x0_it_mmedmisc01" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 19, + "InventoryRes": { + "type": "resref", + "value": "x0_misc_lyrics" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 20, + "InventoryRes": { + "type": "resref", + "value": "x0_misc_charge" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_medkit004" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_p_rogue" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 23, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem002" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 24, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 25, + "InventoryRes": { + "type": "resref", + "value": "nw_it_gem005" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 26, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem01" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 27, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec36" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 28, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem05" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 29, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem03" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 30, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem04" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 31, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem07" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 32, + "InventoryRes": { + "type": "resref", + "value": "x2_it_lightgem02" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullseyelantern" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "candle" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bagoftricks" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 36, + "InventoryRes": { + "type": "resref", + "value": "chimeofinterrupt" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 37, + "InventoryRes": { + "type": "resref", + "value": "crystalball" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 38, + "InventoryRes": { + "type": "resref", + "value": "item057" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 39, + "InventoryRes": { + "type": "resref", + "value": "darkskull" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 40, + "InventoryRes": { + "type": "resref", + "value": "decanterofendles" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 41, + "InventoryRes": { + "type": "resref", + "value": "immovablerod" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 42, + "InventoryRes": { + "type": "resref", + "value": "jugofalchemy" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 43, + "InventoryRes": { + "type": "resref", + "value": "magicalwaterskin" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "orange" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 45, + "InventoryRes": { + "type": "resref", + "value": "quiverofholding" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 46, + "InventoryRes": { + "type": "resref", + "value": "efreetibottle" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sunrod" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 48, + "InventoryRes": { + "type": "resref", + "value": "chaosdiamond" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "STORE_OUTCAST" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + } +}