aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2012-09-24 20:14:00 +0100
committerMelanie2012-09-24 20:14:00 +0100
commitbbaf2c5a80441fdbd2f55e02ec9f46c3b66869c6 (patch)
tree2ac67907f6333bbbc9e4d821c6607b53d0e22acb
parentMerge branch 'master' into careminster (diff)
parentHG Rez object: warn the user if the item or asset cannot be found. (diff)
downloadopensim-SC_OLD-bbaf2c5a80441fdbd2f55e02ec9f46c3b66869c6.zip
opensim-SC_OLD-bbaf2c5a80441fdbd2f55e02ec9f46c3b66869c6.tar.gz
opensim-SC_OLD-bbaf2c5a80441fdbd2f55e02ec9f46c3b66869c6.tar.bz2
opensim-SC_OLD-bbaf2c5a80441fdbd2f55e02ec9f46c3b66869c6.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/Framework/Scenes/Scene.cs
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs74
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs30
-rw-r--r--OpenSim/ApplicationPlugins/Rest/RestPlugin.cs14
-rw-r--r--OpenSim/Framework/AssetPermissions.cs84
-rw-r--r--OpenSim/Framework/RegionInfo.cs8
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs230
-rw-r--r--OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs22
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs107
-rw-r--r--OpenSim/Framework/WebUtil.cs81
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs4
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs28
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs79
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs9
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGUuidGatherer.cs57
-rw-r--r--OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs (renamed from OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs)0
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs23
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs8
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs172
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs136
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs24
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs134
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs62
-rw-r--r--OpenSim/Services/HypergridService/HGAssetService.cs26
-rw-r--r--OpenSim/Services/HypergridService/UserAgentService.cs103
-rwxr-xr-xbin/OpenMetaverse.Rendering.Meshmerizer.dllbin24576 -> 24576 bytes
-rwxr-xr-xbin/OpenMetaverse.StructuredData.dllbin114688 -> 102400 bytes
-rwxr-xr-xbin/OpenMetaverse.dllbin1904640 -> 1765376 bytes
-rw-r--r--bin/OpenMetaverse.dll.config8
-rwxr-xr-xbin/OpenMetaverseTypes.dllbin122880 -> 114688 bytes
-rw-r--r--bin/OpenSim.ini.example10
-rw-r--r--bin/OpenSimDefaults.ini7
-rw-r--r--bin/Robust.HG.ini.example42
-rw-r--r--bin/config-include/GridCommon.ini.example20
-rw-r--r--bin/config-include/StandaloneCommon.ini.example43
-rw-r--r--bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.sobin124540 -> 0 bytes
-rw-r--r--bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.sobin128100 -> 0 bytes
-rwxr-xr-xbin/lib32/libopenjpeg-dotnet.sobin0 -> 140028 bytes
-rw-r--r--bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.sobin142616 -> 0 bytes
-rw-r--r--bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylibbin125136 -> 0 bytes
-rwxr-xr-xbin/lib64/libopenjpeg-dotnet-x86_64.sobin0 -> 149368 bytes
-rwxr-xr-xbin/lib64/libopenjpeg-dotnet.dylibbin0 -> 147288 bytes
-rwxr-xr-xbin/openjpeg-dotnet-x86_64.dllbin843776 -> 215040 bytes
-rwxr-xr-xbin/openjpeg-dotnet.dllbin187392 -> 201216 bytes
-rw-r--r--bin/openmetaverse_data/avatar_lad.xml12308
-rw-r--r--bin/openmetaverse_data/blush_alpha.tgabin0 -> 17352 bytes
-rw-r--r--bin/openmetaverse_data/body_skingrain.tgabin0 -> 262188 bytes
-rw-r--r--bin/openmetaverse_data/bodyfreckles_alpha.tgabin0 -> 257249 bytes
-rw-r--r--bin/openmetaverse_data/bump_face_wrinkles.tgabin0 -> 25243 bytes
-rw-r--r--bin/openmetaverse_data/bump_head_base.tgabin0 -> 105525 bytes
-rw-r--r--bin/openmetaverse_data/bump_lowerbody_base.tgabin0 -> 112782 bytes
-rw-r--r--bin/openmetaverse_data/bump_pants_wrinkles.tgabin0 -> 83183 bytes
-rw-r--r--bin/openmetaverse_data/bump_shirt_wrinkles.tgabin0 -> 81501 bytes
-rw-r--r--bin/openmetaverse_data/bump_upperbody_base.tgabin0 -> 147581 bytes
-rw-r--r--bin/openmetaverse_data/eyebrows_alpha.tgabin0 -> 9469 bytes
-rw-r--r--bin/openmetaverse_data/eyeliner_alpha.tgabin0 -> 4720 bytes
-rw-r--r--bin/openmetaverse_data/eyeshadow_inner_alpha.tgabin0 -> 5466 bytes
-rw-r--r--bin/openmetaverse_data/eyeshadow_outer_alpha.tgabin0 -> 7382 bytes
-rw-r--r--bin/openmetaverse_data/eyewhite.tgabin0 -> 42353 bytes
-rw-r--r--bin/openmetaverse_data/facehair_chincurtains_alpha.tgabin0 -> 34610 bytes
-rw-r--r--bin/openmetaverse_data/facehair_moustache_alpha.tgabin0 -> 14017 bytes
-rw-r--r--bin/openmetaverse_data/facehair_sideburns_alpha.tgabin0 -> 27328 bytes
-rw-r--r--bin/openmetaverse_data/facehair_soulpatch_alpha.tgabin0 -> 11277 bytes
-rw-r--r--bin/openmetaverse_data/freckles_alpha.tgabin0 -> 140558 bytes
-rw-r--r--bin/openmetaverse_data/glove_length_alpha.tgabin0 -> 49745 bytes
-rw-r--r--bin/openmetaverse_data/gloves_fingers_alpha.tgabin0 -> 39616 bytes
-rw-r--r--bin/openmetaverse_data/head_alpha.tgabin0 -> 6066 bytes
-rw-r--r--bin/openmetaverse_data/head_color.tgabin0 -> 70715 bytes
-rw-r--r--bin/openmetaverse_data/head_hair.tgabin0 -> 75600 bytes
-rw-r--r--bin/openmetaverse_data/head_highlights_alpha.tgabin0 -> 20503 bytes
-rw-r--r--bin/openmetaverse_data/head_shading_alpha.tgabin0 -> 35304 bytes
-rw-r--r--bin/openmetaverse_data/head_skingrain.tgabin0 -> 262376 bytes
-rw-r--r--bin/openmetaverse_data/jacket_length_lower_alpha.tgabin0 -> 9768 bytes
-rw-r--r--bin/openmetaverse_data/jacket_length_upper_alpha.tgabin0 -> 14617 bytes
-rw-r--r--bin/openmetaverse_data/jacket_open_lower_alpha.tgabin0 -> 19732 bytes
-rw-r--r--bin/openmetaverse_data/jacket_open_upper_alpha.tgabin0 -> 41606 bytes
-rw-r--r--bin/openmetaverse_data/lipgloss_alpha.tgabin0 -> 4738 bytes
-rw-r--r--bin/openmetaverse_data/lips_mask.tgabin0 -> 6110 bytes
-rw-r--r--bin/openmetaverse_data/lipstick_alpha.tgabin0 -> 7966 bytes
-rw-r--r--bin/openmetaverse_data/lowerbody_color.tgabin0 -> 135395 bytes
-rw-r--r--bin/openmetaverse_data/lowerbody_highlights_alpha.tgabin0 -> 8695 bytes
-rw-r--r--bin/openmetaverse_data/lowerbody_shading_alpha.tgabin0 -> 41766 bytes
-rw-r--r--bin/openmetaverse_data/nailpolish_alpha.tgabin0 -> 4656 bytes
-rw-r--r--bin/openmetaverse_data/pants_length_alpha.tgabin0 -> 26843 bytes
-rw-r--r--bin/openmetaverse_data/pants_waist_alpha.tgabin0 -> 10487 bytes
-rw-r--r--bin/openmetaverse_data/rosyface_alpha.tgabin0 -> 44382 bytes
-rw-r--r--bin/openmetaverse_data/rouge_alpha.tgabin0 -> 44382 bytes
-rw-r--r--bin/openmetaverse_data/shirt_bottom_alpha.tgabin0 -> 32242 bytes
-rw-r--r--bin/openmetaverse_data/shirt_collar_alpha.tgabin0 -> 14417 bytes
-rw-r--r--bin/openmetaverse_data/shirt_collar_back_alpha.tgabin0 -> 12789 bytes
-rw-r--r--bin/openmetaverse_data/shirt_sleeve_alpha.tgabin0 -> 72196 bytes
-rw-r--r--bin/openmetaverse_data/shoe_height_alpha.tgabin0 -> 24461 bytes
-rw-r--r--bin/openmetaverse_data/skirt_length_alpha.tgabin0 -> 4114 bytes
-rw-r--r--bin/openmetaverse_data/skirt_slit_back_alpha.tgabin0 -> 90350 bytes
-rw-r--r--bin/openmetaverse_data/skirt_slit_front_alpha.tgabin0 -> 90350 bytes
-rw-r--r--bin/openmetaverse_data/skirt_slit_left_alpha.tgabin0 -> 82006 bytes
-rw-r--r--bin/openmetaverse_data/skirt_slit_right_alpha.tgabin0 -> 91410 bytes
-rw-r--r--bin/openmetaverse_data/underpants_trial_female.tgabin0 -> 48063 bytes
-rw-r--r--bin/openmetaverse_data/underpants_trial_male.tgabin0 -> 144983 bytes
-rw-r--r--bin/openmetaverse_data/undershirt_trial_female.tgabin0 -> 81390 bytes
-rw-r--r--bin/openmetaverse_data/upperbody_color.tgabin0 -> 23348 bytes
-rw-r--r--bin/openmetaverse_data/upperbody_highlights_alpha.tgabin0 -> 6509 bytes
-rw-r--r--bin/openmetaverse_data/upperbody_shading_alpha.tgabin0 -> 25297 bytes
-rw-r--r--bin/openmetaverse_data/upperbodyfreckles_alpha.tgabin0 -> 180104 bytes
-rwxr-xr-x[-rw-r--r--]bin/pCampBot.exe.config0
108 files changed, 13520 insertions, 455 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 202d199..4473ee0 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -852,7 +852,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
852 responseData["success"] = true; 852 responseData["success"] = true;
853 responseData["region_name"] = region.RegionName; 853 responseData["region_name"] = region.RegionName;
854 responseData["region_id"] = region.RegionID.ToString(); 854 responseData["region_id"] = region.RegionID.ToString();
855 responseData["region_uuid"] = region.RegionID.ToString(); //Deprecate July 2012
856 855
857 m_log.Info("[RADMIN]: CreateRegion: request complete"); 856 m_log.Info("[RADMIN]: CreateRegion: request complete");
858 } 857 }
@@ -2015,29 +2014,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2015 { 2014 {
2016 return; 2015 return;
2017 } 2016 }
2018 #region Deprecate July 2012
2019 //region_ID, regionid, region_uuid will be deprecated in July 2012!!!!!!
2020 else if (requestData.ContainsKey("regionid") &&
2021 !String.IsNullOrEmpty((string)requestData["regionid"]))
2022 {
2023 m_log.WarnFormat("[RADMIN]: Use of parameter regionid will be deprecated as of July 2012. Use region_id instead");
2024 }
2025 else if (requestData.ContainsKey("region_ID") &&
2026 !String.IsNullOrEmpty((string)requestData["region_ID"]))
2027 {
2028 m_log.WarnFormat("[RADMIN]: Use of parameter region_ID will be deprecated as of July 2012. Use region_id instead");
2029 }
2030 else if (requestData.ContainsKey("regionID") &&
2031 !String.IsNullOrEmpty((string)requestData["regionID"]))
2032 {
2033 m_log.WarnFormat("[RADMIN]: Use of parameter regionID will be deprecated as of July 2012. Use region_id instead");
2034 }
2035 else if (requestData.ContainsKey("region_uuid") &&
2036 !String.IsNullOrEmpty((string)requestData["region_uuid"]))
2037 {
2038 m_log.WarnFormat("[RADMIN]: Use of parameter region_uuid will be deprecated as of July 2012. Use region_id instead");
2039 }
2040 #endregion
2041 else 2017 else
2042 { 2018 {
2043 responseData["accepted"] = false; 2019 responseData["accepted"] = false;
@@ -2059,56 +2035,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2059 throw new Exception(String.Format("Region ID {0} not found", regionID)); 2035 throw new Exception(String.Format("Region ID {0} not found", regionID));
2060 } 2036 }
2061 } 2037 }
2062 #region Deprecate July 2012
2063 else if (requestData.ContainsKey("regionid") &&
2064 !String.IsNullOrEmpty((string)requestData["regionid"]))
2065 {
2066 m_log.WarnFormat("[RADMIN]: Use of parameter regionid will be deprecated as of July 2012. Use region_id instead");
2067
2068 UUID regionID = (UUID)(string)requestData["regionid"];
2069 if (!m_application.SceneManager.TryGetScene(regionID, out scene))
2070 {
2071 responseData["error"] = String.Format("Region ID {0} not found", regionID);
2072 throw new Exception(String.Format("Region ID {0} not found", regionID));
2073 }
2074 }
2075 else if (requestData.ContainsKey("region_ID") &&
2076 !String.IsNullOrEmpty((string)requestData["region_ID"]))
2077 {
2078 m_log.WarnFormat("[RADMIN]: Use of parameter region_ID will be deprecated as of July 2012. Use region_id instead");
2079
2080 UUID regionID = (UUID)(string)requestData["region_ID"];
2081 if (!m_application.SceneManager.TryGetScene(regionID, out scene))
2082 {
2083 responseData["error"] = String.Format("Region ID {0} not found", regionID);
2084 throw new Exception(String.Format("Region ID {0} not found", regionID));
2085 }
2086 }
2087 else if (requestData.ContainsKey("regionID") &&
2088 !String.IsNullOrEmpty((string)requestData["regionID"]))
2089 {
2090 m_log.WarnFormat("[RADMIN]: Use of parameter regionID will be deprecated as of July 2012. Use region_id instead");
2091
2092 UUID regionID = (UUID)(string)requestData["regionID"];
2093 if (!m_application.SceneManager.TryGetScene(regionID, out scene))
2094 {
2095 responseData["error"] = String.Format("Region ID {0} not found", regionID);
2096 throw new Exception(String.Format("Region ID {0} not found", regionID));
2097 }
2098 }
2099 else if (requestData.ContainsKey("region_uuid") &&
2100 !String.IsNullOrEmpty((string)requestData["region_uuid"]))
2101 {
2102 m_log.WarnFormat("[RADMIN]: Use of parameter region_uuid will be deprecated as of July 2012. Use region_id instead");
2103
2104 UUID regionID = (UUID)(string)requestData["region_uuid"];
2105 if (!m_application.SceneManager.TryGetScene(regionID, out scene))
2106 {
2107 responseData["error"] = String.Format("Region ID {0} not found", regionID);
2108 throw new Exception(String.Format("Region ID {0} not found", regionID));
2109 }
2110 }
2111 #endregion
2112 else if (requestData.ContainsKey("region_name") && 2038 else if (requestData.ContainsKey("region_name") &&
2113 !String.IsNullOrEmpty((string)requestData["region_name"])) 2039 !String.IsNullOrEmpty((string)requestData["region_name"]))
2114 { 2040 {
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
index cb88695..072bd6f 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
@@ -312,14 +312,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
312 // Now that everything is setup we can proceed to 312 // Now that everything is setup we can proceed to
313 // add THIS agent to the HTTP server's handler list 313 // add THIS agent to the HTTP server's handler list
314 314
315 if (!AddAgentHandler(Rest.Name,this)) 315 // FIXME: If this code is ever to be re-enabled (most of it is disabled already) then this will
316 { 316 // have to be handled through the AddHttpHandler interface.
317 Rest.Log.ErrorFormat("{0} Unable to activate handler interface", MsgId); 317// if (!AddAgentHandler(Rest.Name,this))
318 foreach (IRest handler in handlers) 318// {
319 { 319// Rest.Log.ErrorFormat("{0} Unable to activate handler interface", MsgId);
320 handler.Close(); 320// foreach (IRest handler in handlers)
321 } 321// {
322 } 322// handler.Close();
323// }
324// }
323 325
324 } 326 }
325 catch (Exception e) 327 catch (Exception e)
@@ -342,11 +344,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
342 { 344 {
343 Rest.Log.InfoFormat("{0} Plugin is terminating", MsgId); 345 Rest.Log.InfoFormat("{0} Plugin is terminating", MsgId);
344 346
345 try 347 // FIXME: If this code is ever to be re-enabled (most of it is disabled already) then this will
346 { 348 // have to be handled through the AddHttpHandler interface.
347 RemoveAgentHandler(Rest.Name, this); 349// try
348 } 350// {
349 catch (KeyNotFoundException){} 351// RemoveAgentHandler(Rest.Name, this);
352// }
353// catch (KeyNotFoundException){}
350 354
351 foreach (IRest handler in handlers) 355 foreach (IRest handler in handlers)
352 { 356 {
diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs
index eb16750..a2425b5 100644
--- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs
+++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs
@@ -297,7 +297,9 @@ namespace OpenSim.ApplicationPlugins.Rest
297 { 297 {
298 if (!IsEnabled) return false; 298 if (!IsEnabled) return false;
299 _agents.Add(agentName, handler); 299 _agents.Add(agentName, handler);
300 return _httpd.AddAgentHandler(agentName, handler); 300// return _httpd.AddAgentHandler(agentName, handler);
301
302 return false;
301 } 303 }
302 304
303 /// <summary> 305 /// <summary>
@@ -316,7 +318,7 @@ namespace OpenSim.ApplicationPlugins.Rest
316 if (_agents[agentName] == handler) 318 if (_agents[agentName] == handler)
317 { 319 {
318 _agents.Remove(agentName); 320 _agents.Remove(agentName);
319 return _httpd.RemoveAgentHandler(agentName, handler); 321// return _httpd.RemoveAgentHandler(agentName, handler);
320 } 322 }
321 return false; 323 return false;
322 } 324 }
@@ -358,10 +360,10 @@ namespace OpenSim.ApplicationPlugins.Rest
358 _httpd.RemoveStreamHandler(h.HttpMethod, h.Path); 360 _httpd.RemoveStreamHandler(h.HttpMethod, h.Path);
359 } 361 }
360 _handlers = null; 362 _handlers = null;
361 foreach (KeyValuePair<string, IHttpAgentHandler> h in _agents) 363// foreach (KeyValuePair<string, IHttpAgentHandler> h in _agents)
362 { 364// {
363 _httpd.RemoveAgentHandler(h.Key, h.Value); 365// _httpd.RemoveAgentHandler(h.Key, h.Value);
364 } 366// }
365 _agents = null; 367 _agents = null;
366 } 368 }
367 369
diff --git a/OpenSim/Framework/AssetPermissions.cs b/OpenSim/Framework/AssetPermissions.cs
new file mode 100644
index 0000000..4a905c2
--- /dev/null
+++ b/OpenSim/Framework/AssetPermissions.cs
@@ -0,0 +1,84 @@
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4
5using Nini.Config;
6using log4net;
7
8using OpenMetaverse;
9
10namespace OpenSim.Framework
11{
12 public class AssetPermissions
13 {
14 private static readonly ILog m_log =
15 LogManager.GetLogger(
16 MethodBase.GetCurrentMethod().DeclaringType);
17
18 private bool[] m_DisallowExport, m_DisallowImport;
19 private string[] m_AssetTypeNames;
20
21 public AssetPermissions(IConfig config)
22 {
23 Type enumType = typeof(AssetType);
24 m_AssetTypeNames = Enum.GetNames(enumType);
25 for (int i = 0; i < m_AssetTypeNames.Length; i++)
26 m_AssetTypeNames[i] = m_AssetTypeNames[i].ToLower();
27 int n = Enum.GetValues(enumType).Length;
28 m_DisallowExport = new bool[n];
29 m_DisallowImport = new bool[n];
30
31 LoadPermsFromConfig(config, "DisallowExport", m_DisallowExport);
32 LoadPermsFromConfig(config, "DisallowImport", m_DisallowImport);
33
34 }
35
36 private void LoadPermsFromConfig(IConfig assetConfig, string variable, bool[] bitArray)
37 {
38 if (assetConfig == null)
39 return;
40
41 string perms = assetConfig.GetString(variable, String.Empty);
42 string[] parts = perms.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
43 foreach (string s in parts)
44 {
45 int index = Array.IndexOf(m_AssetTypeNames, s.Trim().ToLower());
46 if (index >= 0)
47 bitArray[index] = true;
48 else
49 m_log.WarnFormat("[Asset Permissions]: Invalid AssetType {0}", s);
50 }
51
52 }
53
54 public bool AllowedExport(sbyte type)
55 {
56 string assetTypeName = ((AssetType)type).ToString();
57
58 int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
59 if (index >= 0 && m_DisallowExport[index])
60 {
61 m_log.DebugFormat("[Asset Permissions]: Export denied: configuration does not allow export of AssetType {0}", assetTypeName);
62 return false;
63 }
64
65 return true;
66 }
67
68 public bool AllowedImport(sbyte type)
69 {
70 string assetTypeName = ((AssetType)type).ToString();
71
72 int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
73 if (index >= 0 && m_DisallowImport[index])
74 {
75 m_log.DebugFormat("[Asset Permissions]: Import denied: configuration does not allow import of AssetType {0}", assetTypeName);
76 return false;
77 }
78
79 return true;
80 }
81
82
83 }
84}
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index fc64ff9..e7bed6a 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -645,11 +645,11 @@ namespace OpenSim.Framework
645 645
646 #region Prim stuff 646 #region Prim stuff
647 647
648 m_nonphysPrimMin = config.GetFloat("NonphysicalPrimMin", 0); 648 m_nonphysPrimMin = config.GetFloat("NonPhysicalPrimMin", 0);
649 allKeys.Remove("NonphysicalPrimMin"); 649 allKeys.Remove("NonPhysicalPrimMin");
650 650
651 m_nonphysPrimMax = config.GetInt("NonphysicalPrimMax", 0); 651 m_nonphysPrimMax = config.GetInt("NonPhysicalPrimMax", 0);
652 allKeys.Remove("NonphysicalPrimMax"); 652 allKeys.Remove("NonPhysicalPrimMax");
653 653
654 m_physPrimMin = config.GetFloat("PhysicalPrimMin", 0); 654 m_physPrimMin = config.GetFloat("PhysicalPrimMin", 0);
655 allKeys.Remove("PhysicalPrimMin"); 655 allKeys.Remove("PhysicalPrimMin");
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 691b45a..29593e5 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -54,8 +54,23 @@ namespace OpenSim.Framework.Servers.HttpServer
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
56 56
57 /// <summary>
58 /// Gets or sets the debug level.
59 /// </summary>
60 /// <value>
61 /// See MainServer.DebugLevel.
62 /// </value>
57 public int DebugLevel { get; set; } 63 public int DebugLevel { get; set; }
58 64
65 /// <summary>
66 /// Request number for diagnostic purposes.
67 /// </summary>
68 /// <remarks>
69 /// This is an internal number. In some debug situations an external number may also be supplied in the
70 /// opensim-request-id header but we are not currently logging this.
71 /// </remarks>
72 public int RequestNumber { get; private set; }
73
59 private volatile int NotSocketErrors = 0; 74 private volatile int NotSocketErrors = 0;
60 public volatile bool HTTPDRunning = false; 75 public volatile bool HTTPDRunning = false;
61 76
@@ -67,7 +82,7 @@ namespace OpenSim.Framework.Servers.HttpServer
67 protected Dictionary<string, LLSDMethod> m_llsdHandlers = new Dictionary<string, LLSDMethod>(); 82 protected Dictionary<string, LLSDMethod> m_llsdHandlers = new Dictionary<string, LLSDMethod>();
68 protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>(); 83 protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>();
69 protected Dictionary<string, GenericHTTPMethod> m_HTTPHandlers = new Dictionary<string, GenericHTTPMethod>(); 84 protected Dictionary<string, GenericHTTPMethod> m_HTTPHandlers = new Dictionary<string, GenericHTTPMethod>();
70 protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>(); 85// protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>();
71 protected Dictionary<string, PollServiceEventArgs> m_pollHandlers = 86 protected Dictionary<string, PollServiceEventArgs> m_pollHandlers =
72 new Dictionary<string, PollServiceEventArgs>(); 87 new Dictionary<string, PollServiceEventArgs>();
73 88
@@ -245,29 +260,29 @@ namespace OpenSim.Framework.Servers.HttpServer
245 return new List<string>(m_pollHandlers.Keys); 260 return new List<string>(m_pollHandlers.Keys);
246 } 261 }
247 262
248 // Note that the agent string is provided simply to differentiate 263// // Note that the agent string is provided simply to differentiate
249 // the handlers - it is NOT required to be an actual agent header 264// // the handlers - it is NOT required to be an actual agent header
250 // value. 265// // value.
251 public bool AddAgentHandler(string agent, IHttpAgentHandler handler) 266// public bool AddAgentHandler(string agent, IHttpAgentHandler handler)
252 { 267// {
253 lock (m_agentHandlers) 268// lock (m_agentHandlers)
254 { 269// {
255 if (!m_agentHandlers.ContainsKey(agent)) 270// if (!m_agentHandlers.ContainsKey(agent))
256 { 271// {
257 m_agentHandlers.Add(agent, handler); 272// m_agentHandlers.Add(agent, handler);
258 return true; 273// return true;
259 } 274// }
260 } 275// }
261 276//
262 //must already have a handler for that path so return false 277// //must already have a handler for that path so return false
263 return false; 278// return false;
264 } 279// }
265 280//
266 public List<string> GetAgentHandlerKeys() 281// public List<string> GetAgentHandlerKeys()
267 { 282// {
268 lock (m_agentHandlers) 283// lock (m_agentHandlers)
269 return new List<string>(m_agentHandlers.Keys); 284// return new List<string>(m_agentHandlers.Keys);
270 } 285// }
271 286
272 public bool AddLLSDHandler(string path, LLSDMethod handler) 287 public bool AddLLSDHandler(string path, LLSDMethod handler)
273 { 288 {
@@ -296,6 +311,8 @@ namespace OpenSim.Framework.Servers.HttpServer
296 311
297 private void OnRequest(object source, RequestEventArgs args) 312 private void OnRequest(object source, RequestEventArgs args)
298 { 313 {
314 RequestNumber++;
315
299 try 316 try
300 { 317 {
301 IHttpClientContext context = (IHttpClientContext)source; 318 IHttpClientContext context = (IHttpClientContext)source;
@@ -405,7 +422,6 @@ namespace OpenSim.Framework.Servers.HttpServer
405 string requestMethod = request.HttpMethod; 422 string requestMethod = request.HttpMethod;
406 string uriString = request.RawUrl; 423 string uriString = request.RawUrl;
407 424
408// string reqnum = "unknown";
409 int requestStartTick = Environment.TickCount; 425 int requestStartTick = Environment.TickCount;
410 426
411 // Will be adjusted later on. 427 // Will be adjusted later on.
@@ -422,22 +438,22 @@ namespace OpenSim.Framework.Servers.HttpServer
422 438
423 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true); 439 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
424 440
425 // This is the REST agent interface. We require an agent to properly identify 441// // This is the REST agent interface. We require an agent to properly identify
426 // itself. If the REST handler recognizes the prefix it will attempt to 442// // itself. If the REST handler recognizes the prefix it will attempt to
427 // satisfy the request. If it is not recognizable, and no damage has occurred 443// // satisfy the request. If it is not recognizable, and no damage has occurred
428 // the request can be passed through to the other handlers. This is a low 444// // the request can be passed through to the other handlers. This is a low
429 // probability event; if a request is matched it is normally expected to be 445// // probability event; if a request is matched it is normally expected to be
430 // handled 446// // handled
431 IHttpAgentHandler agentHandler; 447// IHttpAgentHandler agentHandler;
432 448//
433 if (TryGetAgentHandler(request, response, out agentHandler)) 449// if (TryGetAgentHandler(request, response, out agentHandler))
434 { 450// {
435 if (HandleAgentRequest(agentHandler, request, response)) 451// if (HandleAgentRequest(agentHandler, request, response))
436 { 452// {
437 requestEndTick = Environment.TickCount; 453// requestEndTick = Environment.TickCount;
438 return; 454// return;
439 } 455// }
440 } 456// }
441 457
442 //response.KeepAlive = true; 458 //response.KeepAlive = true;
443 response.SendChunked = false; 459 response.SendChunked = false;
@@ -529,8 +545,8 @@ namespace OpenSim.Framework.Servers.HttpServer
529 545
530 if (DebugLevel >= 3) 546 if (DebugLevel >= 3)
531 m_log.DebugFormat( 547 m_log.DebugFormat(
532 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 548 "[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}",
533 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 549 RequestNumber, Port, request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
534 550
535 buffer = HandleHTTPRequest(request, response); 551 buffer = HandleHTTPRequest(request, response);
536 break; 552 break;
@@ -541,8 +557,8 @@ namespace OpenSim.Framework.Servers.HttpServer
541 557
542 if (DebugLevel >= 3) 558 if (DebugLevel >= 3)
543 m_log.DebugFormat( 559 m_log.DebugFormat(
544 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 560 "[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}",
545 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 561 RequestNumber, Port, request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
546 562
547 buffer = HandleLLSDRequests(request, response); 563 buffer = HandleLLSDRequests(request, response);
548 break; 564 break;
@@ -620,11 +636,11 @@ namespace OpenSim.Framework.Servers.HttpServer
620 } 636 }
621 catch (IOException e) 637 catch (IOException e)
622 { 638 {
623 m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e); 639 m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
624 } 640 }
625 catch (Exception e) 641 catch (Exception e)
626 { 642 {
627 m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e); 643 m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
628 SendHTML500(response); 644 SendHTML500(response);
629 } 645 }
630 finally 646 finally
@@ -635,12 +651,21 @@ namespace OpenSim.Framework.Servers.HttpServer
635 if (tickdiff > 3000 && requestHandler.Name != "GetTexture") 651 if (tickdiff > 3000 && requestHandler.Name != "GetTexture")
636 { 652 {
637 m_log.InfoFormat( 653 m_log.InfoFormat(
638 "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} from {4} took {5}ms", 654 "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms",
655 RequestNumber,
639 requestMethod, 656 requestMethod,
640 uriString, 657 uriString,
641 requestHandler != null ? requestHandler.Name : "", 658 requestHandler != null ? requestHandler.Name : "",
642 requestHandler != null ? requestHandler.Description : "", 659 requestHandler != null ? requestHandler.Description : "",
643 request.RemoteIPEndPoint.ToString(), 660 request.RemoteIPEndPoint,
661 tickdiff);
662 }
663 else if (DebugLevel >= 4)
664 {
665 m_log.DebugFormat(
666 "[BASE HTTP SERVER]: HTTP IN {0} :{1} took {2}ms",
667 RequestNumber,
668 Port,
644 tickdiff); 669 tickdiff);
645 } 670 }
646 } 671 }
@@ -649,30 +674,45 @@ namespace OpenSim.Framework.Servers.HttpServer
649 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) 674 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
650 { 675 {
651 m_log.DebugFormat( 676 m_log.DebugFormat(
652 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", 677 "[BASE HTTP SERVER]: HTTP IN {0} :{1} stream handler {2} {3} {4} {5} from {6}",
653 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); 678 RequestNumber,
654 679 Port,
655 if (DebugLevel >= 4) 680 request.HttpMethod,
681 request.Url.PathAndQuery,
682 requestHandler.Name,
683 requestHandler.Description,
684 request.RemoteIPEndPoint);
685
686 if (DebugLevel >= 5)
656 LogIncomingInDetail(request); 687 LogIncomingInDetail(request);
657 } 688 }
658 689
659 private void LogIncomingToContentTypeHandler(OSHttpRequest request) 690 private void LogIncomingToContentTypeHandler(OSHttpRequest request)
660 { 691 {
661 m_log.DebugFormat( 692 m_log.DebugFormat(
662 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 693 "[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}",
663 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 694 RequestNumber,
664 695 Port,
665 if (DebugLevel >= 4) 696 request.ContentType,
697 request.HttpMethod,
698 request.Url.PathAndQuery,
699 request.RemoteIPEndPoint);
700
701 if (DebugLevel >= 5)
666 LogIncomingInDetail(request); 702 LogIncomingInDetail(request);
667 } 703 }
668 704
669 private void LogIncomingToXmlRpcHandler(OSHttpRequest request) 705 private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
670 { 706 {
671 m_log.DebugFormat( 707 m_log.DebugFormat(
672 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", 708 "[BASE HTTP SERVER]: HTTP IN {0} :{1} assumed generic XMLRPC request {2} {3} from {4}",
673 request.HttpMethod, request.Url.PathAndQuery); 709 RequestNumber,
674 710 Port,
675 if (DebugLevel >= 4) 711 request.HttpMethod,
712 request.Url.PathAndQuery,
713 request.RemoteIPEndPoint);
714
715 if (DebugLevel >= 5)
676 LogIncomingInDetail(request); 716 LogIncomingInDetail(request);
677 } 717 }
678 718
@@ -682,7 +722,7 @@ namespace OpenSim.Framework.Servers.HttpServer
682 { 722 {
683 string output; 723 string output;
684 724
685 if (DebugLevel == 4) 725 if (DebugLevel == 5)
686 { 726 {
687 const int sampleLength = 80; 727 const int sampleLength = 80;
688 char[] sampleChars = new char[sampleLength]; 728 char[] sampleChars = new char[sampleLength];
@@ -790,24 +830,24 @@ namespace OpenSim.Framework.Servers.HttpServer
790 } 830 }
791 } 831 }
792 832
793 private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler) 833// private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler)
794 { 834// {
795 agentHandler = null; 835// agentHandler = null;
796 836//
797 lock (m_agentHandlers) 837// lock (m_agentHandlers)
798 { 838// {
799 foreach (IHttpAgentHandler handler in m_agentHandlers.Values) 839// foreach (IHttpAgentHandler handler in m_agentHandlers.Values)
800 { 840// {
801 if (handler.Match(request, response)) 841// if (handler.Match(request, response))
802 { 842// {
803 agentHandler = handler; 843// agentHandler = handler;
804 return true; 844// return true;
805 } 845// }
806 } 846// }
807 } 847// }
808 848//
809 return false; 849// return false;
810 } 850// }
811 851
812 /// <summary> 852 /// <summary>
813 /// Try all the registered xmlrpc handlers when an xmlrpc request is received. 853 /// Try all the registered xmlrpc handlers when an xmlrpc request is received.
@@ -1778,21 +1818,21 @@ namespace OpenSim.Framework.Servers.HttpServer
1778 m_pollHandlers.Remove(path); 1818 m_pollHandlers.Remove(path);
1779 } 1819 }
1780 1820
1781 public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler) 1821// public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
1782 { 1822// {
1783 lock (m_agentHandlers) 1823// lock (m_agentHandlers)
1784 { 1824// {
1785 IHttpAgentHandler foundHandler; 1825// IHttpAgentHandler foundHandler;
1786 1826//
1787 if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler) 1827// if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler)
1788 { 1828// {
1789 m_agentHandlers.Remove(agent); 1829// m_agentHandlers.Remove(agent);
1790 return true; 1830// return true;
1791 } 1831// }
1792 } 1832// }
1793 1833//
1794 return false; 1834// return false;
1795 } 1835// }
1796 1836
1797 public void RemoveXmlRPCHandler(string method) 1837 public void RemoveXmlRPCHandler(string method)
1798 { 1838 {
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
index db58f6f..0bd3aae 100644
--- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
@@ -41,10 +41,10 @@ namespace OpenSim.Framework.Servers.HttpServer
41 uint Port { get; } 41 uint Port { get; }
42 bool UseSSL { get; } 42 bool UseSSL { get; }
43 43
44 // Note that the agent string is provided simply to differentiate 44// // Note that the agent string is provided simply to differentiate
45 // the handlers - it is NOT required to be an actual agent header 45// // the handlers - it is NOT required to be an actual agent header
46 // value. 46// // value.
47 bool AddAgentHandler(string agent, IHttpAgentHandler handler); 47// bool AddAgentHandler(string agent, IHttpAgentHandler handler);
48 48
49 /// <summary> 49 /// <summary>
50 /// Add a handler for an HTTP request. 50 /// Add a handler for an HTTP request.
@@ -106,13 +106,13 @@ namespace OpenSim.Framework.Servers.HttpServer
106 106
107 bool SetDefaultLLSDHandler(DefaultLLSDMethod handler); 107 bool SetDefaultLLSDHandler(DefaultLLSDMethod handler);
108 108
109 /// <summary> 109// /// <summary>
110 /// Remove the agent if it is registered. 110// /// Remove the agent if it is registered.
111 /// </summary> 111// /// </summary>
112 /// <param name="agent"></param> 112// /// <param name="agent"></param>
113 /// <param name="handler"></param> 113// /// <param name="handler"></param>
114 /// <returns></returns> 114// /// <returns></returns>
115 bool RemoveAgentHandler(string agent, IHttpAgentHandler handler); 115// bool RemoveAgentHandler(string agent, IHttpAgentHandler handler);
116 116
117 /// <summary> 117 /// <summary>
118 /// Remove an HTTP handler 118 /// Remove an HTTP handler
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index 7402c73..4b61b18 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -48,9 +48,12 @@ namespace OpenSim.Framework.Servers
48 /// Control the printing of certain debug messages. 48 /// Control the printing of certain debug messages.
49 /// </summary> 49 /// </summary>
50 /// <remarks> 50 /// <remarks>
51 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data. 51 /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data.
52 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data. 52 /// If DebugLevel >= 2 then long warnings are logged when receiving bad input data.
53 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged. 53 /// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged.
54 /// If DebugLevel >= 4 then the time taken to fulfill the request is logged.
55 /// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged.
56 /// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged.
54 /// </remarks> 57 /// </remarks>
55 public static int DebugLevel 58 public static int DebugLevel
56 { 59 {
@@ -102,7 +105,6 @@ namespace OpenSim.Framework.Servers
102 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } 105 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
103 } 106 }
104 107
105
106 public static void RegisterHttpConsoleCommands(ICommandConsole console) 108 public static void RegisterHttpConsoleCommands(ICommandConsole console)
107 { 109 {
108 console.Commands.AddCommand( 110 console.Commands.AddCommand(
@@ -111,15 +113,20 @@ namespace OpenSim.Framework.Servers
111 "Show all registered http handlers", HandleShowHttpHandlersCommand); 113 "Show all registered http handlers", HandleShowHttpHandlersCommand);
112 114
113 console.Commands.AddCommand( 115 console.Commands.AddCommand(
114 "Debug", false, "debug http", "debug http [<level>]", 116 "Debug", false, "debug http", "debug http <in|out|all> [<level>]",
115 "Turn on inbound non-poll http request debugging.", 117 "Turn on http request logging.",
116 "If level <= 0, then no extra logging is done.\n" 118 "If in or all and\n"
117 + "If level >= 1, then short warnings are logged when receiving bad input data.\n" 119 + " level <= 0 then no extra logging is done.\n"
118 + "If level >= 2, then long warnings are logged when receiving bad input data.\n" 120 + " level >= 1 then short warnings are logged when receiving bad input data.\n"
119 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" 121 + " level >= 2 then long warnings are logged when receiving bad input data.\n"
120 + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n" 122 + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n"
121 + "If level >= 5, then the entire incoming data is logged.\n" 123 + " level >= 4 then the time taken to fulfill the request is logged.\n"
122 + "If no level is specified then the current level is returned.", 124 + " level >= 5 then a sample from the beginning of the incoming data is logged.\n"
125 + " level >= 6 then the entire incoming data is logged.\n"
126 + " no level is specified then the current level is returned.\n\n"
127 + "If out or all and\n"
128 + " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n"
129 + " level >= 4 then the time taken to fulfill the request is logged.\n",
123 HandleDebugHttpCommand); 130 HandleDebugHttpCommand);
124 } 131 }
125 132
@@ -127,24 +134,74 @@ namespace OpenSim.Framework.Servers
127 /// Turn on some debugging values for OpenSim. 134 /// Turn on some debugging values for OpenSim.
128 /// </summary> 135 /// </summary>
129 /// <param name="args"></param> 136 /// <param name="args"></param>
130 private static void HandleDebugHttpCommand(string module, string[] args) 137 private static void HandleDebugHttpCommand(string module, string[] cmdparams)
131 { 138 {
132 if (args.Length == 3) 139 if (cmdparams.Length < 3)
140 {
141 MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6");
142 return;
143 }
144
145 bool inReqs = false;
146 bool outReqs = false;
147 bool allReqs = false;
148
149 string subCommand = cmdparams[2];
150
151 if (subCommand.ToLower() == "in")
152 {
153 inReqs = true;
154 }
155 else if (subCommand.ToLower() == "out")
156 {
157 outReqs = true;
158 }
159 else if (subCommand.ToLower() == "all")
160 {
161 allReqs = true;
162 }
163 else
164 {
165 MainConsole.Instance.Output("You must specify in, out or all");
166 return;
167 }
168
169 if (cmdparams.Length >= 4)
133 { 170 {
171 string rawNewDebug = cmdparams[3];
134 int newDebug; 172 int newDebug;
135 if (int.TryParse(args[2], out newDebug)) 173
174 if (!int.TryParse(rawNewDebug, out newDebug))
175 {
176 MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug);
177 return;
178 }
179
180 if (newDebug < 0 || newDebug > 5)
181 {
182 MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..5", newDebug);
183 return;
184 }
185
186 if (allReqs || inReqs)
136 { 187 {
137 MainServer.DebugLevel = newDebug; 188 MainServer.DebugLevel = newDebug;
138 MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug); 189 MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug);
190 }
191
192 if (allReqs || outReqs)
193 {
194 WebUtil.DebugLevel = newDebug;
195 MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug);
139 } 196 }
140 }
141 else if (args.Length == 2)
142 {
143 MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
144 } 197 }
145 else 198 else
146 { 199 {
147 MainConsole.Instance.Output("Usage: debug http 0..5"); 200 if (allReqs || inReqs)
201 MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel);
202
203 if (allReqs || outReqs)
204 MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel);
148 } 205 }
149 } 206 }
150 207
@@ -174,9 +231,9 @@ namespace OpenSim.Framework.Servers
174 foreach (String s in httpServer.GetHTTPHandlerKeys()) 231 foreach (String s in httpServer.GetHTTPHandlerKeys())
175 handlers.AppendFormat("\t{0} {1}\n", s, (poll.Contains(s) ? "(poll service)" : string.Empty)); 232 handlers.AppendFormat("\t{0} {1}\n", s, (poll.Contains(s) ? "(poll service)" : string.Empty));
176 233
177 handlers.AppendFormat("* Agent:\n"); 234// handlers.AppendFormat("* Agent:\n");
178 foreach (String s in httpServer.GetAgentHandlerKeys()) 235// foreach (String s in httpServer.GetAgentHandlerKeys())
179 handlers.AppendFormat("\t{0}\n", s); 236// handlers.AppendFormat("\t{0}\n", s);
180 237
181 handlers.AppendFormat("* LLSD:\n"); 238 handlers.AppendFormat("* LLSD:\n");
182 foreach (String s in httpServer.GetLLSDHandlerKeys()) 239 foreach (String s in httpServer.GetLLSDHandlerKeys())
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 8094b6d..a03d626 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -54,9 +54,17 @@ namespace OpenSim.Framework
54 MethodBase.GetCurrentMethod().DeclaringType); 54 MethodBase.GetCurrentMethod().DeclaringType);
55 55
56 /// <summary> 56 /// <summary>
57 /// Control the printing of certain debug messages.
58 /// </summary>
59 /// <remarks>
60 /// If DebugLevel >= 3 then short notices about outgoing HTTP requests are logged.
61 /// </remarks>
62 public static int DebugLevel { get; set; }
63
64 /// <summary>
57 /// Request number for diagnostic purposes. 65 /// Request number for diagnostic purposes.
58 /// </summary> 66 /// </summary>
59 public static int RequestNumber = 0; 67 public static int RequestNumber { get; internal set; }
60 68
61 /// <summary> 69 /// <summary>
62 /// this is the header field used to communicate the local request id 70 /// this is the header field used to communicate the local request id
@@ -146,7 +154,11 @@ namespace OpenSim.Framework
146 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) 154 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed)
147 { 155 {
148 int reqnum = RequestNumber++; 156 int reqnum = RequestNumber++;
149 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 157
158 if (DebugLevel >= 3)
159 m_log.DebugFormat(
160 "[WEB UTIL]: HTTP OUT {0} ServiceOSD {1} {2} (timeout {3}, compressed {4})",
161 reqnum, method, url, timeout, compressed);
150 162
151 string errorMessage = "unknown error"; 163 string errorMessage = "unknown error";
152 int tickstart = Util.EnvironmentTickCount(); 164 int tickstart = Util.EnvironmentTickCount();
@@ -230,7 +242,7 @@ namespace OpenSim.Framework
230 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); 242 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
231 if (tickdiff > LongCallTime) 243 if (tickdiff > LongCallTime)
232 m_log.InfoFormat( 244 m_log.InfoFormat(
233 "[OSD REQUEST]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", 245 "[WEB UTIL]: Slow ServiceOSD request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
234 reqnum, 246 reqnum,
235 method, 247 method,
236 url, 248 url,
@@ -239,10 +251,14 @@ namespace OpenSim.Framework
239 strBuffer != null 251 strBuffer != null
240 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) 252 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
241 : ""); 253 : "");
254 else if (DebugLevel >= 4)
255 m_log.DebugFormat(
256 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
257 reqnum, tickdiff, tickdata);
242 } 258 }
243 259
244 m_log.DebugFormat( 260 m_log.DebugFormat(
245 "[WEB UTIL]: <{0}> osd request for {1}, method {2} FAILED: {3}", reqnum, url, method, errorMessage); 261 "[WEB UTIL]: ServiceOSD request {0} {1} {2} FAILED: {3}", reqnum, url, method, errorMessage);
246 262
247 return ErrorResponseMap(errorMessage); 263 return ErrorResponseMap(errorMessage);
248 } 264 }
@@ -318,7 +334,11 @@ namespace OpenSim.Framework
318 { 334 {
319 int reqnum = RequestNumber++; 335 int reqnum = RequestNumber++;
320 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown"; 336 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown";
321 // m_log.DebugFormat("[WEB UTIL]: <{0}> start form request for {1}, method {2}",reqnum,url,method); 337
338 if (DebugLevel >= 3)
339 m_log.DebugFormat(
340 "[WEB UTIL]: HTTP OUT {0} ServiceForm {1} {2} (timeout {3})",
341 reqnum, method, url, timeout);
322 342
323 string errorMessage = "unknown error"; 343 string errorMessage = "unknown error";
324 int tickstart = Util.EnvironmentTickCount(); 344 int tickstart = Util.EnvironmentTickCount();
@@ -381,7 +401,7 @@ namespace OpenSim.Framework
381 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); 401 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
382 if (tickdiff > LongCallTime) 402 if (tickdiff > LongCallTime)
383 m_log.InfoFormat( 403 m_log.InfoFormat(
384 "[SERVICE FORM]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", 404 "[WEB UTIL]: Slow ServiceForm request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
385 reqnum, 405 reqnum,
386 method, 406 method,
387 url, 407 url,
@@ -390,9 +410,13 @@ namespace OpenSim.Framework
390 queryString != null 410 queryString != null
391 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString 411 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString
392 : ""); 412 : "");
413 else if (DebugLevel >= 4)
414 m_log.DebugFormat(
415 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
416 reqnum, tickdiff, tickdata);
393 } 417 }
394 418
395 m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage); 419 m_log.WarnFormat("[WEB UTIL]: ServiceForm request {0} {1} {2} failed: {2}", reqnum, method, url, errorMessage);
396 420
397 return ErrorResponseMap(errorMessage); 421 return ErrorResponseMap(errorMessage);
398 } 422 }
@@ -644,7 +668,6 @@ namespace OpenSim.Framework
644 /// <returns></returns> 668 /// <returns></returns>
645 public static string[] GetPreferredImageTypes(string accept) 669 public static string[] GetPreferredImageTypes(string accept)
646 { 670 {
647
648 if (accept == null || accept == string.Empty) 671 if (accept == null || accept == string.Empty)
649 return new string[0]; 672 return new string[0];
650 673
@@ -703,13 +726,15 @@ namespace OpenSim.Framework
703 int maxConnections) 726 int maxConnections)
704 { 727 {
705 int reqnum = WebUtil.RequestNumber++; 728 int reqnum = WebUtil.RequestNumber++;
706 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 729
730 if (WebUtil.DebugLevel >= 3)
731 m_log.DebugFormat(
732 "[WEB UTIL]: HTTP OUT {0} AsynchronousRequestObject {1} {2}",
733 reqnum, verb, requestUrl);
707 734
708 int tickstart = Util.EnvironmentTickCount(); 735 int tickstart = Util.EnvironmentTickCount();
709 int tickdata = 0; 736 int tickdata = 0;
710 737
711 // m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl);
712
713 Type type = typeof(TRequest); 738 Type type = typeof(TRequest);
714 739
715 WebRequest request = WebRequest.Create(requestUrl); 740 WebRequest request = WebRequest.Create(requestUrl);
@@ -866,7 +891,7 @@ namespace OpenSim.Framework
866 } 891 }
867 892
868 m_log.InfoFormat( 893 m_log.InfoFormat(
869 "[ASYNC REQUEST]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", 894 "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
870 reqnum, 895 reqnum,
871 verb, 896 verb,
872 requestUrl, 897 requestUrl,
@@ -874,6 +899,12 @@ namespace OpenSim.Framework
874 tickdata, 899 tickdata,
875 originalRequest); 900 originalRequest);
876 } 901 }
902 else if (WebUtil.DebugLevel >= 4)
903 {
904 m_log.DebugFormat(
905 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
906 reqnum, tickdiff, tickdata);
907 }
877 } 908 }
878 } 909 }
879 910
@@ -894,7 +925,11 @@ namespace OpenSim.Framework
894 public static string MakeRequest(string verb, string requestUrl, string obj) 925 public static string MakeRequest(string verb, string requestUrl, string obj)
895 { 926 {
896 int reqnum = WebUtil.RequestNumber++; 927 int reqnum = WebUtil.RequestNumber++;
897 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 928
929 if (WebUtil.DebugLevel >= 3)
930 m_log.DebugFormat(
931 "[WEB UTIL]: HTTP OUT {0} SynchronousRestForms {1} {2}",
932 reqnum, verb, requestUrl);
898 933
899 int tickstart = Util.EnvironmentTickCount(); 934 int tickstart = Util.EnvironmentTickCount();
900 int tickdata = 0; 935 int tickdata = 0;
@@ -979,13 +1014,17 @@ namespace OpenSim.Framework
979 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); 1014 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
980 if (tickdiff > WebUtil.LongCallTime) 1015 if (tickdiff > WebUtil.LongCallTime)
981 m_log.InfoFormat( 1016 m_log.InfoFormat(
982 "[FORMS]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", 1017 "[FORMS]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
983 reqnum, 1018 reqnum,
984 verb, 1019 verb,
985 requestUrl, 1020 requestUrl,
986 tickdiff, 1021 tickdiff,
987 tickdata, 1022 tickdata,
988 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); 1023 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
1024 else if (WebUtil.DebugLevel >= 4)
1025 m_log.DebugFormat(
1026 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1027 reqnum, tickdiff, tickdata);
989 1028
990 return respstring; 1029 return respstring;
991 } 1030 }
@@ -1020,7 +1059,11 @@ namespace OpenSim.Framework
1020 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout, int maxConnections) 1059 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout, int maxConnections)
1021 { 1060 {
1022 int reqnum = WebUtil.RequestNumber++; 1061 int reqnum = WebUtil.RequestNumber++;
1023 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 1062
1063 if (WebUtil.DebugLevel >= 3)
1064 m_log.DebugFormat(
1065 "[WEB UTIL]: HTTP OUT {0} SynchronousRestObject {1} {2}",
1066 reqnum, verb, requestUrl);
1024 1067
1025 int tickstart = Util.EnvironmentTickCount(); 1068 int tickstart = Util.EnvironmentTickCount();
1026 int tickdata = 0; 1069 int tickdata = 0;
@@ -1139,7 +1182,7 @@ namespace OpenSim.Framework
1139 } 1182 }
1140 1183
1141 m_log.InfoFormat( 1184 m_log.InfoFormat(
1142 "[SynchronousRestObjectRequester]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", 1185 "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}",
1143 reqnum, 1186 reqnum,
1144 verb, 1187 verb,
1145 requestUrl, 1188 requestUrl,
@@ -1147,6 +1190,12 @@ namespace OpenSim.Framework
1147 tickdata, 1190 tickdata,
1148 originalRequest); 1191 originalRequest);
1149 } 1192 }
1193 else if (WebUtil.DebugLevel >= 4)
1194 {
1195 m_log.DebugFormat(
1196 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1197 reqnum, tickdiff, tickdata);
1198 }
1150 1199
1151 return deserial; 1200 return deserial;
1152 } 1201 }
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 951afd7..5d41c1c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -933,6 +933,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
933 933
934 InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID); 934 InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID);
935 item = m_scene.InventoryService.GetItem(item); 935 item = m_scene.InventoryService.GetItem(item);
936 if (item == null)
937 return;
938
936 bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID); 939 bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID);
937 if (changed && m_scene.AvatarFactory != null) 940 if (changed && m_scene.AvatarFactory != null)
938 { 941 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
index 48f3a23..b7a1169 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
@@ -62,7 +62,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
62 public class AttachmentsModuleTests : OpenSimTestCase 62 public class AttachmentsModuleTests : OpenSimTestCase
63 { 63 {
64 private AutoResetEvent m_chatEvent = new AutoResetEvent(false); 64 private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
65 private OSChatMessage m_osChatMessageReceived; 65// private OSChatMessage m_osChatMessageReceived;
66 66
67 [TestFixtureSetUp] 67 [TestFixtureSetUp]
68 public void FixtureInit() 68 public void FixtureInit()
@@ -83,7 +83,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
83 { 83 {
84// Console.WriteLine("Got chat [{0}]", oscm.Message); 84// Console.WriteLine("Got chat [{0}]", oscm.Message);
85 85
86 m_osChatMessageReceived = oscm; 86// m_osChatMessageReceived = oscm;
87 m_chatEvent.Set(); 87 m_chatEvent.Set();
88 } 88 }
89 89
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 4c786ff..a1d8d5a 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -150,6 +150,34 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
150 150
151 if (m_Enabled) 151 if (m_Enabled)
152 scene.RegisterModuleInterface<IUserAgentVerificationModule>(this); 152 scene.RegisterModuleInterface<IUserAgentVerificationModule>(this);
153
154 scene.EventManager.OnIncomingSceneObject += OnIncomingSceneObject;
155 }
156
157 void OnIncomingSceneObject(SceneObjectGroup so)
158 {
159 if (!so.IsAttachment)
160 return;
161
162 if (so.Scene.UserManagementModule.IsLocalGridUser(so.AttachedAvatar))
163 return;
164
165 // foreign user
166 AgentCircuitData aCircuit = so.Scene.AuthenticateHandler.GetAgentCircuitData(so.AttachedAvatar);
167 if (aCircuit != null && (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0)
168 {
169 if (aCircuit.ServiceURLs != null && aCircuit.ServiceURLs.ContainsKey("AssetServerURI"))
170 {
171 string url = aCircuit.ServiceURLs["AssetServerURI"].ToString();
172 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Incoming attachement {0} for HG user {1} with asset server {2}", so.Name, so.AttachedAvatar, url);
173 Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>();
174 HGUuidGatherer uuidGatherer = new HGUuidGatherer(so.Scene.AssetService, url);
175 uuidGatherer.GatherAssetUuids(so, ids);
176
177 foreach (KeyValuePair<UUID, AssetType> kvp in ids)
178 uuidGatherer.FetchAsset(kvp.Key);
179 }
180 }
153 } 181 }
154 182
155 protected override void OnNewClient(IClientAPI client) 183 protected override void OnNewClient(IClientAPI client)
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
index eaadc1b..6f62856 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
@@ -71,19 +71,19 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
71 71
72 #region Internal functions 72 #region Internal functions
73 73
74 public AssetBase FetchAsset(string url, UUID assetID) 74 public AssetMetadata FetchMetadata(string url, UUID assetID)
75 { 75 {
76 if (!url.EndsWith("/") && !url.EndsWith("=")) 76 if (!url.EndsWith("/") && !url.EndsWith("="))
77 url = url + "/"; 77 url = url + "/";
78 78
79 AssetBase asset = m_scene.AssetService.Get(url + assetID.ToString()); 79 AssetMetadata meta = m_scene.AssetService.GetMetadata(url + assetID.ToString());
80 80
81 if (asset != null) 81 if (meta != null)
82 { 82 m_log.DebugFormat("[HG ASSET MAPPER]: Fetched metadata for asset {0} of type {1} from {2} ", assetID, meta.Type, url);
83 m_log.DebugFormat("[HG ASSET MAPPER]: Copied asset {0} from {1} to local asset server. ", asset.ID, url); 83 else
84 return asset; 84 m_log.DebugFormat("[HG ASSET MAPPER]: Unable to fetched metadata for asset {0} from {1} ", assetID, url);
85 } 85
86 return null; 86 return meta;
87 } 87 }
88 88
89 public bool PostAsset(string url, AssetBase asset) 89 public bool PostAsset(string url, AssetBase asset)
@@ -93,6 +93,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
93 if (!url.EndsWith("/") && !url.EndsWith("=")) 93 if (!url.EndsWith("/") && !url.EndsWith("="))
94 url = url + "/"; 94 url = url + "/";
95 95
96 bool success = true;
96 // See long comment in AssetCache.AddAsset 97 // See long comment in AssetCache.AddAsset
97 if (!asset.Temporary || asset.Local) 98 if (!asset.Temporary || asset.Local)
98 { 99 {
@@ -103,14 +104,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
103 // not having a global naming infrastructure 104 // not having a global naming infrastructure
104 AssetBase asset1 = new AssetBase(asset.FullID, asset.Name, asset.Type, asset.Metadata.CreatorID); 105 AssetBase asset1 = new AssetBase(asset.FullID, asset.Name, asset.Type, asset.Metadata.CreatorID);
105 Copy(asset, asset1); 106 Copy(asset, asset1);
106 try 107 asset1.ID = url + asset.ID;
107 {
108 asset1.ID = url + asset.ID;
109 }
110 catch
111 {
112 m_log.Warn("[HG ASSET MAPPER]: Oops.");
113 }
114 108
115 AdjustIdentifiers(asset1.Metadata); 109 AdjustIdentifiers(asset1.Metadata);
116 if (asset1.Metadata.Type == (sbyte)AssetType.Object) 110 if (asset1.Metadata.Type == (sbyte)AssetType.Object)
@@ -118,11 +112,17 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
118 else 112 else
119 asset1.Data = asset.Data; 113 asset1.Data = asset.Data;
120 114
121 m_scene.AssetService.Store(asset1); 115 string id = m_scene.AssetService.Store(asset1);
122 m_log.DebugFormat("[HG ASSET MAPPER]: Posted copy of asset {0} from local asset server to {1}", asset1.ID, url); 116 if (id == string.Empty)
117 {
118 m_log.DebugFormat("[HG ASSET MAPPER]: Asset server {0} did not accept {1}", url, asset.ID);
119 success = false;
120 }
121 else
122 m_log.DebugFormat("[HG ASSET MAPPER]: Posted copy of asset {0} from local asset server to {1}", asset1.ID, url);
123 } 123 }
124 return true; 124 return success;
125 } 125 }
126 else 126 else
127 m_log.Warn("[HG ASSET MAPPER]: Tried to post asset to remote server, but asset not in local cache."); 127 m_log.Warn("[HG ASSET MAPPER]: Tried to post asset to remote server, but asset not in local cache.");
128 128
@@ -222,28 +222,19 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
222 222
223 public void Get(UUID assetID, UUID ownerID, string userAssetURL) 223 public void Get(UUID assetID, UUID ownerID, string userAssetURL)
224 { 224 {
225 // Get the item from the remote asset server onto the local AssetCache 225 // Get the item from the remote asset server onto the local AssetService
226 // and place an entry in m_assetMap
227 226
228 m_log.Debug("[HG ASSET MAPPER]: Fetching object " + assetID + " from asset server " + userAssetURL); 227 AssetMetadata meta = FetchMetadata(userAssetURL, assetID);
229 AssetBase asset = FetchAsset(userAssetURL, assetID); 228 if (meta == null)
229 return;
230 230
231 if (asset != null) 231 // The act of gathering UUIDs downloads the assets from the remote server
232 { 232 Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>();
233 // OK, now fetch the inside. 233 HGUuidGatherer uuidGatherer = new HGUuidGatherer(m_scene.AssetService, userAssetURL);
234 Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>(); 234 uuidGatherer.GatherAssetUuids(assetID, (AssetType)meta.Type, ids);
235 HGUuidGatherer uuidGatherer = new HGUuidGatherer(this, m_scene.AssetService, userAssetURL);
236 uuidGatherer.GatherAssetUuids(asset.FullID, (AssetType)asset.Type, ids);
237 if (ids.ContainsKey(assetID))
238 ids.Remove(assetID);
239 foreach (UUID uuid in ids.Keys)
240 FetchAsset(userAssetURL, uuid);
241 235
242 m_log.DebugFormat("[HG ASSET MAPPER]: Successfully fetched asset {0} from asset server {1}", asset.ID, userAssetURL); 236 m_log.DebugFormat("[HG ASSET MAPPER]: Successfully fetched asset {0} from asset server {1}", assetID, userAssetURL);
243 237
244 }
245 else
246 m_log.Warn("[HG ASSET MAPPER]: Could not fetch asset from remote asset server " + userAssetURL);
247 } 238 }
248 239
249 240
@@ -257,19 +248,23 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
257 if (asset != null) 248 if (asset != null)
258 { 249 {
259 Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>(); 250 Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>();
260 HGUuidGatherer uuidGatherer = new HGUuidGatherer(this, m_scene.AssetService, string.Empty); 251 HGUuidGatherer uuidGatherer = new HGUuidGatherer(m_scene.AssetService, string.Empty);
261 uuidGatherer.GatherAssetUuids(asset.FullID, (AssetType)asset.Type, ids); 252 uuidGatherer.GatherAssetUuids(asset.FullID, (AssetType)asset.Type, ids);
253 bool success = false;
262 foreach (UUID uuid in ids.Keys) 254 foreach (UUID uuid in ids.Keys)
263 { 255 {
264 asset = m_scene.AssetService.Get(uuid.ToString()); 256 asset = m_scene.AssetService.Get(uuid.ToString());
265 if (asset == null) 257 if (asset == null)
266 m_log.DebugFormat("[HG ASSET MAPPER]: Could not find asset {0}", uuid); 258 m_log.DebugFormat("[HG ASSET MAPPER]: Could not find asset {0}", uuid);
267 else 259 else
268 PostAsset(userAssetURL, asset); 260 success = PostAsset(userAssetURL, asset);
269 } 261 }
270 262
271 // maybe all pieces got there... 263 // maybe all pieces got there...
272 m_log.DebugFormat("[HG ASSET MAPPER]: Successfully posted item {0} to asset server {1}", assetID, userAssetURL); 264 if (!success)
265 m_log.DebugFormat("[HG ASSET MAPPER]: Problems posting item {0} to asset server {1}", assetID, userAssetURL);
266 else
267 m_log.DebugFormat("[HG ASSET MAPPER]: Successfully posted item {0} to asset server {1}", assetID, userAssetURL);
273 268
274 } 269 }
275 else 270 else
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
index a0cad40..80257bd 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
@@ -263,8 +263,13 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
263 //} 263 //}
264 264
265 // OK, we're done fetching. Pass it up to the default RezObject 265 // OK, we're done fetching. Pass it up to the default RezObject
266 return base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, 266 SceneObjectGroup sog = base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
267 RezSelected, RemoveItem, fromTaskID, attachment); 267 RezSelected, RemoveItem, fromTaskID, attachment);
268
269 if (sog == null)
270 remoteClient.SendAgentAlertMessage("Unable to rez: problem accessing inventory or locating assets", false);
271
272 return sog;
268 273
269 } 274 }
270 275
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGUuidGatherer.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGUuidGatherer.cs
deleted file mode 100644
index fcb544f..0000000
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGUuidGatherer.cs
+++ /dev/null
@@ -1,57 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes;
33using OpenSim.Services.Interfaces;
34using OpenMetaverse;
35
36namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
37{
38 public class HGUuidGatherer : UuidGatherer
39 {
40 protected string m_assetServerURL;
41 protected HGAssetMapper m_assetMapper;
42
43 public HGUuidGatherer(HGAssetMapper assMap, IAssetService assetCache, string assetServerURL) : base(assetCache)
44 {
45 m_assetMapper = assMap;
46 m_assetServerURL = assetServerURL;
47 }
48
49 protected override AssetBase GetAsset(UUID uuid)
50 {
51 if (string.Empty == m_assetServerURL)
52 return m_assetCache.Get(uuid.ToString());
53 else
54 return m_assetMapper.FetchAsset(m_assetServerURL, uuid);
55 }
56 }
57}
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 98396ff..98396ff 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
index 008465f..1e1c7d0 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
@@ -56,6 +56,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
56 56
57 private bool m_Enabled = false; 57 private bool m_Enabled = false;
58 58
59 private AssetPermissions m_AssetPerms;
60
59 public Type ReplaceableInterface 61 public Type ReplaceableInterface
60 { 62 {
61 get { return null; } 63 get { return null; }
@@ -128,6 +130,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
128 if (m_LocalAssetServiceURI != string.Empty) 130 if (m_LocalAssetServiceURI != string.Empty)
129 m_LocalAssetServiceURI = m_LocalAssetServiceURI.Trim('/'); 131 m_LocalAssetServiceURI = m_LocalAssetServiceURI.Trim('/');
130 132
133 IConfig hgConfig = source.Configs["HGAssetService"];
134 m_AssetPerms = new AssetPermissions(hgConfig); // it's ok if arg is null
135
131 m_Enabled = true; 136 m_Enabled = true;
132 m_log.Info("[HG ASSET CONNECTOR]: HG asset broker enabled"); 137 m_log.Info("[HG ASSET CONNECTOR]: HG asset broker enabled");
133 } 138 }
@@ -206,14 +211,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
206 asset = m_HGService.Get(id); 211 asset = m_HGService.Get(id);
207 if (asset != null) 212 if (asset != null)
208 { 213 {
209 // Now store it locally 214 // Now store it locally, if allowed
210 // For now, let me just do it for textures and scripts 215 if (m_AssetPerms.AllowedImport(asset.Type))
211 if (((AssetType)asset.Type == AssetType.Texture) ||
212 ((AssetType)asset.Type == AssetType.LSLBytecode) ||
213 ((AssetType)asset.Type == AssetType.LSLText))
214 {
215 m_GridService.Store(asset); 216 m_GridService.Store(asset);
216 } 217 else
218 return null;
217 } 219 }
218 } 220 }
219 else 221 else
@@ -328,7 +330,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
328 330
329 string id = string.Empty; 331 string id = string.Empty;
330 if (IsHG(asset.ID)) 332 if (IsHG(asset.ID))
331 id = m_HGService.Store(asset); 333 {
334 if (m_AssetPerms.AllowedExport(asset.Type))
335 id = m_HGService.Store(asset);
336 else
337 return String.Empty;
338 }
332 else 339 else
333 id = m_GridService.Store(asset); 340 id = m_GridService.Store(asset);
334 341
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs
index 57ae549..4338133 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs
@@ -46,8 +46,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests
46 public class GridConnectorsTests : OpenSimTestCase 46 public class GridConnectorsTests : OpenSimTestCase
47 { 47 {
48 LocalGridServicesConnector m_LocalConnector; 48 LocalGridServicesConnector m_LocalConnector;
49 private void SetUp() 49
50 [SetUp]
51 public override void SetUp()
50 { 52 {
53 base.SetUp();
54
51 IConfigSource config = new IniConfigSource(); 55 IConfigSource config = new IniConfigSource();
52 config.AddConfig("Modules"); 56 config.AddConfig("Modules");
53 config.AddConfig("GridService"); 57 config.AddConfig("GridService");
@@ -71,8 +75,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests
71 TestHelpers.InMethod(); 75 TestHelpers.InMethod();
72// log4net.Config.XmlConfigurator.Configure(); 76// log4net.Config.XmlConfigurator.Configure();
73 77
74 SetUp();
75
76 // Create 4 regions 78 // Create 4 regions
77 GridRegion r1 = new GridRegion(); 79 GridRegion r1 = new GridRegion();
78 r1.RegionName = "Test Region 1"; 80 r1.RegionName = "Test Region 1";
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
index 0a30905..82f49b0 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
@@ -65,8 +65,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
65 protected TaskInventoryItem m_soundItem; 65 protected TaskInventoryItem m_soundItem;
66 66
67 [SetUp] 67 [SetUp]
68 public void SetUp() 68 public override void SetUp()
69 { 69 {
70 base.SetUp();
71
72 // FIXME: Do something about this - relying on statics in unit tests causes trouble sooner or later
70 new SceneManager(); 73 new SceneManager();
71 74
72 m_archiverModule = new ArchiverModule(); 75 m_archiverModule = new ArchiverModule();
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index e257b57..67d218b 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -188,6 +188,22 @@ namespace OpenSim.Region.Framework.Scenes
188 188
189 public delegate void OnPluginConsoleDelegate(string[] args); 189 public delegate void OnPluginConsoleDelegate(string[] args);
190 190
191 /// <summary>
192 /// Triggered after <see cref="OpenSim.IApplicationPlugin.PostInitialise"/>
193 /// has been called for all <see cref="OpenSim.IApplicationPlugin"/>
194 /// loaded via <see cref="OpenSim.OpenSimBase.LoadPlugins"/>.
195 /// Handlers for this event are typically used to parse the arguments
196 /// from <see cref="OnPluginConsoleDelegate"/> in order to process or
197 /// filter the arguments and pass them onto <see cref="OpenSim.Region.CoreModules.Framework.InterfaceCommander.Commander.ProcessConsoleCommand"/>
198 /// </summary>
199 /// <remarks>
200 /// Triggered by <see cref="TriggerOnPluginConsole"/> in
201 /// <see cref="Scene.SendCommandToPlugins"/> via
202 /// <see cref="SceneManager.SendCommandToPluginModules"/> via
203 /// <see cref="OpenSim.OpenSimBase.HandleCommanderCommand"/> via
204 /// <see cref="OpenSim.OpenSimBase.AddPluginCommands"/> via
205 /// <see cref="OpenSim.OpenSimBase.StartupSpecific"/>
206 /// </remarks>
191 public event OnPluginConsoleDelegate OnPluginConsole; 207 public event OnPluginConsoleDelegate OnPluginConsole;
192 208
193 /// <summary> 209 /// <summary>
@@ -202,6 +218,18 @@ namespace OpenSim.Region.Framework.Scenes
202 218
203 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene); 219 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene);
204 220
221 /// <summary>
222 /// Triggered before the grunt work for adding a root agent to a
223 /// scene has been performed (resuming attachment scripts, physics,
224 /// animations etc.)
225 /// </summary>
226 /// <remarks>
227 /// Triggered before <see cref="OnMakeRootAgent"/>
228 /// by <see cref="TriggerSetRootAgentScene"/>
229 /// in <see cref="ScenePresence.MakeRootAgent"/>
230 /// via <see cref="Scene.AgentCrossing"/>
231 /// and <see cref="ScenePresence.CompleteMovement"/>
232 /// </remarks>
205 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; 233 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene;
206 234
207 /// <summary> 235 /// <summary>
@@ -226,13 +254,45 @@ namespace OpenSim.Region.Framework.Scenes
226 /// <summary> 254 /// <summary>
227 /// Fired when an object is touched/grabbed. 255 /// Fired when an object is touched/grabbed.
228 /// </summary> 256 /// </summary>
257 /// <remarks>
229 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of 258 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of
230 /// the root part. 259 /// the root part.
260 /// Triggerd in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabObject"/>
261 /// via <see cref="TriggerObjectGrab"/>
262 /// in <see cref="Scene.ProcessObjectGrab"/>
263 /// </remarks>
231 public event ObjectGrabDelegate OnObjectGrab; 264 public event ObjectGrabDelegate OnObjectGrab;
232 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); 265 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs);
233 266
267 /// <summary>
268 /// Triggered when an object is being touched/grabbed continuously.
269 /// </summary>
270 /// <remarks>
271 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabUpdate"/>
272 /// via <see cref="TriggerObjectGrabbing"/>
273 /// in <see cref="Scene.ProcessObjectGrabUpdate"/>
274 /// </remarks>
234 public event ObjectGrabDelegate OnObjectGrabbing; 275 public event ObjectGrabDelegate OnObjectGrabbing;
276
277 /// <summary>
278 /// Triggered when an object stops being touched/grabbed.
279 /// </summary>
280 /// <remarks>
281 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnDeGrabObject"/>
282 /// via <see cref="TriggerObjectDeGrab"/>
283 /// in <see cref="Scene.ProcessObjectDeGrab"/>
284 /// </remarks>
235 public event ObjectDeGrabDelegate OnObjectDeGrab; 285 public event ObjectDeGrabDelegate OnObjectDeGrab;
286
287 /// <summary>
288 /// Triggered when a script resets.
289 /// </summary>
290 /// <remarks>
291 /// Triggered by <see cref="TriggerScriptReset"/>
292 /// in <see cref="Scene.ProcessScriptReset"/>
293 /// via <see cref="OpenSim.Framework.IClientAPI.OnScriptReset"/>
294 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleScriptReset"/>
295 /// </remarks>
236 public event ScriptResetDelegate OnScriptReset; 296 public event ScriptResetDelegate OnScriptReset;
237 297
238 public event OnPermissionErrorDelegate OnPermissionError; 298 public event OnPermissionErrorDelegate OnPermissionError;
@@ -242,17 +302,50 @@ namespace OpenSim.Region.Framework.Scenes
242 /// </summary> 302 /// </summary>
243 /// <remarks> 303 /// <remarks>
244 /// Occurs after OnNewScript. 304 /// Occurs after OnNewScript.
305 /// Triggered by <see cref="TriggerRezScript"/>
306 /// in <see cref="SceneObjectPartInventory.CreateScriptInstance"/>
245 /// </remarks> 307 /// </remarks>
246 public event NewRezScript OnRezScript; 308 public event NewRezScript OnRezScript;
247 public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource); 309 public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource);
248 310
249 public delegate void RemoveScript(uint localID, UUID itemID); 311 public delegate void RemoveScript(uint localID, UUID itemID);
312
313 /// <summary>
314 /// Triggered when a script is removed from an object.
315 /// </summary>
316 /// <remarks>
317 /// Triggered by <see cref="TriggerRemoveScript"/>
318 /// in <see cref="Scene.RemoveTaskInventory"/>,
319 /// <see cref="Scene.CreateAgentInventoryItemFromTask"/>,
320 /// <see cref="SceneObjectPartInventory.RemoveScriptInstance"/>,
321 /// <see cref="SceneObjectPartInventory.RemoveInventoryItem"/>
322 /// </remarks>
250 public event RemoveScript OnRemoveScript; 323 public event RemoveScript OnRemoveScript;
251 324
252 public delegate void StartScript(uint localID, UUID itemID); 325 public delegate void StartScript(uint localID, UUID itemID);
326
327 /// <summary>
328 /// Triggered when a script starts.
329 /// </summary>
330 /// <remarks>
331 /// Triggered by <see cref="TriggerStartScript"/>
332 /// in <see cref="Scene.SetScriptRunning"/>
333 /// via <see cref="OpenSim.Framework.IClientAPI.OnSetScriptRunning"/>,
334 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.HandleSetScriptRunning"/>
335 /// </remarks>
253 public event StartScript OnStartScript; 336 public event StartScript OnStartScript;
254 337
255 public delegate void StopScript(uint localID, UUID itemID); 338 public delegate void StopScript(uint localID, UUID itemID);
339
340 /// <summary>
341 /// Triggered when a script stops.
342 /// </summary>
343 /// <remarks>
344 /// Triggered by <see cref="TriggerStopScript"/>,
345 /// in <see cref="SceneObjectPartInventory.CreateScriptInstance"/>,
346 /// <see cref="SceneObjectPartInventory.StopScriptInstance"/>,
347 /// <see cref="Scene.SetScriptRunning"/>
348 /// </remarks>
256 public event StopScript OnStopScript; 349 public event StopScript OnStopScript;
257 350
258 public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta); 351 public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta);
@@ -303,6 +396,9 @@ namespace OpenSim.Region.Framework.Scenes
303 /// </summary> 396 /// </summary>
304 /// <remarks> 397 /// <remarks>
305 /// Occurs before OnRezScript 398 /// Occurs before OnRezScript
399 /// Triggered by <see cref="TriggerNewScript"/>
400 /// in <see cref="Scene.RezScriptFromAgentInventory"/>,
401 /// <see cref="Scene.RezNewScript"/>
306 /// </remarks> 402 /// </remarks>
307 public event NewScript OnNewScript; 403 public event NewScript OnNewScript;
308 404
@@ -337,6 +433,12 @@ namespace OpenSim.Region.Framework.Scenes
337 /// </summary> 433 /// </summary>
338 /// <remarks> 434 /// <remarks>
339 /// Triggered after the scene receives a client's upload of an updated script and has stored it in an asset. 435 /// Triggered after the scene receives a client's upload of an updated script and has stored it in an asset.
436 /// Triggered by <see cref="TriggerUpdateScript"/>
437 /// in <see cref="Scene.CapsUpdateTaskInventoryScriptAsset"/>
438 /// via <see cref="Scene.CapsUpdateTaskInventoryScriptAsset"/>
439 /// via <see cref="OpenSim.Region.ClientStack.Linden.BunchOfCaps.TaskScriptUpdated"/>
440 /// via <see cref="OpenSim.Region.ClientStack.Linden.TaskInventoryScriptUpdater.OnUpLoad"/>
441 /// via <see cref="OpenSim.Region.ClientStack.Linden.TaskInventoryScriptUpdater.uploaderCaps"/>
340 /// </remarks> 442 /// </remarks>
341 public event UpdateScript OnUpdateScript; 443 public event UpdateScript OnUpdateScript;
342 444
@@ -395,15 +497,36 @@ namespace OpenSim.Region.Framework.Scenes
395 public event ScriptColliding OnScriptLandColliderEnd; 497 public event ScriptColliding OnScriptLandColliderEnd;
396 498
397 public delegate void OnMakeChildAgentDelegate(ScenePresence presence); 499 public delegate void OnMakeChildAgentDelegate(ScenePresence presence);
500
501 /// <summary>
502 /// Triggered when an agent has been made a child agent of a scene.
503 /// </summary>
504 /// <remarks>
505 /// Triggered by <see cref="TriggerOnMakeChildAgent"/>
506 /// in <see cref="ScenePresence.MakeChildAgent"/>
507 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CrossAgentToNewRegionAsync"/>,
508 /// <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>,
509 /// <see cref="OpenSim.Region.CoreModules.InterGrid.KillAUser.ShutdownNoLogout"/>
510 /// </remarks>
398 public event OnMakeChildAgentDelegate OnMakeChildAgent; 511 public event OnMakeChildAgentDelegate OnMakeChildAgent;
399 512
400 public delegate void OnSaveNewWindlightProfileDelegate(); 513 public delegate void OnSaveNewWindlightProfileDelegate();
401 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user); 514 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
402 515
403 /// <summary> 516 /// <summary>
517 /// Triggered after the grunt work for adding a root agent to a
518 /// scene has been performed (resuming attachment scripts, physics,
519 /// animations etc.)
520 /// </summary>
521 /// <remarks>
404 /// This event is on the critical path for transferring an avatar from one region to another. Try and do 522 /// This event is on the critical path for transferring an avatar from one region to another. Try and do
405 /// as little work on this event as possible, or do work asynchronously. 523 /// as little work on this event as possible, or do work asynchronously.
406 /// </summary> 524 /// Triggered after <see cref="OnSetRootAgentScene"/>
525 /// by <see cref="TriggerOnMakeRootAgent"/>
526 /// in <see cref="ScenePresence.MakeRootAgent"/>
527 /// via <see cref="Scene.AgentCrossing"/>
528 /// and <see cref="ScenePresence.CompleteMovement"/>
529 /// </remarks>
407 public event Action<ScenePresence> OnMakeRootAgent; 530 public event Action<ScenePresence> OnMakeRootAgent;
408 531
409 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted; 532 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
@@ -429,9 +552,10 @@ namespace OpenSim.Region.Framework.Scenes
429 public event AvatarKillData OnAvatarKilled; 552 public event AvatarKillData OnAvatarKilled;
430 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar); 553 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar);
431 554
432// public delegate void ScriptTimerEvent(uint localID, double timerinterval); 555 /*
433 556 public delegate void ScriptTimerEvent(uint localID, double timerinterval);
434// public event ScriptTimerEvent OnScriptTimerEvent; 557 public event ScriptTimerEvent OnScriptTimerEvent;
558 */
435 559
436 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour); 560 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour);
437 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); 561 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID);
@@ -441,12 +565,27 @@ namespace OpenSim.Region.Framework.Scenes
441 /// <summary> 565 /// <summary>
442 /// Triggered when an object is added to the scene. 566 /// Triggered when an object is added to the scene.
443 /// </summary> 567 /// </summary>
568 /// <remarks>
569 /// Triggered by <see cref="TriggerObjectAddedToScene"/>
570 /// in <see cref="Scene.AddNewSceneObject"/>,
571 /// <see cref="Scene.DuplicateObject"/>,
572 /// <see cref="Scene.doObjectDuplicateOnRay"/>
573 /// </remarks>
444 public event Action<SceneObjectGroup> OnObjectAddedToScene; 574 public event Action<SceneObjectGroup> OnObjectAddedToScene;
445 575
446 /// <summary> 576 /// <summary>
447 /// Triggered when an object is removed from the scene. 577 /// Delegate for <see cref="OnObjectBeingRemovedFromScene"/>
448 /// </summary> 578 /// </summary>
579 /// <param name="obj">The object being removed from the scene</param>
449 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); 580 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj);
581
582 /// <summary>
583 /// Triggered when an object is removed from the scene.
584 /// </summary>
585 /// <remarks>
586 /// Triggered by <see cref="TriggerObjectBeingRemovedFromScene"/>
587 /// in <see cref="Scene.DeleteSceneObject"/>
588 /// </remarks>
450 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; 589 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene;
451 590
452 public delegate void NoticeNoLandDataFromStorage(); 591 public delegate void NoticeNoLandDataFromStorage();
@@ -632,9 +771,28 @@ namespace OpenSim.Region.Framework.Scenes
632 public event PrimsLoaded OnPrimsLoaded; 771 public event PrimsLoaded OnPrimsLoaded;
633 772
634 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout); 773 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout);
774
775 /// <summary>
776 /// Triggered when a teleport starts
777 /// </summary>
778 /// <remarks>
779 /// Triggered by <see cref="TriggerTeleportStart"/>
780 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CreateAgent"/>
781 /// and <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.HGEntityTransferModule.CreateAgent"/>
782 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
783 /// </remarks>
635 public event TeleportStart OnTeleportStart; 784 public event TeleportStart OnTeleportStart;
636 785
637 public delegate void TeleportFail(IClientAPI client, bool gridLogout); 786 public delegate void TeleportFail(IClientAPI client, bool gridLogout);
787
788 /// <summary>
789 /// Trigered when a teleport fails.
790 /// </summary>
791 /// <remarks>
792 /// Triggered by <see cref="TriggerTeleportFail"/>
793 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.Fail"/>
794 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
795 /// </remarks>
638 public event TeleportFail OnTeleportFail; 796 public event TeleportFail OnTeleportFail;
639 797
640 public class MoneyTransferArgs : EventArgs 798 public class MoneyTransferArgs : EventArgs
@@ -642,7 +800,9 @@ namespace OpenSim.Region.Framework.Scenes
642 public UUID sender; 800 public UUID sender;
643 public UUID receiver; 801 public UUID receiver;
644 802
645 // Always false. The SL protocol sucks. 803 /// <summary>
804 /// Always false. The SL protocol sucks.
805 /// </summary>
646 public bool authenticated = false; 806 public bool authenticated = false;
647 807
648 public int amount; 808 public int amount;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index ee5f6df..129bf09 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.Scenes
106 /// <summary> 106 /// <summary>
107 /// Minimum value of the size of a non-physical prim in each axis 107 /// Minimum value of the size of a non-physical prim in each axis
108 /// </summary> 108 /// </summary>
109 public float m_minNonphys = 0.01f; 109 public float m_minNonphys = 0.001f;
110 110
111 /// <summary> 111 /// <summary>
112 /// Maximum value of the size of a non-physical prim in each axis 112 /// Maximum value of the size of a non-physical prim in each axis
@@ -769,13 +769,13 @@ namespace OpenSim.Region.Framework.Scenes
769 PhysicalPrims = startupConfig.GetBoolean("physical_prim", true); 769 PhysicalPrims = startupConfig.GetBoolean("physical_prim", true);
770 CollidablePrims = startupConfig.GetBoolean("collidable_prim", true); 770 CollidablePrims = startupConfig.GetBoolean("collidable_prim", true);
771 771
772 m_minNonphys = startupConfig.GetFloat("NonphysicalPrimMin", m_minNonphys); 772 m_minNonphys = startupConfig.GetFloat("NonPhysicalPrimMin", m_minNonphys);
773 if (RegionInfo.NonphysPrimMin > 0) 773 if (RegionInfo.NonphysPrimMin > 0)
774 { 774 {
775 m_minNonphys = RegionInfo.NonphysPrimMin; 775 m_minNonphys = RegionInfo.NonphysPrimMin;
776 } 776 }
777 777
778 m_maxNonphys = startupConfig.GetFloat("NonphysicalPrimMax", m_maxNonphys); 778 m_maxNonphys = startupConfig.GetFloat("NonPhysicalPrimMax", m_maxNonphys);
779 if (RegionInfo.NonphysPrimMax > 0) 779 if (RegionInfo.NonphysPrimMax > 0)
780 { 780 {
781 m_maxNonphys = RegionInfo.NonphysPrimMax; 781 m_maxNonphys = RegionInfo.NonphysPrimMax;
@@ -895,6 +895,8 @@ namespace OpenSim.Region.Framework.Scenes
895 } 895 }
896 896
897 // FIXME: Ultimately this should be in a module. 897 // FIXME: Ultimately this should be in a module.
898 SendPeriodicAppearanceUpdates = true;
899
898 IConfig appearanceConfig = m_config.Configs["Appearance"]; 900 IConfig appearanceConfig = m_config.Configs["Appearance"];
899 if (appearanceConfig != null) 901 if (appearanceConfig != null)
900 { 902 {
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 411e421..b5ef7b0 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -52,26 +52,23 @@ namespace OpenSim.Region.Framework.Scenes
52 public class UuidGatherer 52 public class UuidGatherer
53 { 53 {
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55
56 /// <summary>
57 /// Asset cache used for gathering assets
58 /// </summary>
59 protected IAssetService m_assetCache;
60
61 /// <summary>
62 /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate
63 /// asset was found by the asset service.
64 /// </summary>
65 private AssetBase m_requestedObjectAsset;
66 55
67 /// <summary> 56 protected IAssetService m_assetService;
68 /// Signal whether we are currently waiting for the asset service to deliver an asset. 57
69 /// </summary> 58// /// <summary>
70 private bool m_waitingForObjectAsset; 59// /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate
60// /// asset was found by the asset service.
61// /// </summary>
62// private AssetBase m_requestedObjectAsset;
63//
64// /// <summary>
65// /// Signal whether we are currently waiting for the asset service to deliver an asset.
66// /// </summary>
67// private bool m_waitingForObjectAsset;
71 68
72 public UuidGatherer(IAssetService assetCache) 69 public UuidGatherer(IAssetService assetCache)
73 { 70 {
74 m_assetCache = assetCache; 71 m_assetService = assetCache;
75 } 72 }
76 73
77 /// <summary> 74 /// <summary>
@@ -191,18 +188,18 @@ namespace OpenSim.Region.Framework.Scenes
191 } 188 }
192 } 189 }
193 190
194 /// <summary> 191// /// <summary>
195 /// The callback made when we request the asset for an object from the asset service. 192// /// The callback made when we request the asset for an object from the asset service.
196 /// </summary> 193// /// </summary>
197 private void AssetReceived(string id, Object sender, AssetBase asset) 194// private void AssetReceived(string id, Object sender, AssetBase asset)
198 { 195// {
199 lock (this) 196// lock (this)
200 { 197// {
201 m_requestedObjectAsset = asset; 198// m_requestedObjectAsset = asset;
202 m_waitingForObjectAsset = false; 199// m_waitingForObjectAsset = false;
203 Monitor.Pulse(this); 200// Monitor.Pulse(this);
204 } 201// }
205 } 202// }
206 203
207 /// <summary> 204 /// <summary>
208 /// Get an asset synchronously, potentially using an asynchronous callback. If the 205 /// Get an asset synchronously, potentially using an asynchronous callback. If the
@@ -212,25 +209,29 @@ namespace OpenSim.Region.Framework.Scenes
212 /// <returns></returns> 209 /// <returns></returns>
213 protected virtual AssetBase GetAsset(UUID uuid) 210 protected virtual AssetBase GetAsset(UUID uuid)
214 { 211 {
215 m_waitingForObjectAsset = true; 212 return m_assetService.Get(uuid.ToString());
216 m_assetCache.Get(uuid.ToString(), this, AssetReceived);
217
218 // The asset cache callback can either
219 //
220 // 1. Complete on the same thread (if the asset is already in the cache) or
221 // 2. Come in via a different thread (if we need to go fetch it).
222 //
223 // The code below handles both these alternatives.
224 lock (this)
225 {
226 if (m_waitingForObjectAsset)
227 {
228 Monitor.Wait(this);
229 m_waitingForObjectAsset = false;
230 }
231 }
232 213
233 return m_requestedObjectAsset; 214 // XXX: Switching to do this synchronously where the call was async before but we always waited for it
215 // to complete anyway!
216// m_waitingForObjectAsset = true;
217// m_assetCache.Get(uuid.ToString(), this, AssetReceived);
218//
219// // The asset cache callback can either
220// //
221// // 1. Complete on the same thread (if the asset is already in the cache) or
222// // 2. Come in via a different thread (if we need to go fetch it).
223// //
224// // The code below handles both these alternatives.
225// lock (this)
226// {
227// if (m_waitingForObjectAsset)
228// {
229// Monitor.Wait(this);
230// m_waitingForObjectAsset = false;
231// }
232// }
233//
234// return m_requestedObjectAsset;
234 } 235 }
235 236
236 /// <summary> 237 /// <summary>
@@ -361,4 +362,47 @@ namespace OpenSim.Region.Framework.Scenes
361 } 362 }
362 } 363 }
363 } 364 }
365
366 public class HGUuidGatherer : UuidGatherer
367 {
368 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
369
370 protected string m_assetServerURL;
371
372 public HGUuidGatherer(IAssetService assetService, string assetServerURL)
373 : base(assetService)
374 {
375 m_assetServerURL = assetServerURL;
376 if (!m_assetServerURL.EndsWith("/") && !m_assetServerURL.EndsWith("="))
377 m_assetServerURL = m_assetServerURL + "/";
378 }
379
380 protected override AssetBase GetAsset(UUID uuid)
381 {
382 if (string.Empty == m_assetServerURL)
383 return base.GetAsset(uuid);
384 else
385 return FetchAsset(uuid);
386 }
387
388 public AssetBase FetchAsset(UUID assetID)
389 {
390
391 // Test if it's already here
392 AssetBase asset = m_assetService.Get(assetID.ToString());
393 if (asset == null)
394 {
395 // It's not, so fetch it from abroad
396 asset = m_assetService.Get(m_assetServerURL + assetID.ToString());
397 if (asset != null)
398 m_log.DebugFormat("[HGUUIDGatherer]: Copied asset {0} from {1} to local asset server", assetID, m_assetServerURL);
399 else
400 m_log.DebugFormat("[HGUUIDGatherer]: Failed to fetch asset {0} from {1}", assetID, m_assetServerURL);
401 }
402 //else
403 // m_log.DebugFormat("[HGUUIDGatherer]: Asset {0} from {1} was already here", assetID, m_assetServerURL);
404
405 return asset;
406 }
407 }
364} 408}
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
index ca956fb..a014798 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
@@ -231,12 +231,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
231 if (m_server == null || m_baseNick == null || m_ircChannel == null || m_user == null) 231 if (m_server == null || m_baseNick == null || m_ircChannel == null || m_user == null)
232 throw new Exception("Invalid connector configuration"); 232 throw new Exception("Invalid connector configuration");
233 233
234 // Generate an initial nickname if randomizing is enabled 234 // Generate an initial nickname
235 235
236 if (m_randomizeNick) 236 if (m_randomizeNick)
237 {
238 m_nick = m_baseNick + Util.RandomClass.Next(1, 99); 237 m_nick = m_baseNick + Util.RandomClass.Next(1, 99);
239 } 238 else
239 m_nick = m_baseNick;
240 240
241 m_log.InfoFormat("[IRC-Connector-{0}]: Initialization complete", idn); 241 m_log.InfoFormat("[IRC-Connector-{0}]: Initialization complete", idn);
242 242
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 9570669..8d06d83 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5871,27 +5871,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5871 /// Returns the index of the first occurrence of test 5871 /// Returns the index of the first occurrence of test
5872 /// in src. 5872 /// in src.
5873 /// </summary> 5873 /// </summary>
5874 5874 /// <param name="src">Source list</param>
5875 /// <param name="test">List to search for</param>
5876 /// <returns>
5877 /// The index number of the point in src where test was found if it was found.
5878 /// Otherwise returns -1
5879 /// </returns>
5875 public LSL_Integer llListFindList(LSL_List src, LSL_List test) 5880 public LSL_Integer llListFindList(LSL_List src, LSL_List test)
5876 { 5881 {
5877
5878 int index = -1; 5882 int index = -1;
5879 int length = src.Length - test.Length + 1; 5883 int length = src.Length - test.Length + 1;
5880 5884
5881 m_host.AddScriptLPS(1); 5885 m_host.AddScriptLPS(1);
5882 5886
5883 // If either list is empty, do not match 5887 // If either list is empty, do not match
5884
5885 if (src.Length != 0 && test.Length != 0) 5888 if (src.Length != 0 && test.Length != 0)
5886 { 5889 {
5887 for (int i = 0; i < length; i++) 5890 for (int i = 0; i < length; i++)
5888 { 5891 {
5889 if (src.Data[i].Equals(test.Data[0])) 5892 // Why this piece of insanity? This is because most script constants are C# value types (e.g. int)
5893 // rather than wrapped LSL types. Such a script constant does not have int.Equal(LSL_Integer) code
5894 // and so the comparison fails even if the LSL_Integer conceptually has the same value.
5895 // Therefore, here we test Equals on both the source and destination objects.
5896 // However, a future better approach may be use LSL struct script constants (e.g. LSL_Integer(1)).
5897 if (src.Data[i].Equals(test.Data[0]) || test.Data[0].Equals(src.Data[i]))
5890 { 5898 {
5891 int j; 5899 int j;
5892 for (j = 1; j < test.Length; j++) 5900 for (j = 1; j < test.Length; j++)
5893 if (!src.Data[i+j].Equals(test.Data[j])) 5901 if (!(src.Data[i+j].Equals(test.Data[j]) || test.Data[j].Equals(src.Data[i+j])))
5894 break; 5902 break;
5903
5895 if (j == test.Length) 5904 if (j == test.Length)
5896 { 5905 {
5897 index = i; 5906 index = i;
@@ -5902,19 +5911,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5902 } 5911 }
5903 5912
5904 return index; 5913 return index;
5905
5906 } 5914 }
5907 5915
5908 public LSL_String llGetObjectName() 5916 public LSL_String llGetObjectName()
5909 { 5917 {
5910 m_host.AddScriptLPS(1); 5918 m_host.AddScriptLPS(1);
5911 return m_host.Name!=null?m_host.Name:String.Empty; 5919 return m_host.Name !=null ? m_host.Name : String.Empty;
5912 } 5920 }
5913 5921
5914 public void llSetObjectName(string name) 5922 public void llSetObjectName(string name)
5915 { 5923 {
5916 m_host.AddScriptLPS(1); 5924 m_host.AddScriptLPS(1);
5917 m_host.Name = name!=null?name:String.Empty; 5925 m_host.Name = name != null ? name : String.Empty;
5918 } 5926 }
5919 5927
5920 public LSL_String llGetDate() 5928 public LSL_String llGetDate()
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs
new file mode 100644
index 0000000..dd23be8
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiListTests.cs
@@ -0,0 +1,134 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using NUnit.Framework;
31using OpenSim.Framework;
32using OpenSim.Tests.Common;
33using OpenSim.Region.ScriptEngine.Shared;
34using OpenSim.Region.Framework.Scenes;
35using Nini.Config;
36using OpenSim.Region.ScriptEngine.Shared.Api;
37using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
38using OpenMetaverse;
39using OpenSim.Tests.Common.Mock;
40
41using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
42using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
43using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
44using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
45
46namespace OpenSim.Region.ScriptEngine.Shared.Tests
47{
48 [TestFixture]
49 public class LSL_ApiListTests
50 {
51 private LSL_Api m_lslApi;
52
53 [SetUp]
54 public void SetUp()
55 {
56 IConfigSource initConfigSource = new IniConfigSource();
57 IConfig config = initConfigSource.AddConfig("XEngine");
58 config.Set("Enabled", "true");
59
60 Scene scene = new SceneHelpers().SetupScene();
61 SceneObjectPart part = SceneHelpers.AddSceneObject(scene).RootPart;
62
63 XEngine.XEngine engine = new XEngine.XEngine();
64 engine.Initialise(initConfigSource);
65 engine.AddRegion(scene);
66
67 m_lslApi = new LSL_Api();
68 m_lslApi.Initialize(engine, part, null);
69 }
70
71 [Test]
72 public void TestllListFindList()
73 {
74 TestHelpers.InMethod();
75
76 LSL_List src = new LSL_List(new LSL_Integer(1), new LSL_Integer(2), new LSL_Integer(3));
77
78 {
79 // Test for a single item that should be found
80 int result = m_lslApi.llListFindList(src, new LSL_List(new LSL_Integer(4)));
81 Assert.That(result, Is.EqualTo(-1));
82 }
83
84 {
85 // Test for a single item that should be found
86 int result = m_lslApi.llListFindList(src, new LSL_List(new LSL_Integer(2)));
87 Assert.That(result, Is.EqualTo(1));
88 }
89
90 {
91 // Test for a constant that should be found
92 int result = m_lslApi.llListFindList(src, new LSL_List(ScriptBaseClass.AGENT));
93 Assert.That(result, Is.EqualTo(0));
94 }
95
96 {
97 // Test for a list that should be found
98 int result = m_lslApi.llListFindList(src, new LSL_List(new LSL_Integer(2), new LSL_Integer(3)));
99 Assert.That(result, Is.EqualTo(1));
100 }
101
102 {
103 // Test for a single item not in the list
104 int result = m_lslApi.llListFindList(src, new LSL_List(new LSL_Integer(4)));
105 Assert.That(result, Is.EqualTo(-1));
106 }
107
108 {
109 // Test for something that should not be cast
110 int result = m_lslApi.llListFindList(src, new LSL_List(new LSL_String("4")));
111 Assert.That(result, Is.EqualTo(-1));
112 }
113
114 {
115 // Test for a list not in the list
116 int result
117 = m_lslApi.llListFindList(
118 src, new LSL_List(new LSL_Integer(2), new LSL_Integer(3), new LSL_Integer(4)));
119 Assert.That(result, Is.EqualTo(-1));
120 }
121
122 {
123 LSL_List srcWithConstants
124 = new LSL_List(new LSL_Integer(3), ScriptBaseClass.AGENT, ScriptBaseClass.OS_NPC_LAND_AT_TARGET);
125
126 // Test for constants that appears in the source list that should be found
127 int result
128 = m_lslApi.llListFindList(srcWithConstants, new LSL_List(new LSL_Integer(1), new LSL_Integer(2)));
129
130 Assert.That(result, Is.EqualTo(1));
131 }
132 }
133 }
134 } \ No newline at end of file
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 47d22b9..0f7d7c6 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -58,9 +58,11 @@ namespace OpenSim.Services.HypergridService
58 private static IUserAgentService m_UserAgentService; 58 private static IUserAgentService m_UserAgentService;
59 private static ISimulationService m_SimulationService; 59 private static ISimulationService m_SimulationService;
60 60
61 protected string m_AllowedClients = string.Empty; 61 private static string m_AllowedClients = string.Empty;
62 protected string m_DeniedClients = string.Empty; 62 private static string m_DeniedClients = string.Empty;
63 private static bool m_ForeignAgentsAllowed = true; 63 private static bool m_ForeignAgentsAllowed = true;
64 private static List<string> m_ForeignsAllowedExceptions = new List<string>();
65 private static List<string> m_ForeignsDisallowedExceptions = new List<string>();
64 66
65 private static UUID m_ScopeID; 67 private static UUID m_ScopeID;
66 private static bool m_AllowTeleportsToAnyRegion; 68 private static bool m_AllowTeleportsToAnyRegion;
@@ -113,6 +115,9 @@ namespace OpenSim.Services.HypergridService
113 m_DeniedClients = serverConfig.GetString("DeniedClients", string.Empty); 115 m_DeniedClients = serverConfig.GetString("DeniedClients", string.Empty);
114 m_ForeignAgentsAllowed = serverConfig.GetBoolean("ForeignAgentsAllowed", true); 116 m_ForeignAgentsAllowed = serverConfig.GetBoolean("ForeignAgentsAllowed", true);
115 117
118 LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_ForeignsAllowedExceptions);
119 LoadDomainExceptionsFromConfig(serverConfig, "DisallowExcept", m_ForeignsDisallowedExceptions);
120
116 if (m_GridService == null || m_PresenceService == null || m_SimulationService == null) 121 if (m_GridService == null || m_PresenceService == null || m_SimulationService == null)
117 throw new Exception("Unable to load a required plugin, Gatekeeper Service cannot function."); 122 throw new Exception("Unable to load a required plugin, Gatekeeper Service cannot function.");
118 123
@@ -125,6 +130,15 @@ namespace OpenSim.Services.HypergridService
125 { 130 {
126 } 131 }
127 132
133 protected void LoadDomainExceptionsFromConfig(IConfig config, string variable, List<string> exceptions)
134 {
135 string value = config.GetString(variable, string.Empty);
136 string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
137
138 foreach (string s in parts)
139 exceptions.Add(s.Trim());
140 }
141
128 public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason) 142 public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason)
129 { 143 {
130 regionID = UUID.Zero; 144 regionID = UUID.Zero;
@@ -260,14 +274,25 @@ namespace OpenSim.Services.HypergridService
260 m_log.DebugFormat("[GATEKEEPER SERVICE]: User is ok"); 274 m_log.DebugFormat("[GATEKEEPER SERVICE]: User is ok");
261 275
262 // 276 //
263 // Foreign agents allowed 277 // Foreign agents allowed? Exceptions?
264 // 278 //
265 if (account == null && !m_ForeignAgentsAllowed) 279 if (account == null)
266 { 280 {
267 reason = "Unauthorized"; 281 bool allowed = m_ForeignAgentsAllowed;
268 m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agents are not permitted {0} {1}. Refusing service.", 282
269 aCircuit.firstname, aCircuit.lastname); 283 if (m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsAllowedExceptions))
270 return false; 284 allowed = false;
285
286 if (!m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsDisallowedExceptions))
287 allowed = true;
288
289 if (!allowed)
290 {
291 reason = "Destination does not allow visitors from your world";
292 m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agents are not permitted {0} {1} @ {2}. Refusing service.",
293 aCircuit.firstname, aCircuit.lastname, aCircuit.ServiceURLs["HomeURI"]);
294 return false;
295 }
271 } 296 }
272 297
273 // May want to authorize 298 // May want to authorize
@@ -393,6 +418,27 @@ namespace OpenSim.Services.HypergridService
393 418
394 #region Misc 419 #region Misc
395 420
421 private bool IsException(AgentCircuitData aCircuit, List<string> exceptions)
422 {
423 bool exception = false;
424 if (exceptions.Count > 0) // we have exceptions
425 {
426 // Retrieve the visitor's origin
427 string userURL = aCircuit.ServiceURLs["HomeURI"].ToString();
428 if (!userURL.EndsWith("/"))
429 userURL += "/";
430
431 if (exceptions.Find(delegate(string s)
432 {
433 if (!s.EndsWith("/"))
434 s += "/";
435 return s == userURL;
436 }) != null)
437 exception = true;
438 }
439
440 return exception;
441 }
396 442
397 #endregion 443 #endregion
398 } 444 }
diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs
index db98166..84dec8d 100644
--- a/OpenSim/Services/HypergridService/HGAssetService.cs
+++ b/OpenSim/Services/HypergridService/HGAssetService.cs
@@ -58,6 +58,8 @@ namespace OpenSim.Services.HypergridService
58 58
59 private UserAccountCache m_Cache; 59 private UserAccountCache m_Cache;
60 60
61 private AssetPermissions m_AssetPerms;
62
61 public HGAssetService(IConfigSource config, string configName) : base(config, configName) 63 public HGAssetService(IConfigSource config, string configName) : base(config, configName)
62 { 64 {
63 m_log.Debug("[HGAsset Service]: Starting"); 65 m_log.Debug("[HGAsset Service]: Starting");
@@ -80,6 +82,10 @@ namespace OpenSim.Services.HypergridService
80 m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL); 82 m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL);
81 83
82 m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); 84 m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService);
85
86 // Permissions
87 m_AssetPerms = new AssetPermissions(assetConfig);
88
83 } 89 }
84 90
85 #region IAssetService overrides 91 #region IAssetService overrides
@@ -90,6 +96,9 @@ namespace OpenSim.Services.HypergridService
90 if (asset == null) 96 if (asset == null)
91 return null; 97 return null;
92 98
99 if (!m_AssetPerms.AllowedExport(asset.Type))
100 return null;
101
93 if (asset.Metadata.Type == (sbyte)AssetType.Object) 102 if (asset.Metadata.Type == (sbyte)AssetType.Object)
94 asset.Data = AdjustIdentifiers(asset.Data); ; 103 asset.Data = AdjustIdentifiers(asset.Data); ;
95 104
@@ -112,16 +121,27 @@ namespace OpenSim.Services.HypergridService
112 121
113 public override byte[] GetData(string id) 122 public override byte[] GetData(string id)
114 { 123 {
115 byte[] data = base.GetData(id); 124 AssetBase asset = Get(id);
125
126 if (asset == null)
127 return null;
116 128
117 if (data == null) 129 if (!m_AssetPerms.AllowedExport(asset.Type))
118 return null; 130 return null;
119 131
120 return AdjustIdentifiers(data); 132 return asset.Data;
121 } 133 }
122 134
123 //public virtual bool Get(string id, Object sender, AssetRetrieved handler) 135 //public virtual bool Get(string id, Object sender, AssetRetrieved handler)
124 136
137 public override string Store(AssetBase asset)
138 {
139 if (!m_AssetPerms.AllowedImport(asset.Type))
140 return string.Empty;
141
142 return base.Store(asset);
143 }
144
125 public override bool Delete(string id) 145 public override bool Delete(string id)
126 { 146 {
127 // NOGO 147 // NOGO
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index a49993c..56aafe6 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -77,6 +77,10 @@ namespace OpenSim.Services.HypergridService
77 77
78 protected static bool m_BypassClientVerification; 78 protected static bool m_BypassClientVerification;
79 79
80 private static Dictionary<int, bool> m_ForeignTripsAllowed = new Dictionary<int, bool>();
81 private static Dictionary<int, List<string>> m_TripsAllowedExceptions = new Dictionary<int, List<string>>();
82 private static Dictionary<int, List<string>> m_TripsDisallowedExceptions = new Dictionary<int, List<string>>();
83
80 public UserAgentService(IConfigSource config) : this(config, null) 84 public UserAgentService(IConfigSource config) : this(config, null)
81 { 85 {
82 } 86 }
@@ -121,6 +125,12 @@ namespace OpenSim.Services.HypergridService
121 m_PresenceService = ServerUtils.LoadPlugin<IPresenceService>(presenceService, args); 125 m_PresenceService = ServerUtils.LoadPlugin<IPresenceService>(presenceService, args);
122 m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(userAccountService, args); 126 m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(userAccountService, args);
123 127
128 m_LevelOutsideContacts = serverConfig.GetInt("LevelOutsideContacts", 0);
129
130 LoadTripPermissionsFromConfig(serverConfig, "ForeignTripsAllowed");
131 LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_TripsAllowedExceptions);
132 LoadDomainExceptionsFromConfig(serverConfig, "DisallowExcept", m_TripsDisallowedExceptions);
133
124 m_GridName = serverConfig.GetString("ExternalName", string.Empty); 134 m_GridName = serverConfig.GetString("ExternalName", string.Empty);
125 if (m_GridName == string.Empty) 135 if (m_GridName == string.Empty)
126 { 136 {
@@ -130,10 +140,43 @@ namespace OpenSim.Services.HypergridService
130 if (!m_GridName.EndsWith("/")) 140 if (!m_GridName.EndsWith("/"))
131 m_GridName = m_GridName + "/"; 141 m_GridName = m_GridName + "/";
132 142
133 m_LevelOutsideContacts = serverConfig.GetInt("LevelOutsideContacts", 0);
134 } 143 }
135 } 144 }
136 145
146 protected void LoadTripPermissionsFromConfig(IConfig config, string variable)
147 {
148 foreach (string keyName in config.GetKeys())
149 {
150 if (keyName.StartsWith(variable + "_Level_"))
151 {
152 int level = 0;
153 if (Int32.TryParse(keyName.Replace(variable + "_Level_", ""), out level))
154 m_ForeignTripsAllowed.Add(level, config.GetBoolean(keyName, true));
155 }
156 }
157 }
158
159 protected void LoadDomainExceptionsFromConfig(IConfig config, string variable, Dictionary<int, List<string>> exceptions)
160 {
161 foreach (string keyName in config.GetKeys())
162 {
163 if (keyName.StartsWith(variable + "_Level_"))
164 {
165 int level = 0;
166 if (Int32.TryParse(keyName.Replace(variable + "_Level_", ""), out level) && !exceptions.ContainsKey(level))
167 {
168 exceptions.Add(level, new List<string>());
169 string value = config.GetString(keyName, string.Empty);
170 string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
171
172 foreach (string s in parts)
173 exceptions[level].Add(s.Trim());
174 }
175 }
176 }
177 }
178
179
137 public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt) 180 public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt)
138 { 181 {
139 position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY; 182 position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY;
@@ -166,13 +209,39 @@ namespace OpenSim.Services.HypergridService
166 m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", 209 m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}",
167 agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()), gatekeeper.ServerURI); 210 agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()), gatekeeper.ServerURI);
168 211
169 if (m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID) == null) 212 string gridName = gatekeeper.ServerURI;
213
214 UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID);
215 if (account == null)
170 { 216 {
171 m_log.WarnFormat("[USER AGENT SERVICE]: Someone attempted to lauch a foreign user from here {0} {1}", agentCircuit.firstname, agentCircuit.lastname); 217 m_log.WarnFormat("[USER AGENT SERVICE]: Someone attempted to lauch a foreign user from here {0} {1}", agentCircuit.firstname, agentCircuit.lastname);
172 reason = "Forbidden to launch your agents from here"; 218 reason = "Forbidden to launch your agents from here";
173 return false; 219 return false;
174 } 220 }
175 221
222 // Is this user allowed to go there?
223 if (m_GridName != gridName)
224 {
225 if (m_ForeignTripsAllowed.ContainsKey(account.UserLevel))
226 {
227 bool allowed = m_ForeignTripsAllowed[account.UserLevel];
228
229 if (m_ForeignTripsAllowed[account.UserLevel] && IsException(gridName, account.UserLevel, m_TripsAllowedExceptions))
230 allowed = false;
231
232 if (!m_ForeignTripsAllowed[account.UserLevel] && IsException(gridName, account.UserLevel, m_TripsDisallowedExceptions))
233 allowed = true;
234
235 if (!allowed)
236 {
237 reason = "Your world does not allow you to visit the destination";
238 m_log.InfoFormat("[USER AGENT SERVICE]: Agents not permitted to visit {0}. Refusing service.", gridName);
239 return false;
240 }
241 }
242 }
243
244
176 // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination 245 // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination
177 GridRegion region = new GridRegion(gatekeeper); 246 GridRegion region = new GridRegion(gatekeeper);
178 region.ServerURI = gatekeeper.ServerURI; 247 region.ServerURI = gatekeeper.ServerURI;
@@ -189,7 +258,6 @@ namespace OpenSim.Services.HypergridService
189 258
190 bool success = false; 259 bool success = false;
191 string myExternalIP = string.Empty; 260 string myExternalIP = string.Empty;
192 string gridName = gatekeeper.ServerURI;
193 261
194 m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}", m_GridName, gridName); 262 m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}", m_GridName, gridName);
195 263
@@ -586,6 +654,35 @@ namespace OpenSim.Services.HypergridService
586 else 654 else
587 return UUID.Zero; 655 return UUID.Zero;
588 } 656 }
657
658 #region Misc
659
660 private bool IsException(string dest, int level, Dictionary<int, List<string>> exceptions)
661 {
662 if (!exceptions.ContainsKey(level))
663 return false;
664
665 bool exception = false;
666 if (exceptions[level].Count > 0) // we have exceptions
667 {
668 string destination = dest;
669 if (!destination.EndsWith("/"))
670 destination += "/";
671
672 if (exceptions[level].Find(delegate(string s)
673 {
674 if (!s.EndsWith("/"))
675 s += "/";
676 return s == destination;
677 }) != null)
678 exception = true;
679 }
680
681 return exception;
682 }
683
684 #endregion
685
589 } 686 }
590 687
591 class TravelingAgentInfo 688 class TravelingAgentInfo
diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
index 1b4cab5..30b9c7b 100755
--- a/bin/OpenMetaverse.Rendering.Meshmerizer.dll
+++ b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
Binary files differ
diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll
index 7b5174d..5c0b3c6 100755
--- a/bin/OpenMetaverse.StructuredData.dll
+++ b/bin/OpenMetaverse.StructuredData.dll
Binary files differ
diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll
index a08b406..511096e 100755
--- a/bin/OpenMetaverse.dll
+++ b/bin/OpenMetaverse.dll
Binary files differ
diff --git a/bin/OpenMetaverse.dll.config b/bin/OpenMetaverse.dll.config
index e8c90a4..b67da5f 100644
--- a/bin/OpenMetaverse.dll.config
+++ b/bin/OpenMetaverse.dll.config
@@ -1,7 +1,5 @@
1<configuration> 1<configuration>
2 <dllmap os="osx" dll="openjpeg-dotnet.dll" target="lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib" /> 2 <dllmap os="osx" dll="openjpeg-dotnet.dll" target="lib64/libopenjpeg-dotnet-2.1.5.0-dotnet-1.dylib" />
3 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet.dll" target="lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64" /> 3 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet-x86_64.dll" target="lib64/libopenjpeg-dotnet-x86_64" />
4 <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet-x86_64.dll" target="lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64" /> 4 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet.dll" target="lib32/libopenjpeg-dotnet" />
5 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet.dll" target="lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686" />
6 <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet-x86_64.dll" target="lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686" />
7</configuration> 5</configuration>
diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll
index fc4f8eb..8bc8885 100755
--- a/bin/OpenMetaverseTypes.dll
+++ b/bin/OpenMetaverseTypes.dll
Binary files differ
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 0de4002..3ec4bab 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -87,13 +87,13 @@
87 ;; from the selected region_info_source. 87 ;; from the selected region_info_source.
88 ; allow_regionless = false 88 ; allow_regionless = false
89 89
90 ;# {NonPhysicalPrimMin} {} {Minimum size of nonphysical prims?} {} 0.01 90 ;# {NonPhysicalPrimMin} {} {Minimum size of nonphysical prims?} {} 0.001
91 ;; Minimum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMin!). 91 ;; Minimum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonPhysicalPrimMin!).
92 ; NonphysicalPrimMin = 0.01 92 ; NonPhysicalPrimMin = 0.001
93 93
94 ;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256 94 ;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256
95 ;; Maximum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). 95 ;; Maximum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonPhysicalPrimMax!).
96 ; NonphysicalPrimMax = 256 96 ; NonPhysicalPrimMax = 256
97 97
98 ;# {PhysicalPrimMin} {} {Minimum size of physical prims?} {} 10 98 ;# {PhysicalPrimMin} {} {Minimum size of physical prims?} {} 10
99 ;; Maximum size where a prim can be physical. Affects resizing of existing prims. This can be overriden in the region config file. 99 ;; Maximum size where a prim can be physical. Affects resizing of existing prims. This can be overriden in the region config file.
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 1dc3f15..fee29c9 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -85,8 +85,8 @@
85 ;; from the selected region_info_source. 85 ;; from the selected region_info_source.
86 allow_regionless = false 86 allow_regionless = false
87 87
88 ; Maximum size of non physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). 88 ; Maximum size of non physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonPhysicalPrimMax!).
89 NonphysicalPrimMax = 256 89 NonPhysicalPrimMax = 256
90 90
91 ; Maximum size of physical prims. Affects resizing of existing prims. This can be overriden in the region config file. 91 ; Maximum size of physical prims. Affects resizing of existing prims. This can be overriden in the region config file.
92 PhysicalPrimMax = 10 92 PhysicalPrimMax = 10
@@ -673,8 +673,7 @@
673 ; If true, avatar appearance information is resent to other avatars in the simulator every 60 seconds. 673 ; If true, avatar appearance information is resent to other avatars in the simulator every 60 seconds.
674 ; This may help with some situations where avatars are persistently grey, though it will not help 674 ; This may help with some situations where avatars are persistently grey, though it will not help
675 ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others). 675 ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others).
676 ; This setting is experimental. 676 ResendAppearanceUpdates = true
677 ResendAppearanceUpdates = false
678 677
679 678
680[Attachments] 679[Attachments]
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index fad399d..18094b7 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -396,6 +396,18 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
396 ;AllowedClients = "" 396 ;AllowedClients = ""
397 ;DeniedClients = "" 397 ;DeniedClients = ""
398 398
399 ;; Are foreign visitors allowed?
400 ;ForeignAgentsAllowed = true
401 ;;
402 ;; If ForeignAgentsAllowed is true, make exceptions using AllowExcept.
403 ;; Leave blank or commented for no exceptions.
404 ; AllowExcept = "http://griefer.com:8002, http://enemy.com:8002"
405 ;;
406 ;; If ForeignAgentsAllowed is false, make exceptions using DisallowExcept
407 ;; Leave blank or commented for no exceptions.
408 ; DisallowExcept = "http://myfriendgrid.com:8002, http://myboss.com:8002"
409
410
399[UserAgentService] 411[UserAgentService]
400 LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService" 412 LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
401 ;; for the service 413 ;; for the service
@@ -416,6 +428,24 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
416 ; User level required to be contacted from other grids 428 ; User level required to be contacted from other grids
417 ;LevelOutsideContacts = 0 429 ;LevelOutsideContacts = 0
418 430
431 ;; Restrictions on destinations of local users.
432 ;; Are local users allowed to visit other grids?
433 ;; What user level? Use variables of this forrm:
434 ;; ForeignTripsAllowed_Level_<UserLevel> = true | false
435 ;; (the default is true)
436 ;; For example:
437 ; ForeignTripsAllowed_Level_0 = false
438 ; ForeignTripsAllowed_Level_200 = true ; true is default, no need to say it
439 ;;
440 ;; If ForeignTripsAllowed is false, make exceptions using DisallowExcept
441 ;; Leave blank or commented for no exceptions.
442 ; DisallowExcept_Level_0 = "http://myothergrid.com:8002, http://boss.com:8002"
443 ;;
444 ;; If ForeignTripsAllowed is true, make exceptions using AllowExcept.
445 ;; Leave blank or commented for no exceptions.
446 ; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002"
447
448
419; * The interface that local users get when they are in other grids. 449; * The interface that local users get when they are in other grids.
420; * This restricts the inventory operations while in other grids. 450; * This restricts the inventory operations while in other grids.
421; * Still not completely safe, especially if users perform inventory operations 451; * Still not completely safe, especially if users perform inventory operations
@@ -437,6 +467,18 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
437 UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService" 467 UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
438 HomeURI = "http://127.0.0.1:8002" 468 HomeURI = "http://127.0.0.1:8002"
439 469
470 ;; The asset types that this grid can export to / import from other grids.
471 ;; Comma separated.
472 ;; Valid values are all the asset types in OpenMetaverse.AssetType, namely:
473 ;; Unknown, Texture, Sound, CallingCard, Landmark, Clothing, Object, Notecard, LSLText,
474 ;; LSLBytecode, TextureTGA, Bodypart, SoundWAV, ImageTGA, ImageJPEG, Animation, Gesture, Mesh
475 ;;
476 ;; Leave blank or commented if you don't want to apply any restrictions.
477 ;; A more strict, but still reasonable, policy may be to disallow the exchange
478 ;; of scripts, like so:
479 ; DisallowExport ="LSLText"
480 ; DisallowImport ="LSLBytecode"
481
440[HGFriendsService] 482[HGFriendsService]
441 LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFriendsService" 483 LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGFriendsService"
442 UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService" 484 UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index 8d7f6fc..79f7ed6 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -137,6 +137,26 @@
137 ;; uncomment the next line. You may want to do this on sims that have licensed content. 137 ;; uncomment the next line. You may want to do this on sims that have licensed content.
138 ; OutboundPermission = False 138 ; OutboundPermission = False
139 139
140[HGAssetService]
141 ;
142 ; === HG ONLY ===
143 ; Change this to your server
144 ; accessible from other grids
145 ;
146 HomeURI = "http://mygridserver.com:8002"
147
148 ;; The asset types that this grid can export to / import from other grids.
149 ;; Comma separated.
150 ;; Valid values are all the asset types in OpenMetaverse.AssetType, namely:
151 ;; Unknown, Texture, Sound, CallingCard, Landmark, Clothing, Object, Notecard, LSLText,
152 ;; LSLBytecode, TextureTGA, Bodypart, SoundWAV, ImageTGA, ImageJPEG, Animation, Gesture, Mesh
153 ;;
154 ;; Leave blank or commented if you don't want to apply any restrictions.
155 ;; A more strict, but still reasonable, policy may be to disallow the exchange
156 ;; of scripts, like so:
157 ; DisallowExport ="LSLText"
158 ; DisallowImport ="LSLBytecode"
159
140[HGFriendsModule] 160[HGFriendsModule]
141 ; User level required to be able to send friendship invitations to foreign users 161 ; User level required to be able to send friendship invitations to foreign users
142 ;LevelHGFriends = 0; 162 ;LevelHGFriends = 0;
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example
index e4bc548..84de0ec 100644
--- a/bin/config-include/StandaloneCommon.ini.example
+++ b/bin/config-include/StandaloneCommon.ini.example
@@ -53,6 +53,19 @@
53[HGAssetService] 53[HGAssetService]
54 HomeURI = "http://127.0.0.1:9000" 54 HomeURI = "http://127.0.0.1:9000"
55 55
56 ;; The asset types that this grid can export to / import from other grids.
57 ;; Comma separated.
58 ;; Valid values are all the asset types in OpenMetaverse.AssetType, namely:
59 ;; Unknown, Texture, Sound, CallingCard, Landmark, Clothing, Object, Notecard, LSLText,
60 ;; LSLBytecode, TextureTGA, Bodypart, SoundWAV, ImageTGA, ImageJPEG, Animation, Gesture, Mesh
61 ;;
62 ;; Leave blank or commented if you don't want to apply any restrictions.
63 ;; A more strict, but still reasonable, policy may be to disallow the exchange
64 ;; of scripts, like so:
65 ; DisallowExport ="LSLText"
66 ; DisallowImport ="LSLBytecode"
67
68
56[HGInventoryAccessModule] 69[HGInventoryAccessModule]
57 HomeURI = "http://127.0.0.1:9000" 70 HomeURI = "http://127.0.0.1:9000"
58 Gatekeeper = "http://127.0.0.1:9000" 71 Gatekeeper = "http://127.0.0.1:9000"
@@ -151,8 +164,17 @@
151 ;AllowedClients = "" 164 ;AllowedClients = ""
152 ;DeniedClients = "" 165 ;DeniedClients = ""
153 166
154 ;; Are foreign visitors allowed 167 ;; Are foreign visitors allowed?
155 ;ForeignAgentsAllowed = true 168 ;ForeignAgentsAllowed = true
169 ;;
170 ;; If ForeignAgentsAllowed is true, make exceptions using AllowExcept.
171 ;; Leave blank or commented for no exceptions.
172 ; AllowExcept = "http://griefer.com:8002, http://enemy.com:8002"
173 ;;
174 ;; If ForeignAgentsAllowed is false, make exceptions using DisallowExcept
175 ;; Leave blank or commented for no exceptions.
176 ; DisallowExcept = "http://myfriendgrid.com:8002, http://myboss.com:8002"
177
156 178
157[FreeswitchService] 179[FreeswitchService]
158 ;; If FreeSWITCH is not being used then you don't need to set any of these parameters 180 ;; If FreeSWITCH is not being used then you don't need to set any of these parameters
@@ -258,5 +280,22 @@
258 ; Region_Test_1 = "DisallowForeigners" 280 ; Region_Test_1 = "DisallowForeigners"
259 281
260[UserAgentService] 282[UserAgentService]
261 ; User level required to be contacted from other grids 283 ;; User level required to be contacted from other grids
262 ;LevelOutsideContacts = 0 284 ;LevelOutsideContacts = 0
285
286 ;; Restrictions on destinations of local users.
287 ;; Are local users allowed to visit other grids?
288 ;; What user level? Use variables of this forrm:
289 ;; ForeignTripsAllowed_Level_<UserLevel> = true | false
290 ;; (the default is true)
291 ;; For example:
292 ; ForeignTripsAllowed_Level_0 = false
293 ; ForeignTripsAllowed_Level_200 = true ; true is default, no need to say it
294 ;;
295 ;; If ForeignTripsAllowed is false, make exceptions using DisallowExcept
296 ;; Leave blank or commented for no exceptions.
297 ; DisallowExcept_Level_0 = "http://myothergrid.com:8002, http://boss.com:8002"
298 ;;
299 ;; If ForeignTripsAllowed is true, make exceptions using AllowExcept.
300 ;; Leave blank or commented for no exceptions.
301 ; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002"
diff --git a/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so b/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so
deleted file mode 100644
index 0106b56..0000000
--- a/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686.so
+++ /dev/null
Binary files differ
diff --git a/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so b/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so
deleted file mode 100644
index 53543e7..0000000
--- a/bin/lib32/libopenjpeg-dotnet-2.1.3.0-dotnet-1.so
+++ /dev/null
Binary files differ
diff --git a/bin/lib32/libopenjpeg-dotnet.so b/bin/lib32/libopenjpeg-dotnet.so
new file mode 100755
index 0000000..193eca4
--- /dev/null
+++ b/bin/lib32/libopenjpeg-dotnet.so
Binary files differ
diff --git a/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so b/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so
deleted file mode 100644
index be11bb4..0000000
--- a/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64.so
+++ /dev/null
Binary files differ
diff --git a/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib b/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib
deleted file mode 100644
index dc50775..0000000
--- a/bin/lib64/libopenjpeg-dotnet-2.1.3.0-dotnet-1.dylib
+++ /dev/null
Binary files differ
diff --git a/bin/lib64/libopenjpeg-dotnet-x86_64.so b/bin/lib64/libopenjpeg-dotnet-x86_64.so
new file mode 100755
index 0000000..7a9bdfc
--- /dev/null
+++ b/bin/lib64/libopenjpeg-dotnet-x86_64.so
Binary files differ
diff --git a/bin/lib64/libopenjpeg-dotnet.dylib b/bin/lib64/libopenjpeg-dotnet.dylib
new file mode 100755
index 0000000..18ca868
--- /dev/null
+++ b/bin/lib64/libopenjpeg-dotnet.dylib
Binary files differ
diff --git a/bin/openjpeg-dotnet-x86_64.dll b/bin/openjpeg-dotnet-x86_64.dll
index 97729ff..9e8cd21 100755
--- a/bin/openjpeg-dotnet-x86_64.dll
+++ b/bin/openjpeg-dotnet-x86_64.dll
Binary files differ
diff --git a/bin/openjpeg-dotnet.dll b/bin/openjpeg-dotnet.dll
index 64b2557..6377b8d 100755
--- a/bin/openjpeg-dotnet.dll
+++ b/bin/openjpeg-dotnet.dll
Binary files differ
diff --git a/bin/openmetaverse_data/avatar_lad.xml b/bin/openmetaverse_data/avatar_lad.xml
new file mode 100644
index 0000000..3bd7ba7
--- /dev/null
+++ b/bin/openmetaverse_data/avatar_lad.xml
@@ -0,0 +1,12308 @@
1<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
2<linden_avatar
3 version="1.0" wearable_definition_version="22">
4 <!-- The wearable_definition_version is checked during asset upload. -->
5 <!-- If you increment it, check indra/lib/python/indra/assetutil.py. -->
6 <skeleton
7 file_name="avatar_skeleton.xml">
8 <attachment_point
9 id="1"
10 group="6"
11 pie_slice="2"
12 name="Chest"
13 joint="mChest"
14 position="0.15 0 -0.1"
15 rotation="0 90 90"
16 visible_in_first_person="true" />
17
18 <attachment_point
19 id="2"
20 group="2"
21 pie_slice="2"
22 name="Skull"
23 joint="mHead"
24 position="0 0 0.15"
25 rotation="0 0 90"
26 visible_in_first_person="false" />
27
28 <attachment_point
29 id="3"
30 group="3"
31 pie_slice="3"
32 name="Left Shoulder"
33 joint="mCollarLeft"
34 position="0 0 0.08"
35 rotation="0 0 0"
36 visible_in_first_person="true" />
37
38 <attachment_point
39 id="4"
40 group="1"
41 pie_slice="1"
42 name="Right Shoulder"
43 joint="mCollarRight"
44 position="0 0 0.08"
45 rotation="0 0 0"
46 visible_in_first_person="true"/>
47
48 <attachment_point
49 id="5"
50 group="4"
51 name="Left Hand"
52 joint="mWristLeft"
53 position="0 0.08 -0.02"
54 rotation="0 0 0"
55 visible_in_first_person="true"
56 max_attachment_offset="1.5" />
57
58 <attachment_point
59 id="6"
60 group="0"
61 name="Right Hand"
62 joint="mWristRight"
63 position="0 -0.08 -0.02"
64 rotation="0 0 0"
65 visible_in_first_person="true"
66 max_attachment_offset="1.5" />
67
68 <attachment_point
69 id="7"
70 group="5"
71 pie_slice="6"
72 name="Left Foot"
73 joint="mFootLeft"
74 position="0 0.0 0.0"
75 rotation="0 0 0"
76 visible_in_first_person="true"/>
77
78 <attachment_point
79 id="8"
80 group="7"
81 pie_slice="6"
82 name="Right Foot"
83 joint="mFootRight"
84 position="0 0.0 0.0"
85 rotation="0 0 0"
86 visible_in_first_person="true"/>
87
88 <attachment_point
89 id="9"
90 group="6"
91 pie_slice="7"
92 name="Spine"
93 joint="mChest"
94 position="-0.15 0 -0.1"
95 rotation="0 -90 90"
96 visible_in_first_person="true" />
97
98 <attachment_point
99 id="10"
100 group="6"
101 pie_slice="6"
102 name="Pelvis"
103 joint="mPelvis"
104 position="0 0 -0.15"
105 rotation="0 0 0"
106 visible_in_first_person="true" />
107
108 <attachment_point
109 id="11"
110 group="2"
111 pie_slice="6"
112 name="Mouth"
113 joint="mHead"
114 position="0.12 0 0.001"
115 rotation="0 0 0"
116 visible_in_first_person="false"/>
117
118 <attachment_point
119 id="12"
120 group="2"
121 pie_slice="7"
122 name="Chin"
123 joint="mHead"
124 position="0.12 0 -0.04"
125 rotation="0 0 0"
126 visible_in_first_person="false" />
127
128 <attachment_point
129 id="13"
130 group="2"
131 pie_slice="4"
132 name="Left Ear"
133 joint="mHead"
134 position="0.015 0.08 0.017"
135 rotation="0 0 0"
136 visible_in_first_person="false" />
137
138 <attachment_point
139 id="14"
140 group="2"
141 pie_slice="0"
142 name="Right Ear"
143 joint="mHead"
144 position="0.015 -0.08 0.017"
145 rotation="0 0 0"
146 visible_in_first_person="false" />
147
148 <attachment_point
149 id="15"
150 group="2"
151 pie_slice="3"
152 name="Left Eyeball"
153 joint="mEyeLeft"
154 position="0 0 0"
155 rotation="0 0 0"
156 visible_in_first_person="false"/>
157
158 <attachment_point
159 id="16"
160 group="2"
161 pie_slice="1"
162 name="Right Eyeball"
163 joint="mEyeRight"
164 position="0 0 0"
165 rotation="0 0 0"
166 visible_in_first_person="false" />
167
168 <attachment_point
169 id="17"
170 group="2"
171 pie_slice="5"
172 name="Nose"
173 joint="mHead"
174 position="0.1 0 0.05"
175 rotation="0 0 0"
176 visible_in_first_person="false"/>
177
178 <attachment_point
179 id="18"
180 group="1"
181 pie_slice="0"
182 name="R Upper Arm"
183 joint="mShoulderRight"
184 position="0.01 -0.13 0.01"
185 rotation="0 0 0"
186 visible_in_first_person="true" />
187
188 <attachment_point
189 id="19"
190 group="1"
191 pie_slice="7"
192 name="R Forearm"
193 joint="mElbowRight"
194 position="0 -0.12 0"
195 rotation="0 0 0"
196 visible_in_first_person="true"/>
197
198 <attachment_point
199 id="20"
200 group="3"
201 pie_slice="4"
202 name="L Upper Arm"
203 joint="mShoulderLeft"
204 position="0.01 0.15 -0.01"
205 rotation="0 0 0"
206 visible_in_first_person="true" />
207
208 <attachment_point
209 id="21"
210 group="3"
211 pie_slice="5"
212 name="L Forearm"
213 joint="mElbowLeft"
214 position="0 0.113 0"
215 rotation="0 0 0"
216 visible_in_first_person="true" />
217
218 <attachment_point
219 id="22"
220 group="7"
221 pie_slice="1"
222 name="Right Hip"
223 joint="mHipRight"
224 position="0 0 0"
225 rotation="0 0 0"
226 visible_in_first_person="true" />
227
228 <attachment_point
229 id="23"
230 group="7"
231 pie_slice="0"
232 name="R Upper Leg"
233 joint="mHipRight"
234 position="-0.017 0.041 -0.310"
235 rotation="0 0 0"
236 visible_in_first_person="true" />
237
238 <attachment_point
239 id="24"
240 group="7"
241 pie_slice="7"
242 name="R Lower Leg"
243 joint="mKneeRight"
244 position="-0.044 -0.007 -0.262"
245 rotation="0 0 0"
246 visible_in_first_person="true" />
247
248 <attachment_point
249 id="25"
250 group="5"
251 pie_slice="3"
252 name="Left Hip"
253 joint="mHipLeft"
254 position="0 0 0"
255 rotation="0 0 0"
256 visible_in_first_person="true" />
257
258 <attachment_point
259 id="26"
260 group="5"
261 pie_slice="4"
262 name="L Upper Leg"
263 joint="mHipLeft"
264 position="-0.019 -0.034 -0.310"
265 rotation="0 0 0"
266 visible_in_first_person="true"/>
267
268 <attachment_point
269 id="27"
270 group="5"
271 pie_slice="5"
272 name="L Lower Leg"
273 joint="mKneeLeft"
274 position="-0.044 -0.007 -0.261"
275 rotation="0 0 0"
276 visible_in_first_person="true" />
277
278 <attachment_point
279 id="28"
280 group="6"
281 pie_slice="5"
282 name="Stomach"
283 joint="mPelvis"
284 position="0.092 0.0 0.088"
285 rotation="0 0 0"
286 visible_in_first_person="true" />
287
288 <attachment_point
289 id="29"
290 group="6"
291 pie_slice="3"
292 name="Left Pec"
293 joint="mTorso"
294 position="0.104 0.082 0.247"
295 rotation="0 0 0"
296 visible_in_first_person="true" />
297
298 <attachment_point
299 id="30"
300 group="6"
301 pie_slice="1"
302 name="Right Pec"
303 joint="mTorso"
304 position="0.104 -0.082 0.247"
305 rotation="0 0 0"
306 visible_in_first_person="true" />
307
308 <attachment_point
309 id="31"
310 group="8"
311 name="Center 2"
312 joint="mScreen"
313 position="0 0 0"
314 rotation="0 0 0"
315 hud="true"
316 max_attachment_offset="2.0"
317 visible_in_first_person="true" />
318
319 <attachment_point
320 id="32"
321 group="8"
322 name="Top Right"
323 joint="mScreen"
324 position="0 -0.5 0.5"
325 rotation="0 0 0"
326 hud="true"
327 max_attachment_offset="2.0"
328 visible_in_first_person="true" />
329
330 <attachment_point
331 id="33"
332 group="8"
333 name="Top"
334 joint="mScreen"
335 position="0 0 0.5"
336 rotation="0 0 0"
337 hud="true"
338 max_attachment_offset="2.0"
339 visible_in_first_person="true" />
340
341 <attachment_point
342 id="34"
343 group="8"
344 name="Top Left"
345 joint="mScreen"
346 position="0 0.5 0.5"
347 rotation="0 0 0"
348 hud="true"
349 max_attachment_offset="2.0"
350 visible_in_first_person="true" />
351
352 <attachment_point
353 id="35"
354 group="8"
355 name="Center"
356 joint="mScreen"
357 position="0 0 0"
358 rotation="0 0 0"
359 hud="true"
360 max_attachment_offset="2.0"
361 visible_in_first_person="true" />
362
363 <attachment_point
364 id="36"
365 group="8"
366 name="Bottom Left"
367 joint="mScreen"
368 position="0 0.5 -0.5"
369 rotation="0 0 0"
370 hud="true"
371 max_attachment_offset="2.0"
372 visible_in_first_person="true" />
373
374 <attachment_point
375 id="37"
376 group="8"
377 name="Bottom"
378 joint="mScreen"
379 position="0 0 -0.5"
380 rotation="0 0 0"
381 hud="true"
382 max_attachment_offset="2.0"
383 visible_in_first_person="true" />
384
385 <attachment_point
386 id="38"
387 group="8"
388 name="Bottom Right"
389 joint="mScreen"
390 position="0 -0.5 -0.5"
391 rotation="0 0 0"
392 hud="true"
393 max_attachment_offset="2.0"
394 visible_in_first_person="true" />
395
396
397 <param
398 id="32"
399 group="1"
400 wearable="shape"
401 name="Male_Skeleton"
402 label_min="Female"
403 label_max="Male"
404 value_min="0"
405 value_max="1">
406 <param_skeleton>
407 <bone
408 name="mNeck"
409 scale="0 0 .2" />
410
411 <bone
412 name="mCollarLeft"
413 scale="0 .4 0" />
414
415 <bone
416 name="mCollarRight"
417 scale="0 .4 0" />
418
419 <bone
420 name="mShoulderLeft"
421 scale="0 .35 0" />
422
423 <bone
424 name="mShoulderRight"
425 scale="0 .35 0" />
426
427 <bone
428 name="mElbowLeft"
429 scale="0 .1 0" />
430
431 <bone
432 name="mElbowRight"
433 scale="0 .1 0" />
434
435 <bone
436 name="mChest"
437 scale=".05 .05 .05" />
438
439 <bone
440 name="mTorso"
441 scale="0 0 .05" />
442
443 <bone
444 name="mPelvis"
445 scale="0 0 0" />
446
447 <bone
448 name="mHipLeft"
449 scale=".05 .05 0" />
450
451 <bone
452 name="mHipRight"
453 scale=".05 .05 0" />
454
455 <bone
456 name="mKneeLeft"
457 scale=".05 .05 .1" />
458
459 <bone
460 name="mKneeRight"
461 scale=".05 .05 .1" />
462 </param_skeleton>
463 </param>
464
465 <param
466 id="33"
467 group="0"
468 name="Height"
469 label="Height"
470 wearable="shape"
471 edit_group="shape_body"
472 edit_group_order="1"
473 label_min="Short"
474 label_max="Tall"
475 show_simple="true"
476 value_min="-2.3"
477 value_max="2"
478 camera_distance="2.2">
479 <param_skeleton>
480 <bone
481 name="mNeck"
482 scale="0 0 .02" />
483
484 <bone
485 name="mCollarLeft"
486 scale="0 0 0" />
487
488 <bone
489 name="mCollarRight"
490 scale="0 0 0" />
491
492 <bone
493 name="mShoulderLeft"
494 scale="0 0.08 0" />
495
496 <bone
497 name="mShoulderRight"
498 scale="0 0.08 0" />
499
500 <bone
501 name="mElbowLeft"
502 scale="0 0.06 0" />
503
504 <bone
505 name="mElbowRight"
506 scale="0 0.06 0" />
507
508 <bone
509 name="mChest"
510 scale="0 0 0.05" />
511
512 <bone
513 name="mTorso"
514 scale="0 0 0.05" />
515
516 <bone
517 name="mPelvis"
518 scale="0 0 0" />
519
520 <bone
521 name="mHipLeft"
522 scale="0 0 0.1" />
523
524 <bone
525 name="mHipRight"
526 scale="0 0 0.1" />
527
528 <bone
529 name="mKneeLeft"
530 scale="0 0 0.1" />
531
532 <bone
533 name="mKneeRight"
534 scale="0 0 0.1" />
535 </param_skeleton>
536 </param>
537
538 <param
539 id="34"
540 group="0"
541 name="Thickness"
542 label="Body Thickness"
543 wearable="shape"
544 edit_group="shape_body"
545 edit_group_order="2"
546 label_min="Body Thin"
547 label_max="Body Thick"
548 show_simple="true"
549 value_min="-0.7"
550 value_max="1.5"
551 camera_distance="1.8">
552 <param_skeleton>
553 <bone
554 name="mNeck"
555 scale="0.1 0.1 0" />
556
557 <bone
558 name="mCollarLeft"
559 scale="0 0.2 0" />
560
561 <bone
562 name="mCollarRight"
563 scale="0 0.2 0" />
564
565 <bone
566 name="mShoulderLeft"
567 scale="0.1 0 0.1" />
568
569 <bone
570 name="mShoulderRight"
571 scale="0.1 0 0.1" />
572
573 <bone
574 name="mElbowLeft"
575 scale="0.1 0 0.1" />
576
577 <bone
578 name="mElbowRight"
579 scale="0.1 0 0.1" />
580
581 <bone
582 name="mChest"
583 scale="0.1 0.1 0" />
584
585 <bone
586 name="mTorso"
587 scale="0.1 0.1 0" />
588
589 <bone
590 name="mPelvis"
591 scale="0.1 0.1 0" />
592
593 <bone
594 name="mHipLeft"
595 scale="0.13 0.13 0" />
596
597 <bone
598 name="mHipRight"
599 scale="0.13 0.13 0" />
600
601 <bone
602 name="mKneeLeft"
603 scale="0.12 0.12 0" />
604
605 <bone
606 name="mKneeRight"
607 scale="0.12 0.12 0" />
608 </param_skeleton>
609 </param>
610
611 <param
612 id="36"
613 group="0"
614 name="Shoulders"
615 label="Shoulders"
616 wearable="shape"
617 edit_group="shape_torso"
618 edit_group_order="4"
619 label_min="Narrow"
620 label_max="Broad"
621 show_simple="true"
622 value_min="-1.8"
623 value_max="1.4"
624 value_default="-0.5"
625 camera_elevation=".1"
626 camera_distance="1.2"
627 camera_angle="0">
628 <param_skeleton>
629 <bone
630 name="mNeck"
631 scale="0.01 0.03 0" />
632
633 <bone
634 name="mCollarLeft"
635 scale="0 0 0"
636 offset="0 .02 0" />
637
638 <bone
639 name="mCollarRight"
640 scale="0 0 0"
641 offset="0 -.02 0" />
642
643 <bone
644 name="mChest"
645 scale="0.02 0.08 0" />
646 </param_skeleton>
647 </param>
648
649 <param
650 id="37"
651 group="0"
652 name="Hip Width"
653 label="Hip Width"
654 wearable="shape"
655 edit_group="shape_legs"
656 edit_group_order="3"
657 label_min="Narrow"
658 label_max="Wide"
659 show_simple="true"
660 value_min="-3.2"
661 value_max="2.8"
662 camera_distance="1.8">
663 <param_skeleton>
664 <bone
665 name="mPelvis"
666 scale="0 0.1 0" />
667
668 <bone
669 name="mHipLeft"
670 scale="0 0 0"
671 offset="0 .004 0" />
672
673 <bone
674 name="mHipRight"
675 scale="0 0 0"
676 offset="0 -.004 0" />
677 </param_skeleton>
678 </param>
679
680 <param
681 id="842"
682 group="0"
683 name="Hip Length"
684 wearable="shape"
685 edit_group="shape_legs"
686 edit_group_order="3.2"
687 label_min="Short hips"
688 label_max="Long Hips"
689 value_min="-1"
690 value_max="1"
691 camera_distance="1.8">
692 <param_skeleton>
693 <bone
694 name="mPelvis"
695 scale="0 0 0.3" />
696 </param_skeleton>
697 </param>
698
699 <param
700 id="38"
701 group="0"
702 name="Torso Length"
703 wearable="shape"
704 edit_group="shape_torso"
705 edit_group_order="11"
706 label_min="Short Torso"
707 label_max="Long Torso"
708 value_min="-1"
709 value_max="1"
710 camera_distance="1.8">
711 <param_skeleton>
712 <bone
713 name="mTorso"
714 scale="0 0 .3" />
715
716 <bone
717 name="mPelvis"
718 scale="0 0 .1" />
719
720 <bone
721 name="mHipLeft"
722 scale="0 0 -.1" />
723
724 <bone
725 name="mHipRight"
726 scale="0 0 -.1" />
727
728 <bone
729 name="mKneeRight"
730 scale="0 0 -.05" />
731
732 <bone
733 name="mKneeLeft"
734 scale="0 0 -.05" />
735 </param_skeleton>
736 </param>
737
738 <param
739 id="195"
740 group="1"
741 name="EyeBone_Spread"
742 wearable="shape"
743 edit_group="shape_eyes"
744 label_min="Eyes Together"
745 label_max="Eyes Spread"
746 value_min="-1"
747 value_max="1">
748 <param_skeleton>
749 <bone
750 name="mEyeLeft"
751 scale="0 0 0"
752 offset="0 .009 0" />
753
754 <bone
755 name="mEyeRight"
756 scale="0 0 0"
757 offset="0 -.009 0" />
758 </param_skeleton>
759 </param>
760
761 <param
762 id="661"
763 group="1"
764 name="EyeBone_Head_Shear"
765 wearable="shape"
766 edit_group="shape_eyes"
767 label_min="Eyes Shear Left Up"
768 label_max="Eyes Shear Right Up"
769 value_min="-2"
770 value_max="2">
771 <param_skeleton>
772 <bone
773 name="mEyeLeft"
774 scale="0 0 0"
775 offset="0 0 .004" />
776
777 <bone
778 name="mEyeRight"
779 scale="0 0 0"
780 offset="0 0 -.004" />
781 </param_skeleton>
782 </param>
783
784 <param
785 id="772"
786 group="1"
787 name="EyeBone_Head_Elongate"
788 wearable="shape"
789 edit_group="shape_eyes"
790 label_min="Eyes Short Head"
791 label_max="Eyes Long Head"
792 value_min="-1"
793 value_max="1">
794 <param_skeleton>
795 <bone
796 name="mEyeLeft"
797 scale="0 0 0"
798 offset=".016 0 0" />
799
800 <bone
801 name="mEyeRight"
802 scale="0 0 0"
803 offset=".016 0 0" />
804 </param_skeleton>
805 </param>
806
807 <param
808 id="768"
809 group="1"
810 name="EyeBone_Bug"
811 wearable="shape"
812 edit_group="shape_eyes"
813 label_min="Eyes Sunken"
814 label_max="Eyes Bugged"
815 value_min="-2"
816 value_max="2">
817 <param_skeleton>
818 <bone
819 name="mEyeLeft"
820 scale="0 0 0"
821 offset=".005 0 0" />
822
823 <bone
824 name="mEyeRight"
825 scale="0 0 0"
826 offset=".005 0 0" />
827 </param_skeleton>
828 </param>
829
830 <param
831 id="655"
832 group="1"
833 name="Head Size"
834 label="Head Size"
835 wearable="shape"
836 edit_group="shape_head"
837 label_min="Small Head"
838 label_max="Big Head"
839 show_simple="true"
840 value_min="-.25"
841 value_max=".10">
842 <param_skeleton>
843 <bone
844 name="mSkull"
845 scale="1 1 1"
846 offset="0 0 0.1" />
847
848 <bone
849 name="mHead"
850 scale="1 1 1"
851 offset="0 0 0" />
852
853 <bone
854 name="mEyeLeft"
855 scale="1 1 1"
856 offset="0 0 0" />
857
858 <bone
859 name="mEyeRight"
860 scale="1 1 1"
861 offset="0 0 0" />
862 </param_skeleton>
863 </param>
864
865 <param
866 id="197"
867 group="1"
868 wearable="shoes"
869 name="Shoe_Heels"
870 edit_group="shoes"
871 label_min="No Heels"
872 label_max="High Heels"
873 value_min="0"
874 value_max="1">
875 <param_skeleton>
876 <bone
877 name="mFootRight"
878 scale="0 0 0"
879 offset="0 0 -.08" />
880
881 <bone
882 name="mFootLeft"
883 scale="0 0 0"
884 offset="0 0 -.08" />
885 </param_skeleton>
886 </param>
887
888 <param
889 id="502"
890 group="1"
891 wearable="shoes"
892 name="Shoe_Platform"
893 edit_group="shoes"
894 label_min="No Heels"
895 label_max="High Heels"
896 value_min="0"
897 value_max="1">
898 <param_skeleton>
899 <bone
900 name="mFootRight"
901 scale="0 0 0"
902 offset="0 0 -.07" />
903
904 <bone
905 name="mFootLeft"
906 scale="0 0 0"
907 offset="0 0 -.07" />
908 </param_skeleton>
909 </param>
910
911 <param
912 id="675"
913 group="0"
914 name="Hand Size"
915 wearable="shape"
916 edit_group="shape_torso"
917 edit_group_order="10"
918 label_min="Small Hands"
919 label_max="Large Hands"
920 value_min="-.3"
921 value_max=".3"
922 camera_elevation=".1"
923 camera_distance="1.4"
924 camera_angle="0">
925 <param_skeleton>
926 <bone
927 name="mWristRight"
928 scale="1 1 1"
929 offset="0 0 0" />
930
931 <bone
932 name="mWristLeft"
933 scale="1 1 1"
934 offset="0 0 0" />
935 </param_skeleton>
936 </param>
937
938 <param
939 id="683"
940 group="0"
941 name="Neck Thickness"
942 wearable="shape"
943 edit_group="shape_torso"
944 edit_group_order="2"
945 label_min="Skinny Neck"
946 label_max="Thick Neck"
947 value_min="-.4"
948 value_max=".2"
949 value_default="-.15"
950 camera_elevation=".3"
951 camera_distance=".8"
952 camera_angle="15">
953 <param_skeleton>
954 <bone
955 name="mNeck"
956 scale="1 1 0"
957 offset="0 0 0" />
958 </param_skeleton>
959 </param>
960
961 <param
962 id="689"
963 group="1"
964 wearable="shape"
965 name="EyeBone_Big_Eyes"
966 edit_group="shape_eyes"
967 label_min="Eyes Back"
968 label_max="Eyes Forward"
969 value_min="-1"
970 value_max="1">
971 <param_skeleton>
972 <bone
973 name="mEyeLeft"
974 scale="0 0 0"
975 offset="-.005 0 0" />
976
977 <bone
978 name="mEyeRight"
979 scale="0 0 0"
980 offset="-.005 0 0" />
981 </param_skeleton>
982 </param>
983
984 <param
985 id="692"
986 group="0"
987 name="Leg Length"
988 wearable="shape"
989 edit_group="shape_legs"
990 edit_group_order="2"
991 label_min="Short Legs"
992 label_max="Long Legs"
993 value_min="-1"
994 value_max="1"
995 camera_distance="2.5">
996 <param_skeleton>
997 <bone
998 name="mHipLeft"
999 scale="0 0 .2" />
1000
1001 <bone
1002 name="mHipRight"
1003 scale="0 0 .2" />
1004
1005 <bone
1006 name="mKneeRight"
1007 scale="0 0 .2" />
1008
1009 <bone
1010 name="mKneeLeft"
1011 scale="0 0 .2" />
1012 </param_skeleton>
1013 </param>
1014
1015 <param
1016 id="693"
1017 group="0"
1018 name="Arm Length"
1019 wearable="shape"
1020 edit_group="shape_torso"
1021 edit_group_order="9"
1022 label_min="Short Arms"
1023 label_max="Long arms"
1024 value_min="-1"
1025 value_max="1"
1026 value_default=".6"
1027 camera_distance="1.5">
1028 <param_skeleton>
1029 <bone
1030 name="mShoulderLeft"
1031 scale="0 .2 0" />
1032
1033 <bone
1034 name="mShoulderRight"
1035 scale="0 .2 0" />
1036
1037 <bone
1038 name="mElbowRight"
1039 scale="0 .3 0" />
1040
1041 <bone
1042 name="mElbowLeft"
1043 scale="0 .3 0" />
1044 </param_skeleton>
1045 </param>
1046
1047 <param
1048 id="756"
1049 group="0"
1050 name="Neck Length"
1051 wearable="shape"
1052 edit_group="shape_torso"
1053 edit_group_order="3"
1054 label_min="Short Neck"
1055 label_max="Long Neck"
1056 value_min="-1"
1057 value_max="1"
1058 value_default="0"
1059 camera_elevation=".3"
1060 camera_distance=".8"
1061 camera_angle="15">
1062 <param_skeleton>
1063 <bone
1064 name="mNeck"
1065 scale="0 0 .5" />
1066 </param_skeleton>
1067 </param>
1068 </skeleton>
1069
1070 <mesh
1071 type="hairMesh"
1072 lod="0"
1073 file_name="avatar_hair.llm"
1074 min_pixel_width="320">
1075 <!-- begin morph targets -->
1076 <param
1077 id="180"
1078 group="1"
1079 name="Hair_Volume"
1080 label="Hair Volume"
1081 show_simple="true"
1082 wearable="hair"
1083 clothing_morph="true"
1084 edit_group="hair_style"
1085 label_min="Less"
1086 label_max="More"
1087 value_min="0"
1088 value_max="1.3"
1089 camera_elevation=".1"
1090 camera_distance=".5"
1091 camera_angle="20">
1092 <param_morph />
1093 </param>
1094
1095 <param
1096 id="761"
1097 group="1"
1098 name="Hair_Volume_Small"
1099 label="Hair Volume"
1100 show_simple="true"
1101 wearable="hair"
1102 edit_group="hair_style"
1103 label_min="Less"
1104 label_max="More"
1105 value_min="0"
1106 value_max="1.3"
1107 camera_elevation=".1"
1108 camera_distance=".5"
1109 camera_angle="20">
1110 <param_morph />
1111 </param>
1112
1113 <param
1114 id="181"
1115 group="0"
1116 name="Hair_Big_Front"
1117 label="Big Hair Front"
1118 wearable="hair"
1119 edit_group="hair_style"
1120 edit_group_order="5"
1121 label_min="Less"
1122 label_max="More"
1123 value_min="-1"
1124 value_max="1"
1125 value_default="0.14"
1126 camera_elevation=".1"
1127 camera_distance=".5"
1128 camera_angle="90">
1129 <param_morph />
1130 </param>
1131
1132 <param
1133 id="182"
1134 group="0"
1135 name="Hair_Big_Top"
1136 label="Big Hair Top"
1137 wearable="hair"
1138 edit_group="hair_style"
1139 edit_group_order="6"
1140 label_min="Less"
1141 label_max="More"
1142 value_min="-1"
1143 value_max="1"
1144 value_default=".7"
1145 camera_elevation=".1"
1146 camera_distance=".5"
1147 camera_angle="90">
1148 <param_morph />
1149 </param>
1150
1151 <param
1152 id="183"
1153 group="0"
1154 name="Hair_Big_Back"
1155 clothing_morph="true"
1156 label="Big Hair Back"
1157 wearable="hair"
1158 edit_group="hair_style"
1159 edit_group_order="7"
1160 label_min="Less"
1161 label_max="More"
1162 value_min="-1"
1163 value_max="1"
1164 value_default="0.05"
1165 camera_elevation=".1"
1166 camera_distance=".7"
1167 camera_angle="90">
1168 <param_morph />
1169 </param>
1170
1171 <param
1172 id="184"
1173 group="0"
1174 name="Hair_Spiked"
1175 label="Spiked Hair"
1176 show_simple="true"
1177 wearable="hair"
1178 clothing_morph="true"
1179 edit_group="hair_style"
1180 edit_group_order="15"
1181 label_min="No Spikes"
1182 label_max="Big Spikes"
1183 value_min="0"
1184 value_max="1"
1185 camera_elevation=".1"
1186 camera_distance=".5"
1187 camera_angle="20">
1188 <param_morph />
1189 </param>
1190
1191 <param
1192 id="140"
1193 group="0"
1194 name="Hair_Part_Middle"
1195 label="Middle Part"
1196 wearable="hair"
1197 edit_group="hair_style"
1198 edit_group_order="17"
1199 label_min="No Part"
1200 label_max="Part"
1201 value_min="0"
1202 value_max="2"
1203 camera_elevation=".1"
1204 camera_distance=".5"
1205 camera_angle="0">
1206 <param_morph />
1207 </param>
1208
1209 <param
1210 id="141"
1211 group="0"
1212 name="Hair_Part_Right"
1213 label="Right Part"
1214 wearable="hair"
1215 edit_group="hair_style"
1216 edit_group_order="18"
1217 label_min="No Part"
1218 label_max="Part"
1219 value_min="0"
1220 value_max="2"
1221 camera_elevation=".1"
1222 camera_distance=".5"
1223 camera_angle="0">
1224 <param_morph />
1225 </param>
1226
1227 <param
1228 id="142"
1229 group="0"
1230 name="Hair_Part_Left"
1231 label="Left Part"
1232 wearable="hair"
1233 edit_group="hair_style"
1234 edit_group_order="19"
1235 label_min="No Part"
1236 label_max="Part"
1237 value_min="0"
1238 value_max="2"
1239 camera_elevation=".1"
1240 camera_distance=".5"
1241 camera_angle="0">
1242 <param_morph />
1243 </param>
1244
1245 <param
1246 id="143"
1247 group="0"
1248 name="Hair_Sides_Full"
1249 label="Full Hair Sides"
1250 show_simple="true"
1251 wearable="hair"
1252 edit_group="hair_style"
1253 edit_group_order="11"
1254 label_min="Mowhawk"
1255 label_max="Full Sides"
1256 value_min="-4"
1257 value_max="1.5"
1258 value_default="0.125"
1259 camera_elevation=".1"
1260 camera_distance=".5"
1261 camera_angle="20">
1262 <param_morph />
1263 </param>
1264
1265 <param
1266 id="144"
1267 group="1"
1268 name="Bangs_Front_Up"
1269 label="Front Bangs Up"
1270 wearable="hair"
1271 edit_group="hair_style"
1272 label_min="Bangs"
1273 label_max="Bangs Up"
1274 value_min="0"
1275 value_max="1"
1276 camera_elevation=".1"
1277 camera_distance=".5"
1278 camera_angle="20">
1279 <param_morph />
1280 </param>
1281
1282 <param
1283 id="145"
1284 group="1"
1285 clothing_morph="true"
1286 name="Bangs_Front_Down"
1287 label="Front Bangs Down"
1288 wearable="hair"
1289 edit_group="hair_style"
1290 label_min="Bangs"
1291 label_max="Bangs Down"
1292 value_min="0"
1293 value_max="5"
1294 camera_elevation=".1"
1295 camera_distance=".5"
1296 camera_angle="20">
1297 <param_morph />
1298 </param>
1299
1300 <param
1301 id="146"
1302 group="1"
1303 name="Bangs_Sides_Up"
1304 label="Side Bangs Up"
1305 wearable="hair"
1306 edit_group="hair_style"
1307 label_min="Side Bangs"
1308 label_max="Side Bangs Up"
1309 value_min="0"
1310 value_max="1"
1311 camera_elevation=".1"
1312 camera_distance=".5"
1313 camera_angle="20">
1314 <param_morph />
1315 </param>
1316
1317 <param
1318 id="147"
1319 group="1"
1320 clothing_morph="true"
1321 name="Bangs_Sides_Down"
1322 label="Side Bangs Down"
1323 wearable="hair"
1324 edit_group="hair_style"
1325 label_min="Side Bangs"
1326 label_max="Side Bangs Down"
1327 value_min="0"
1328 value_max="2"
1329 camera_elevation=".1"
1330 camera_distance=".5"
1331 camera_angle="20">
1332 <param_morph />
1333 </param>
1334
1335 <param
1336 id="148"
1337 group="1"
1338 name="Bangs_Back_Up"
1339 label="Back Bangs Up"
1340 wearable="hair"
1341 edit_group="hair_style"
1342 label_min="Back Bangs"
1343 label_max="Back Bangs Up"
1344 value_min="0"
1345 value_max="1"
1346 camera_elevation=".1"
1347 camera_distance=".5"
1348 camera_angle="150">
1349 <param_morph />
1350 </param>
1351
1352 <param
1353 id="149"
1354 group="1"
1355 name="Bangs_Back_Down"
1356 label="Back Bangs Down"
1357 clothing_morph="true"
1358 wearable="hair"
1359 edit_group="hair_style"
1360 label_min="Back Bangs"
1361 label_max="Back Bangs Down"
1362 value_min="0"
1363 value_max="2"
1364 camera_elevation=".1"
1365 camera_distance=".5"
1366 camera_angle="150">
1367 <param_morph />
1368 </param>
1369
1370 <param
1371 id="171"
1372 group="1"
1373 name="Hair_Front_Down"
1374 label="Front Hair Down"
1375 wearable="hair"
1376 edit_group="hair_style"
1377 label_min="Front Hair"
1378 label_max="Front Hair Down"
1379 value_min="0"
1380 value_max="1"
1381 camera_elevation=".1"
1382 camera_distance=".5"
1383 camera_angle="20">
1384 <param_morph />
1385 </param>
1386
1387 <param
1388 id="172"
1389 group="1"
1390 name="Hair_Front_Up"
1391 label="Front Hair Up"
1392 wearable="hair"
1393 edit_group="hair_style"
1394 label_min="Front Hair"
1395 label_max="Front Hair Up"
1396 value_min="0"
1397 value_max="1"
1398 camera_elevation=".1"
1399 camera_distance=".5"
1400 camera_angle="20">
1401 <param_morph />
1402 </param>
1403
1404 <param
1405 id="173"
1406 group="1"
1407 name="Hair_Sides_Down"
1408 label="Sides Hair Down"
1409 wearable="hair"
1410 edit_group="hair_style"
1411 label_min="Sides Hair"
1412 label_max="Sides Hair Down"
1413 value_min="0"
1414 value_max="1"
1415 camera_elevation=".1"
1416 camera_distance=".5"
1417 camera_angle="20">
1418 <param_morph />
1419 </param>
1420
1421 <param
1422 id="174"
1423 group="1"
1424 name="Hair_Sides_Up"
1425 label="Sides Hair Up"
1426 wearable="hair"
1427 edit_group="hair_style"
1428 label_min="Sides Hair"
1429 label_max="Sides Hair Up"
1430 value_min="0"
1431 value_max="1"
1432 camera_elevation=".1"
1433 camera_distance=".5"
1434 camera_angle="20">
1435 <param_morph />
1436 </param>
1437
1438 <param
1439 id="175"
1440 group="1"
1441 name="Hair_Back_Down"
1442 label="Back Hair Down"
1443 clothing_morph="true"
1444 wearable="hair"
1445 edit_group="hair_style"
1446 label_min="Back Hair"
1447 label_max="Back Hair Down"
1448 value_min="0"
1449 value_max="3"
1450 camera_elevation=".1"
1451 camera_distance=".5"
1452 camera_angle="150">
1453 <param_morph />
1454 </param>
1455
1456 <param
1457 id="176"
1458 group="1"
1459 name="Hair_Back_Up"
1460 label="Back Hair Up"
1461 wearable="hair"
1462 edit_group="hair_style"
1463 label_min="Back Hair"
1464 label_max="Back Hair Up"
1465 value_min="0"
1466 value_max="1"
1467 camera_elevation=".1"
1468 camera_distance=".5"
1469 camera_angle="150">
1470 <param_morph />
1471 </param>
1472
1473 <param
1474 id="177"
1475 group="0"
1476 name="Hair_Rumpled"
1477 label="Rumpled Hair"
1478 show_simple="true"
1479 wearable="hair"
1480 clothing_morph="true"
1481 edit_group="hair_style"
1482 edit_group_order="14.5"
1483 label_min="Smooth Hair"
1484 label_max="Rumpled Hair"
1485 value_min="0"
1486 value_max="1"
1487 camera_elevation=".1"
1488 camera_distance=".5"
1489 camera_angle="20">
1490 <param_morph />
1491 </param>
1492
1493 <param
1494 id="178"
1495 group="1"
1496 name="Hair_Swept_Back"
1497 label="Swept Back Hair"
1498 wearable="hair"
1499 edit_group="hair_style"
1500 label_min="NotHair"
1501 label_max="Swept Back"
1502 value_min="0"
1503 value_max="1"
1504 camera_elevation=".1"
1505 camera_distance=".5"
1506 camera_angle="90">
1507 <param_morph />
1508 </param>
1509
1510 <param
1511 id="179"
1512 group="1"
1513 name="Hair_Swept_Forward"
1514 label="Swept Forward Hair"
1515 wearable="hair"
1516 edit_group="hair_style"
1517 label_min="Hair"
1518 label_max="Swept Forward"
1519 value_min="0"
1520 value_max="1"
1521 camera_elevation=".1"
1522 camera_distance=".5"
1523 camera_angle="90">
1524 <param_morph />
1525 </param>
1526
1527 <param
1528 id="190"
1529 group="1"
1530 name="Hair_Tilt_Right"
1531 label="Hair Tilted Right"
1532 wearable="hair"
1533 edit_group="hair_style"
1534 label_min="Hair"
1535 label_max="Tilt Right"
1536 value_min="0"
1537 value_max="1"
1538 camera_elevation=".1"
1539 camera_distance=".5"
1540 camera_angle="0">
1541 <param_morph />
1542 </param>
1543
1544 <param
1545 id="191"
1546 group="1"
1547 name="Hair_Tilt_Left"
1548 label="Hair Tilted Left"
1549 wearable="hair"
1550 edit_group="hair_style"
1551 label_min="Hair"
1552 label_max="Tilt Left"
1553 value_min="0"
1554 value_max="1"
1555 camera_elevation=".1"
1556 camera_distance=".5"
1557 camera_angle="0">
1558 <param_morph />
1559 </param>
1560
1561 <param
1562 id="192"
1563 group="0"
1564 name="Bangs_Part_Middle"
1565 label="Part Bangs"
1566 wearable="hair"
1567 edit_group="hair_style"
1568 edit_group_order="20"
1569 label_min="No Part"
1570 label_max="Part Bangs"
1571 value_min="0"
1572 value_max="1"
1573 camera_elevation=".1"
1574 camera_distance=".5"
1575 camera_angle="0">
1576 <param_morph />
1577 </param>
1578
1579 <param
1580 id="640"
1581 group="1"
1582 name="Hair_Egg_Head"
1583 wearable="hair"
1584 edit_group="hair_style"
1585 cross_wearable="true"
1586 value_min="-1.3"
1587 value_max="1">
1588 <param_morph />
1589 </param>
1590
1591 <param
1592 id="641"
1593 group="1"
1594 name="Hair_Squash_Stretch_Head"
1595 wearable="hair"
1596 edit_group="hair_style"
1597 cross_wearable="true"
1598 value_min="-.5"
1599 value_max="1">
1600 <param_morph />
1601 </param>
1602
1603 <param
1604 id="642"
1605 group="1"
1606 name="Hair_Square_Head"
1607 wearable="hair"
1608 edit_group="hair_style"
1609 cross_wearable="true"
1610 value_min="0"
1611 value_max="1">
1612 <param_morph />
1613 </param>
1614
1615 <param
1616 id="643"
1617 group="1"
1618 name="Hair_Round_Head"
1619 wearable="hair"
1620 edit_group="hair_style"
1621 cross_wearable="true"
1622 value_min="0"
1623 value_max="1">
1624 <param_morph />
1625 </param>
1626
1627 <param
1628 id="644"
1629 group="1"
1630 name="Hair_Forehead_Round"
1631 wearable="hair"
1632 edit_group="hair_style"
1633 cross_wearable="true"
1634 value_min="0"
1635 value_max="1">
1636 <param_morph />
1637 </param>
1638
1639 <param
1640 id="645"
1641 group="1"
1642 name="Hair_Forehead_Slant"
1643 wearable="hair"
1644 edit_group="hair_style"
1645 cross_wearable="true"
1646 value_min="0"
1647 value_max="1">
1648 <param_morph />
1649 </param>
1650
1651 <param
1652 id="774"
1653 group="1"
1654 name="Shear_Head_Hair"
1655 wearable="hair"
1656 edit_group="hair_style"
1657 cross_wearable="true"
1658 value_min="-2"
1659 value_max="2">
1660 <param_morph />
1661 </param>
1662
1663 <param
1664 id="771"
1665 group="1"
1666 name="Elongate_Head_Hair"
1667 wearable="hair"
1668 edit_group="hair_style"
1669 cross_wearable="true"
1670 value_min="-1"
1671 value_max="1">
1672 <param_morph />
1673 </param>
1674
1675 <param
1676 id="674"
1677 group="0"
1678 name="Hair_Shear_Back"
1679 wearable="hair"
1680 edit_group="hair_style"
1681 edit_group_order="12"
1682 label="Shear Back"
1683 label_min="Full Back"
1684 label_max="Sheared Back"
1685 value_min="-1"
1686 value_max="2"
1687 value_default="-0.3"
1688 camera_elevation=".1"
1689 camera_distance=".5"
1690 camera_angle="100">
1691 <param_morph />
1692 </param>
1693
1694 <param
1695 id="762"
1696 group="0"
1697 name="Hair_Shear_Front"
1698 wearable="hair"
1699 edit_group="hair_style"
1700 edit_group_order="11.8"
1701 label="Shear Front"
1702 show_simple="true"
1703 label_min="Full Front"
1704 label_max="Sheared Front"
1705 value_min="0"
1706 value_max="3"
1707 camera_elevation=".1"
1708 camera_distance=".5"
1709 camera_angle="30">
1710 <param_morph />
1711 </param>
1712
1713 <param
1714 id="754"
1715 group="0"
1716 name="Hair_Taper_Back"
1717 wearable="hair"
1718 edit_group="hair_style"
1719 edit_group_order="14"
1720 label="Taper Back"
1721 label_min="Wide Back"
1722 label_max="Narrow Back"
1723 value_min="-1"
1724 value_max="2"
1725 value_default="0"
1726 camera_elevation=".1"
1727 camera_distance=".5"
1728 camera_angle="160">
1729 <param_morph />
1730 </param>
1731
1732 <param
1733 id="755"
1734 group="0"
1735 name="Hair_Taper_Front"
1736 wearable="hair"
1737 edit_group="hair_style"
1738 edit_group_order="13"
1739 label="Taper Front"
1740 label_min="Wide Front"
1741 label_max="Narrow Front"
1742 value_min="-1.5"
1743 value_max="1.5"
1744 value_default="0.05"
1745 camera_elevation=".1"
1746 camera_distance=".5"
1747 camera_angle="20">
1748 <param_morph />
1749 </param>
1750
1751 <param
1752 id="782"
1753 group="1"
1754 clothing_morph="true"
1755 name="Hair_Pigtails_Short"
1756 wearable="hair"
1757 edit_group="hair_style"
1758 value_min="0"
1759 value_max="1">
1760 <param_morph />
1761 </param>
1762
1763 <param
1764 id="783"
1765 group="1"
1766 clothing_morph="true"
1767 name="Hair_Pigtails_Med"
1768 wearable="hair"
1769 edit_group="hair_style"
1770 value_min="0"
1771 value_max="1">
1772 <param_morph />
1773 </param>
1774
1775 <param
1776 id="790"
1777 group="1"
1778 clothing_morph="true"
1779 name="Hair_Pigtails_Medlong"
1780 wearable="hair"
1781 edit_group="hair_style"
1782 value_min="0"
1783 value_max="1">
1784 <param_morph />
1785 </param>
1786
1787 <param
1788 id="784"
1789 group="1"
1790 clothing_morph="true"
1791 name="Hair_Pigtails_Long"
1792 wearable="hair"
1793 edit_group="hair_style"
1794 value_min="0"
1795 value_max="1">
1796 <param_morph />
1797 </param>
1798
1799 <param
1800 id="786"
1801 group="1"
1802 name="Hair_Ponytail_Short"
1803 wearable="hair"
1804 edit_group="hair_style"
1805 value_min="0"
1806 value_max="1">
1807 <param_morph />
1808 </param>
1809
1810 <param
1811 id="787"
1812 group="1"
1813 name="Hair_Ponytail_Med"
1814 wearable="hair"
1815 edit_group="hair_style"
1816 value_min="0"
1817 value_max="1">
1818 <param_morph />
1819 </param>
1820
1821 <param
1822 id="788"
1823 group="1"
1824 name="Hair_Ponytail_Long"
1825 clothing_morph="true"
1826 wearable="hair"
1827 edit_group="hair_style"
1828 value_min="0"
1829 value_max="1">
1830 <param_morph />
1831 </param>
1832
1833 <!-- #end morph targets -->
1834 </mesh>
1835
1836 <mesh
1837 type="hairMesh"
1838 lod="1"
1839 file_name="avatar_hair_1.llm"
1840 min_pixel_width="160"
1841 reference="avatar_hair.llm">
1842 </mesh>
1843
1844 <mesh
1845 type="hairMesh"
1846 lod="2"
1847 file_name="avatar_hair_2.llm"
1848 min_pixel_width="80"
1849 reference="avatar_hair.llm">
1850 </mesh>
1851
1852 <mesh
1853 type="hairMesh"
1854 lod="3"
1855 file_name="avatar_hair_3.llm"
1856 min_pixel_width="40"
1857 reference="avatar_hair.llm">
1858 </mesh>
1859
1860 <mesh
1861 type="hairMesh"
1862 lod="4"
1863 file_name="avatar_hair_4.llm"
1864 min_pixel_width="20"
1865 reference="avatar_hair.llm">
1866 </mesh>
1867
1868 <mesh
1869 type="hairMesh"
1870 lod="5"
1871 file_name="avatar_hair_5.llm"
1872 min_pixel_width="0"
1873 reference="avatar_hair.llm">
1874 </mesh>
1875
1876 <mesh
1877 type="headMesh"
1878 lod="0"
1879 file_name="avatar_head.llm"
1880 min_pixel_width="320">
1881 <!--
1882 begin morph targets
1883 #############
1884 tweakable morphs
1885 #############
1886 -->
1887 <param
1888 id="1"
1889 group="0"
1890 name="Big_Brow"
1891 label="Brow Size"
1892 wearable="shape"
1893 edit_group="shape_head"
1894 edit_group_order="7"
1895 label_min="Small"
1896 label_max="Large"
1897 value_min="-.3"
1898 value_max="2"
1899 camera_elevation=".1"
1900 camera_distance=".4"
1901 camera_angle="45">
1902 <param_morph />
1903 </param>
1904
1905 <param
1906 id="2"
1907 group="0"
1908 name="Nose_Big_Out"
1909 label="Nose Size"
1910 wearable="shape"
1911 edit_group="shape_nose"
1912 edit_group_order="1"
1913 label_min="Small"
1914 label_max="Large"
1915 show_simple="true"
1916 value_min="-0.8"
1917 value_max="2.5"
1918 camera_elevation=".1"
1919 camera_distance=".35"
1920 camera_angle="50">
1921 <param_morph />
1922 </param>
1923
1924 <param
1925 id="4"
1926 group="0"
1927 name="Broad_Nostrils"
1928 label="Nostril Width"
1929 wearable="shape"
1930 edit_group="shape_nose"
1931 edit_group_order="3"
1932 label_min="Narrow"
1933 label_max="Broad"
1934 value_min="-.5"
1935 value_max="1"
1936 camera_elevation=".1"
1937 camera_distance=".3"
1938 camera_angle="-20">
1939 <param_morph />
1940 </param>
1941
1942 <param
1943 id="759"
1944 group="0"
1945 name="Low_Septum_Nose"
1946 label="Nostril Division"
1947 wearable="shape"
1948 edit_group="shape_nose"
1949 edit_group_order="3.5"
1950 label_min="High"
1951 label_max="Low"
1952 value_min="-1"
1953 value_max="1.5"
1954 value_default="0.5"
1955 camera_elevation=".1"
1956 camera_distance=".3"
1957 camera_angle="-20">
1958 <param_morph />
1959 </param>
1960
1961 <param
1962 id="517"
1963 group="0"
1964 name="Wide_Nose"
1965 label="Nose Width"
1966 wearable="shape"
1967 edit_group="shape_nose"
1968 edit_group_order="2"
1969 label_min="Narrow"
1970 label_max="Wide"
1971 show_simple="true"
1972 value_min="-.5"
1973 value_max="1"
1974 camera_elevation=".1"
1975 camera_distance=".3"
1976 camera_angle="-20">
1977 <param_morph />
1978 </param>
1979
1980 <param
1981 id="5"
1982 group="0"
1983 name="Cleft_Chin"
1984 label="Chin Cleft"
1985 wearable="shape"
1986 edit_group="shape_chin"
1987 edit_group_order="6"
1988 label_min="Round"
1989 label_max="Cleft"
1990 value_min="-.1"
1991 value_max="1"
1992 camera_elevation="0"
1993 camera_distance=".28"
1994 camera_angle="-20">
1995 <param_morph />
1996 </param>
1997
1998 <param
1999 id="6"
2000 group="0"
2001 name="Bulbous_Nose_Tip"
2002 label="Nose Tip Shape"
2003 wearable="shape"
2004 edit_group="shape_nose"
2005 edit_group_order="8"
2006 label_min="Pointy"
2007 label_max="Bulbous"
2008 value_min="-.3"
2009 value_max="1"
2010 camera_elevation=".1"
2011 camera_distance=".35"
2012 camera_angle="15">
2013 <param_morph />
2014 </param>
2015
2016 <param
2017 id="7"
2018 group="0"
2019 name="Weak_Chin"
2020 label="Chin Angle"
2021 wearable="shape"
2022 edit_group="shape_chin"
2023 edit_group_order="1"
2024 label_min="Chin Out"
2025 label_max="Chin In"
2026 value_min="-.5"
2027 value_max=".5"
2028 camera_elevation=".1"
2029 camera_distance=".4"
2030 camera_angle="45">
2031 <param_morph />
2032 </param>
2033
2034 <param
2035 id="8"
2036 group="0"
2037 name="Double_Chin"
2038 label="Chin-Neck"
2039 wearable="shape"
2040 edit_group="shape_chin"
2041 edit_group_order="8"
2042 label_min="Tight Chin"
2043 label_max="Double Chin"
2044 value_min="-.5"
2045 value_max="1.5"
2046 camera_elevation="-.1"
2047 camera_distance=".3"
2048 camera_angle="60">
2049 <param_morph />
2050 </param>
2051
2052 <param
2053 id="10"
2054 group="0"
2055 name="Sunken_Cheeks"
2056 label="Lower Cheeks"
2057 wearable="shape"
2058 edit_group="shape_head"
2059 edit_group_order="9"
2060 label_min="Well-Fed"
2061 label_max="Sunken"
2062 show_simple="true"
2063 value_min="-1.5"
2064 value_max="3"
2065 camera_elevation=".1"
2066 camera_distance=".4"
2067 camera_angle="5">
2068 <param_morph />
2069 </param>
2070
2071 <param
2072 id="11"
2073 group="0"
2074 name="Noble_Nose_Bridge"
2075 label="Upper Bridge"
2076 wearable="shape"
2077 edit_group="shape_nose"
2078 edit_group_order="5"
2079 label_min="Low"
2080 label_max="High"
2081 value_min="-.5"
2082 value_max="1.5"
2083 camera_elevation=".1"
2084 camera_distance=".35"
2085 camera_angle="70">
2086 <param_morph />
2087 </param>
2088
2089 <param
2090 id="758"
2091 group="0"
2092 name="Lower_Bridge_Nose"
2093 label="Lower Bridge"
2094 wearable="shape"
2095 edit_group="shape_nose"
2096 edit_group_order="5.5"
2097 label_min="Low"
2098 label_max="High"
2099 value_min="-1.5"
2100 value_max="1.5"
2101 camera_elevation=".1"
2102 camera_distance=".35"
2103 camera_angle="70">
2104 <param_morph />
2105 </param>
2106
2107 <param
2108 id="12"
2109 group="0"
2110 name="Jowls"
2111 wearable="shape"
2112 edit_group="shape_chin"
2113 edit_group_order="5"
2114 label_min="Less"
2115 label_max="More"
2116 value_min="-.5"
2117 value_max="2.5"
2118 camera_elevation=".1"
2119 camera_distance=".4"
2120 camera_angle="0">
2121 <param_morph />
2122 </param>
2123
2124 <param
2125 id="13"
2126 group="0"
2127 name="Cleft_Chin_Upper"
2128 label="Upper Chin Cleft"
2129 wearable="shape"
2130 edit_group="shape_chin"
2131 edit_group_order="7"
2132 label_min="Round"
2133 label_max="Cleft"
2134 value_min="0"
2135 value_max="1.5"
2136 camera_elevation="0"
2137 camera_distance=".28"
2138 camera_angle="-20">
2139 <param_morph />
2140 </param>
2141
2142 <param
2143 id="14"
2144 group="0"
2145 name="High_Cheek_Bones"
2146 label="Cheek Bones"
2147 wearable="shape"
2148 edit_group="shape_head"
2149 edit_group_order="10"
2150 label_min="Low"
2151 label_max="High"
2152 value_min="-.5"
2153 value_max="1"
2154 camera_elevation=".1"
2155 camera_distance=".3"
2156 camera_angle="-20">
2157 <param_morph />
2158 </param>
2159
2160 <param
2161 id="15"
2162 group="0"
2163 name="Ears_Out"
2164 label="Ear Angle"
2165 wearable="shape"
2166 edit_group="shape_ears"
2167 edit_group_order="2"
2168 label_min="In"
2169 label_max="Out"
2170 value_min="-.5"
2171 value_max="1.5"
2172 camera_elevation=".1"
2173 camera_distance=".3"
2174 camera_angle="-20">
2175 <param_morph />
2176 </param>
2177
2178 <!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
2179 <param
2180 id="870"
2181 group="1"
2182 name="Pointy_Eyebrows"
2183 label="Eyebrow Points"
2184 wearable="hair"
2185 edit_group="hair_eyebrows"
2186 edit_group_order="4"
2187 label_min="Smooth"
2188 label_max="Pointy"
2189 value_min="-.5"
2190 value_max="1"
2191 camera_elevation=".1"
2192 camera_distance=".3">
2193 <param_morph />
2194 </param>
2195
2196 <param
2197 id="17"
2198 group="0"
2199 name="Square_Jaw"
2200 label="Jaw Shape"
2201 wearable="shape"
2202 edit_group="shape_chin"
2203 edit_group_order="2"
2204 label_min="Pointy"
2205 label_max="Square"
2206 value_min="-.5"
2207 value_max="1"
2208 camera_distance=".3"
2209 camera_elevation=".04"
2210 camera_angle="-20">
2211 <param_morph />
2212 </param>
2213
2214 <param
2215 id="18"
2216 group="0"
2217 name="Puffy_Upper_Cheeks"
2218 label="Upper Cheeks"
2219 wearable="shape"
2220 edit_group="shape_head"
2221 edit_group_order="8"
2222 label_min="Thin"
2223 label_max="Puffy"
2224 value_min="-1.5"
2225 value_max="2.5"
2226 camera_elevation=".1"
2227 camera_distance=".3"
2228 camera_angle="-20">
2229 <param_morph />
2230 </param>
2231
2232 <param
2233 id="19"
2234 group="0"
2235 name="Upturned_Nose_Tip"
2236 label="Nose Tip Angle"
2237 wearable="shape"
2238 edit_group="shape_nose"
2239 edit_group_order="7"
2240 label_min="Downturned"
2241 label_max="Upturned"
2242 value_min="-1.5"
2243 value_max="1"
2244 camera_elevation=".1"
2245 camera_distance=".35"
2246 camera_angle="15">
2247 <param_morph />
2248 </param>
2249
2250 <param
2251 id="20"
2252 group="0"
2253 name="Bulbous_Nose"
2254 label="Nose Thickness"
2255 wearable="shape"
2256 edit_group="shape_nose"
2257 edit_group_order="4"
2258 label_min="Thin Nose"
2259 label_max="Bulbous Nose"
2260 show_simple="true"
2261 value_min="-.5"
2262 value_max="1.5"
2263 camera_elevation=".1"
2264 camera_distance=".3">
2265 <param_morph />
2266 </param>
2267
2268 <param
2269 id="21"
2270 group="0"
2271 name="Upper_Eyelid_Fold"
2272 label="Upper Eyelid Fold"
2273 wearable="shape"
2274 edit_group="shape_eyes"
2275 edit_group_order="5"
2276 label_min="Uncreased"
2277 label_max="Creased"
2278 value_min="-0.2"
2279 value_max="1.3"
2280 camera_elevation=".1"
2281 camera_distance=".35">
2282 <param_morph />
2283 </param>
2284
2285 <param
2286 id="22"
2287 group="0"
2288 name="Attached_Earlobes"
2289 label="Attached Earlobes"
2290 wearable="shape"
2291 edit_group="shape_ears"
2292 edit_group_order="3"
2293 label_min="Unattached"
2294 label_max="Attached"
2295 value_min="0"
2296 value_max="1"
2297 camera_elevation=".1"
2298 camera_distance=".3"
2299 camera_angle="45">
2300 <param_morph />
2301 </param>
2302
2303 <param
2304 id="23"
2305 group="0"
2306 name="Baggy_Eyes"
2307 label="Eye Bags"
2308 wearable="shape"
2309 edit_group="shape_eyes"
2310 edit_group_order="6"
2311 label_min="Smooth"
2312 label_max="Baggy"
2313 value_min="-.5"
2314 value_max="1.5"
2315 camera_elevation=".1"
2316 camera_distance=".35">
2317 <param_morph />
2318 </param>
2319
2320 <param
2321 id="765"
2322 group="0"
2323 name="Puffy_Lower_Lids"
2324 label="Puffy Eyelids"
2325 wearable="shape"
2326 edit_group="shape_eyes"
2327 edit_group_order="6.1"
2328 label_min="Flat"
2329 label_max="Puffy"
2330 value_min="-.3"
2331 value_max="2.5"
2332 camera_elevation=".1"
2333 camera_distance=".35">
2334 <param_morph />
2335 </param>
2336
2337 <param
2338 id="24"
2339 group="0"
2340 name="Wide_Eyes"
2341 label="Eye Opening"
2342 wearable="shape"
2343 edit_group="shape_eyes"
2344 edit_group_order="1.1"
2345 label_min="Narrow"
2346 label_max="Wide"
2347 value_min="-1.5"
2348 value_max="2"
2349 show_simple="true"
2350 camera_elevation=".1"
2351 camera_distance=".35">
2352 <param_morph />
2353 </param>
2354
2355 <param
2356 id="25"
2357 group="0"
2358 name="Wide_Lip_Cleft"
2359 label="Lip Cleft"
2360 wearable="shape"
2361 edit_group="shape_mouth"
2362 edit_group_order="6"
2363 label_min="Narrow"
2364 label_max="Wide"
2365 value_min="-.8"
2366 value_max="1.5"
2367 camera_elevation="0"
2368 camera_distance=".28">
2369 <param_morph />
2370 </param>
2371
2372 <param
2373 id="764"
2374 group="0"
2375 name="Lip_Cleft_Deep"
2376 label="Lip Cleft Depth"
2377 wearable="shape"
2378 edit_group="shape_mouth"
2379 edit_group_order="5.8"
2380 label_min="Shallow"
2381 label_max="Deep"
2382 value_min="-.5"
2383 value_max="1.2"
2384 camera_elevation="0"
2385 camera_distance=".28">
2386 <param_morph />
2387 </param>
2388
2389 <param
2390 id="26"
2391 group="1"
2392 wearable="shape"
2393 name="Lips_Thin"
2394 edit_group="driven"
2395 value_min="0"
2396 value_max=".7">
2397 <param_morph />
2398 </param>
2399
2400 <param
2401 id="27"
2402 group="0"
2403 name="Wide_Nose_Bridge"
2404 label="Bridge Width"
2405 wearable="shape"
2406 edit_group="shape_nose"
2407 edit_group_order="6"
2408 label_min="Narrow"
2409 label_max="Wide"
2410 value_min="-1.3"
2411 value_max="1.2"
2412 camera_elevation=".1"
2413 camera_distance=".3"
2414 camera_angle="-20">
2415 <param_morph />
2416 </param>
2417
2418 <param
2419 id="28"
2420 group="1"
2421 name="Lips_Fat"
2422 wearable="shape"
2423 edit_group="driven"
2424 value_min="0"
2425 value_max="2">
2426 <param_morph />
2427 </param>
2428
2429 <param
2430 id="29"
2431 group="1"
2432 name="Wide_Upper_Lip"
2433 wearable="shape"
2434 edit_group="driven"
2435 value_min="-.7"
2436 value_max="1.3">
2437 <param_morph />
2438 </param>
2439
2440 <param
2441 id="30"
2442 group="1"
2443 name="Wide_Lower_Lip"
2444 wearable="shape"
2445 edit_group="driven"
2446 value_min="-.7"
2447 value_max="1.3">
2448 <param_morph />
2449 </param>
2450
2451 <!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
2452 <param
2453 id="872"
2454 group="1"
2455 name="Arced_Eyebrows"
2456 label="Eyebrow Arc"
2457 wearable="hair"
2458 edit_group="hair_eyebrows"
2459 edit_group_order="3"
2460 label_min="Flat"
2461 label_max="Arced"
2462 value_min="0"
2463 value_max="1">
2464 <param_morph />
2465 </param>
2466
2467 <!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
2468 <param
2469 id="871"
2470 group="1"
2471 name="Lower_Eyebrows"
2472 label="Eyebrow Height"
2473 show_simple="true"
2474 wearable="hair"
2475 edit_group="hair_eyebrows"
2476 edit_group_order="2.5"
2477 label_min="Higher"
2478 label_max="Lower"
2479 value_min="-2"
2480 value_max="2">
2481 <param_morph />
2482 </param>
2483
2484 <param
2485 id="35"
2486 group="0"
2487 name="Big_Ears"
2488 label="Ear Size"
2489 wearable="shape"
2490 edit_group="shape_ears"
2491 edit_group_order="1"
2492 label_min="Small"
2493 label_max="Large"
2494 value_min="-1"
2495 value_max="2"
2496 camera_elevation=".1"
2497 camera_distance=".3"
2498 camera_angle="45">
2499 <param_morph />
2500 </param>
2501
2502 <param
2503 id="796"
2504 group="0"
2505 name="Pointy_Ears"
2506 label="Ear Tips"
2507 wearable="shape"
2508 edit_group="shape_ears"
2509 edit_group_order="4"
2510 label_min="Flat"
2511 label_max="Pointy"
2512 value_min="-.4"
2513 value_max="3"
2514 camera_elevation=".1"
2515 camera_distance=".3"
2516 camera_angle="45">
2517 <param_morph />
2518 </param>
2519
2520 <param
2521 id="185"
2522 group="0"
2523 name="Deep_Chin"
2524 label="Chin Depth"
2525 wearable="shape"
2526 edit_group="shape_chin"
2527 edit_group_order="3"
2528 label_min="Shallow"
2529 label_max="Deep"
2530 value_min="-1"
2531 value_max="1"
2532 camera_elevation=".1"
2533 camera_distance=".4"
2534 camera_angle="30">
2535 <param_morph />
2536 </param>
2537
2538 <param
2539 id="186"
2540 group="1"
2541 name="Egg_Head"
2542 label="Egg Head"
2543 wearable="shape"
2544 edit_group="shape_head"
2545 label_min="Chin Heavy"
2546 label_max="Forehead Heavy"
2547 value_min="-1.3"
2548 value_max="1"
2549 camera_elevation=".1"
2550 camera_distance=".5"
2551 camera_angle="20">
2552 <param_morph />
2553 </param>
2554
2555 <param
2556 id="187"
2557 group="1"
2558 name="Squash_Stretch_Head"
2559 label="Squash/Stretch Head"
2560 wearable="shape"
2561 edit_group="shape_head"
2562 label_min="Squash Head"
2563 label_max="Stretch Head"
2564 value_min="-.5"
2565 value_max="1"
2566 camera_elevation=".1"
2567 camera_distance=".5"
2568 camera_angle="20">
2569 <param_morph>
2570 <volume_morph
2571 name="HEAD"
2572 scale="-0.008 -0.006 0.015"/>
2573 </param_morph>
2574 </param>
2575
2576 <param
2577 id="188"
2578 group="1"
2579 name="Square_Head"
2580 wearable="shape"
2581 label_min="Less Square"
2582 label_max="More Square"
2583 value_min="0"
2584 value_max=".7"
2585 camera_elevation=".1"
2586 camera_distance=".5"
2587 camera_angle="20">
2588 <param_morph />
2589 </param>
2590
2591 <param
2592 id="189"
2593 group="1"
2594 wearable="shape"
2595 name="Round_Head"
2596 label_min="Less Round"
2597 label_max="More Round"
2598 value_min="0"
2599 value_max="1"
2600 camera_elevation=".1"
2601 camera_distance=".5"
2602 camera_angle="20">
2603 <param_morph />
2604 </param>
2605
2606 <param
2607 id="194"
2608 group="1"
2609 name="Eye_Spread"
2610 wearable="shape"
2611 edit_group="shape_eyes"
2612 label_min="Eyes Together"
2613 label_max="Eyes Spread"
2614 value_min="-2"
2615 value_max="2">
2616 <param_morph />
2617 </param>
2618
2619 <param
2620 id="400"
2621 sex="male"
2622 group="1"
2623 name="Displace_Hair_Facial"
2624 label="Hair Thickess"
2625 wearable="hair"
2626 edit_group="hair_facial"
2627 label_min="Cropped Hair"
2628 label_max="Bushy Hair"
2629 value_min="0"
2630 value_max="2">
2631 <param_morph />
2632 </param>
2633
2634 <param
2635 id="506"
2636 group="0"
2637 name="Mouth_Height"
2638 wearable="shape"
2639 label="Mouth Position"
2640 show_simple="true"
2641 edit_group="shape_mouth"
2642 edit_group_order="4"
2643 label_min="High"
2644 label_max="Low"
2645 value_min="-2"
2646 value_max="2"
2647 camera_distance=".3"
2648 camera_elevation=".04">
2649 <param_morph />
2650 </param>
2651
2652 <param
2653 id="633"
2654 group="1"
2655 name="Fat_Head"
2656 label="Fat Head"
2657 wearable="shape"
2658 edit_group="shape_body"
2659 label_min="Skinny"
2660 label_max="Fat"
2661 value_min="0"
2662 value_max="1"
2663 camera_elevation=".3">
2664 <param_morph/>
2665 </param>
2666
2667 <param
2668 id="630"
2669 group="1"
2670 name="Forehead_Round"
2671 label="Round Forehead"
2672 wearable="shape"
2673 label_min="Less"
2674 label_max="More"
2675 value_min="0"
2676 value_max="1">
2677 <param_morph />
2678 </param>
2679
2680 <param
2681 id="631"
2682 group="1"
2683 name="Forehead_Slant"
2684 label="Slanted Forehead"
2685 wearable="shape"
2686 label_min="Less"
2687 label_max="More"
2688 value_min="0"
2689 value_max="1">
2690 <param_morph />
2691 </param>
2692
2693 <param
2694 id="650"
2695 group="0"
2696 name="Eyelid_Corner_Up"
2697 label="Outer Eye Corner"
2698 wearable="shape"
2699 edit_group="shape_eyes"
2700 edit_group_order="4"
2701 label_min="Corner Down"
2702 label_max="Corner Up"
2703 value_min="-1.3"
2704 value_max="1.2"
2705 camera_elevation=".1"
2706 camera_distance=".30">
2707 <param_morph />
2708 </param>
2709
2710 <param
2711 id="880"
2712 group="0"
2713 name="Eyelid_Inner_Corner_Up"
2714 label="Inner Eye Corner"
2715 wearable="shape"
2716 edit_group="shape_eyes"
2717 edit_group_order="4.2"
2718 label_min="Corner Down"
2719 label_max="Corner Up"
2720 value_min="-1.3"
2721 value_max="1.2"
2722 camera_elevation=".1"
2723 camera_distance=".30">
2724 <param_morph />
2725 </param>
2726
2727
2728 <param
2729 id="653"
2730 group="0"
2731 name="Tall_Lips"
2732 wearable="shape"
2733 label="Lip Fullness"
2734 show_simple="true"
2735 edit_group="shape_mouth"
2736 edit_group_order="2"
2737 label_min="Less Full"
2738 label_max="More Full"
2739 value_min="-1"
2740 value_max="2"
2741 camera_distance=".3"
2742 camera_elevation=".04">
2743 <param_morph />
2744 </param>
2745
2746 <param
2747 id="656"
2748 group="0"
2749 name="Crooked_Nose"
2750 wearable="shape"
2751 label="Crooked Nose"
2752 edit_group="shape_nose"
2753 edit_group_order="9"
2754 label_min="Nose Left"
2755 label_max="Nose Right"
2756 value_min="-2"
2757 value_max="2"
2758 camera_distance=".3"
2759 camera_elevation=".04"
2760 camera_angle="-20">
2761 <param_morph />
2762 </param>
2763
2764 <param
2765 id="657"
2766 group="1"
2767 name="Smile_Mouth"
2768 wearable="shape"
2769 label="Mouth Corner"
2770 edit_group="shape_mouth"
2771 label_min="Corner Normal"
2772 label_max="Corner Up"
2773 value_min="0"
2774 value_max="1.4"
2775 camera_distance=".3"
2776 camera_elevation=".04">
2777 <param_morph />
2778 </param>
2779
2780 <param
2781 id="658"
2782 group="1"
2783 name="Frown_Mouth"
2784 wearable="shape"
2785 label="Mouth Corner"
2786 edit_group="shape_mouth"
2787 label_min="Corner Normal"
2788 label_max="Corner Down"
2789 value_min="0"
2790 value_max="1.2"
2791 camera_distance=".3"
2792 camera_elevation=".04">
2793 <param_morph />
2794 </param>
2795
2796 <param
2797 id="797"
2798 group="1"
2799 name="Fat_Upper_Lip"
2800 wearable="shape"
2801 label="Fat Upper Lip"
2802 edit_group="shape_mouth"
2803 label_min="Normal Upper"
2804 label_max="Fat Upper"
2805 value_min="0"
2806 value_max="1.5"
2807 camera_distance=".3"
2808 camera_elevation=".04">
2809 <param_morph />
2810 </param>
2811
2812 <param
2813 id="798"
2814 group="1"
2815 name="Fat_Lower_Lip"
2816 wearable="shape"
2817 label="Fat Lower Lip"
2818 edit_group="shape_mouth"
2819 label_min="Normal Lower"
2820 label_max="Fat Lower"
2821 value_min="0"
2822 value_max="1.5"
2823 camera_distance=".3"
2824 camera_elevation=".04">
2825 <param_morph />
2826 </param>
2827
2828 <param
2829 id="660"
2830 group="1"
2831 name="Shear_Head"
2832 wearable="shape"
2833 label="Shear Face"
2834 edit_group="shape_head"
2835 label_min="Shear Left"
2836 label_max="Shear Right"
2837 value_min="-2"
2838 value_max="2"
2839 value_default="0"
2840 camera_distance=".5"
2841 camera_elevation=".04">
2842 <param_morph />
2843 </param>
2844
2845 <param
2846 id="770"
2847 group="1"
2848 name="Elongate_Head"
2849 wearable="shape"
2850 label="Shear Face"
2851 edit_group="shape_head"
2852 label_min="Flat Head"
2853 label_max="Long Head"
2854 value_min="-1"
2855 value_max="1"
2856 value_default="0"
2857 camera_distance=".5"
2858 camera_elevation=".04">
2859 <param_morph>
2860 <volume_morph
2861 name="HEAD"
2862 scale="0.02 0.0 0.0"/>
2863 </param_morph>
2864 </param>
2865
2866 <param
2867 id="663"
2868 group="0"
2869 name="Shift_Mouth"
2870 wearable="shape"
2871 label="Shift Mouth"
2872 edit_group="shape_mouth"
2873 edit_group_order="7"
2874 label_min="Shift Left"
2875 label_max="Shift Right"
2876 value_min="-2"
2877 value_max="2"
2878 value_default="0"
2879 camera_distance=".35"
2880 camera_elevation=".04"
2881 camera_angle="-20">
2882 <param_morph />
2883 </param>
2884
2885 <param
2886 id="664"
2887 group="0"
2888 name="Pop_Eye"
2889 wearable="shape"
2890 label="Eye Pop"
2891 edit_group="shape_eyes"
2892 edit_group_order="8"
2893 label_min="Pop Right Eye"
2894 label_max="Pop Left Eye"
2895 value_min="-1.3"
2896 value_max="1.3"
2897 value_default="0"
2898 camera_elevation=".1"
2899 camera_distance=".35">
2900 <param_morph />
2901 </param>
2902
2903 <param
2904 id="760"
2905 group="0"
2906 name="Jaw_Angle"
2907 wearable="shape"
2908 label="Jaw Angle"
2909 edit_group="shape_chin"
2910 edit_group_order="3.5"
2911 label_min="Low Jaw"
2912 label_max="High Jaw"
2913 value_min="-1.2"
2914 value_max="2"
2915 value_default="0"
2916 camera_distance=".5"
2917 camera_elevation=".04"
2918 camera_angle="70">
2919 <param_morph />
2920 </param>
2921
2922 <param
2923 id="665"
2924 group="0"
2925 name="Jaw_Jut"
2926 wearable="shape"
2927 label="Jaw Jut"
2928 edit_group="shape_chin"
2929 edit_group_order="4"
2930 label_min="Overbite"
2931 label_max="Underbite"
2932 value_min="-2"
2933 value_max="2"
2934 value_default="0"
2935 camera_distance=".5"
2936 camera_elevation=".04"
2937 camera_angle="70">
2938 <param_morph />
2939 </param>
2940
2941 <param
2942 id="686"
2943 group="1"
2944 name="Head_Eyes_Big"
2945 wearable="shape"
2946 label="Eye Size"
2947 edit_group="shape_eyes"
2948 label_min="Beady Eyes"
2949 label_max="Anime Eyes"
2950 show_simple="true"
2951 value_min="-2"
2952 value_max="2"
2953 value_default="0">
2954 <param_morph />
2955 </param>
2956
2957 <param
2958 id="767"
2959 group="1"
2960 name="Bug_Eyed_Head"
2961 wearable="shape"
2962 label="Eye Depth"
2963 edit_group="shape_eyes"
2964 edit_group_order="4.5"
2965 label_min="Sunken Eyes"
2966 label_max="Bug Eyes"
2967 value_min="-2"
2968 value_max="2"
2969 value_default="0">
2970 <param_morph />
2971 </param>
2972
2973 <!--
2974 #Fat_Lips = Fat_Lips 34 1 0 1
2975 #Wide_Lips = Wide_Lips 35 1 0 1
2976 #Wide_Nose = Wide_Nose 36 1 0 1
2977 -->
2978 <!--
2979 ##############
2980 # Facial Expression morphs
2981 ##############
2982 -->
2983 <param
2984 id="300"
2985 group="1"
2986 name="Express_Closed_Mouth"
2987 value_default="1"
2988 value_min="0"
2989 value_max="1">
2990 <param_morph />
2991 </param>
2992
2993 <param
2994 id="301"
2995 group="1"
2996 name="Express_Tongue_Out"
2997 value_min="0"
2998 value_max="1">
2999 <param_morph />
3000 </param>
3001
3002 <param
3003 id="302"
3004 group="1"
3005 name="Express_Surprise_Emote"
3006 value_min="0"
3007 value_max="1">
3008 <param_morph />
3009 </param>
3010
3011 <param
3012 id="303"
3013 group="1"
3014 name="Express_Wink_Emote"
3015 value_min="0"
3016 value_max="1">
3017 <param_morph />
3018 </param>
3019
3020 <param
3021 id="304"
3022 group="1"
3023 name="Express_Embarrassed_Emote"
3024 value_min="0"
3025 value_max="1">
3026 <param_morph />
3027 </param>
3028
3029 <param
3030 id="305"
3031 group="1"
3032 name="Express_Shrug_Emote"
3033 value_min="0"
3034 value_max="1">
3035 <param_morph />
3036 </param>
3037
3038 <param
3039 id="306"
3040 group="1"
3041 name="Express_Kiss"
3042 value_min="0"
3043 value_max="1">
3044 <param_morph />
3045 </param>
3046
3047 <param
3048 id="307"
3049 group="1"
3050 name="Express_Bored_Emote"
3051 value_min="0"
3052 value_max="1">
3053 <param_morph />
3054 </param>
3055
3056 <param
3057 id="308"
3058 group="1"
3059 name="Express_Repulsed_Emote"
3060 value_min="0"
3061 value_max="1">
3062 <param_morph />
3063 </param>
3064
3065 <param
3066 id="309"
3067 group="1"
3068 name="Express_Disdain"
3069 value_min="0"
3070 value_max="1">
3071 <param_morph />
3072 </param>
3073
3074 <param
3075 id="310"
3076 group="1"
3077 name="Express_Afraid_Emote"
3078 value_min="0"
3079 value_max="1">
3080 <param_morph />
3081 </param>
3082
3083 <param
3084 id="311"
3085 group="1"
3086 name="Express_Worry_Emote"
3087 value_min="0"
3088 value_max="1">
3089 <param_morph />
3090 </param>
3091
3092 <param
3093 id="312"
3094 group="1"
3095 name="Express_Cry_Emote"
3096 value_min="0"
3097 value_max="1">
3098 <param_morph />
3099 </param>
3100
3101 <param
3102 id="313"
3103 group="1"
3104 name="Express_Sad_Emote"
3105 value_min="0"
3106 value_max="1">
3107 <param_morph />
3108 </param>
3109
3110 <param
3111 id="314"
3112 group="1"
3113 name="Express_Anger_Emote"
3114 value_min="0"
3115 value_max="1">
3116 <param_morph />
3117 </param>
3118
3119 <param
3120 id="315"
3121 group="1"
3122 name="Express_Frown"
3123 value_min="0"
3124 value_max="1">
3125 <param_morph />
3126 </param>
3127
3128 <param
3129 id="316"
3130 group="1"
3131 name="Express_Laugh_Emote"
3132 value_min="0"
3133 value_max="1">
3134 <param_morph />
3135 </param>
3136
3137 <param
3138 id="317"
3139 group="1"
3140 name="Express_Toothsmile"
3141 value_min="0"
3142 value_max="1">
3143 <param_morph />
3144 </param>
3145
3146 <param
3147 id="318"
3148 group="1"
3149 name="Express_Smile"
3150 value_min="0"
3151 value_max="1">
3152 <param_morph />
3153 </param>
3154
3155 <param
3156 id="632"
3157 group="1"
3158 name="Express_Open_Mouth"
3159 value_min="0"
3160 value_max="1">
3161 <param_morph />
3162 </param>
3163
3164 <!--
3165 ##############
3166 # Lipsync morphs
3167 ##############
3168 -->
3169
3170 <param
3171 id="70"
3172 group="1"
3173 name="Lipsync_Aah"
3174 value_min="0"
3175 value_max="1">
3176 <param_morph />
3177 </param>
3178
3179 <param
3180 id="71"
3181 group="1"
3182 name="Lipsync_Ooh"
3183 value_min="0"
3184 value_max="1">
3185 <param_morph />
3186 </param>
3187
3188 <!--
3189 ##############
3190 # other morphs (not user controlled)
3191 ##############
3192 -->
3193 <param
3194 id="40"
3195 group="1"
3196 name="Male_Head"
3197 wearable="shape"
3198 edit_group="driven"
3199 value_min="0"
3200 value_max="1">
3201 <param_morph />
3202 </param>
3203
3204 <param
3205 id="41"
3206 group="1"
3207 name="Old"
3208 value_min="0"
3209 value_max="1">
3210 <param_morph />
3211 </param>
3212
3213 <!--
3214 ##############
3215 # animatable morphs
3216 ##############
3217 -->
3218 <param
3219 id="51"
3220 group="1"
3221 name="Furrowed_Eyebrows"
3222 value_min="0"
3223 value_max="1">
3224 <param_morph />
3225 </param>
3226
3227 <param
3228 id="53"
3229 group="1"
3230 name="Surprised_Eyebrows"
3231 value_min="0"
3232 value_max="1">
3233 <param_morph />
3234 </param>
3235
3236 <param
3237 id="54"
3238 group="1"
3239 name="Worried_Eyebrows"
3240 value_min="0"
3241 value_max="1">
3242 <param_morph />
3243 </param>
3244
3245 <param
3246 id="55"
3247 group="1"
3248 name="Frown_Mouth"
3249 value_min="0"
3250 value_max="1">
3251 <param_morph />
3252 </param>
3253
3254 <param
3255 id="57"
3256 group="1"
3257 name="Smile_Mouth"
3258 value_min="0"
3259 value_max="1">
3260 <param_morph />
3261 </param>
3262
3263 <param
3264 id="58"
3265 group="1"
3266 name="Blink_Left"
3267 value_min="0"
3268 value_max="1">
3269 <param_morph />
3270 </param>
3271
3272 <param
3273 id="59"
3274 group="1"
3275 name="Blink_Right"
3276 value_min="0"
3277 value_max="1">
3278 <param_morph />
3279 </param>
3280
3281 <!--
3282 #end morph targets
3283 -->
3284 </mesh>
3285
3286 <mesh
3287 type="headMesh"
3288 lod="1"
3289 file_name="avatar_head_1.llm"
3290 min_pixel_width="160"
3291 reference="avatar_head.llm">
3292 </mesh>
3293
3294 <mesh
3295 type="headMesh"
3296 lod="2"
3297 file_name="avatar_head_2.llm"
3298 min_pixel_width="80"
3299 reference="avatar_head.llm">
3300 </mesh>
3301
3302 <mesh
3303 type="headMesh"
3304 lod="3"
3305 file_name="avatar_head_3.llm"
3306 min_pixel_width="40"
3307 reference="avatar_head.llm">
3308 </mesh>
3309
3310 <mesh
3311 type="headMesh"
3312 lod="4"
3313 file_name="avatar_head_4.llm"
3314 min_pixel_width="0"
3315 reference="avatar_head.llm">
3316 </mesh>
3317
3318 <mesh
3319 type="eyelashMesh"
3320 lod="0"
3321 file_name="avatar_eyelashes.llm"
3322 min_pixel_width="320">
3323 <param
3324 shared="1"
3325 id="660"
3326 group="1"
3327 name="Shear_Head"
3328 wearable="shape"
3329 label="Shear Face"
3330 edit_group="shape_head"
3331 label_min="Shear Left"
3332 label_max="Shear Right"
3333 value_min="-2"
3334 value_max="2"
3335 value_default="0"
3336 camera_distance=".5"
3337 camera_elevation=".04">
3338 <param_morph />
3339 </param>
3340
3341 <param
3342 shared="1"
3343 id="770"
3344 group="1"
3345 name="Elongate_Head"
3346 wearable="shape"
3347 label="Shear Face"
3348 edit_group="shape_head"
3349 label_min="Flat Head"
3350 label_max="Long Head"
3351 value_min="-1"
3352 value_max="1"
3353 value_default="0"
3354 camera_distance=".5"
3355 camera_elevation=".04">
3356 <param_morph />
3357 </param>
3358
3359 <param
3360 shared="1"
3361 id="664"
3362 group="0"
3363 name="Pop_Eye"
3364 wearable="shape"
3365 label="Eye Pop"
3366 edit_group="shape_eyes"
3367 edit_group_order="8"
3368 label_min="Pop Right Eye"
3369 label_max="Pop Left Eye"
3370 value_min="-2"
3371 value_max="2"
3372 value_default="0"
3373 camera_distance=".5"
3374 camera_elevation=".04"
3375 camera_angle="-20">
3376 <param_morph />
3377 </param>
3378
3379 <param
3380 shared="1"
3381 id="21"
3382 group="0"
3383 name="Upper_Eyelid_Fold"
3384 label="Upper Eyelid Fold"
3385 wearable="shape"
3386 edit_group="shape_eyes"
3387 label_min="Uncreased"
3388 label_max="Creased"
3389 value_min="-0.2"
3390 value_max="1.3"
3391 camera_elevation=".1"
3392 camera_distance=".35">
3393 <param_morph />
3394 </param>
3395
3396 <param
3397 shared="1"
3398 id="24"
3399 group="0"
3400 name="Wide_Eyes"
3401 label="Eye Opening"
3402 wearable="shape"
3403 edit_group="shape_eyes"
3404 label_min="Narrow"
3405 label_max="Wide"
3406 show_simple="true"
3407 value_min="-1.5"
3408 value_max="2"
3409 camera_elevation=".1"
3410 camera_distance=".3">
3411 <param_morph />
3412 </param>
3413
3414 <param
3415 shared="1"
3416 id="186"
3417 group="1"
3418 name="Egg_Head"
3419 label="Egg Head"
3420 wearable="shape"
3421 edit_group="shape_head"
3422 label_min="Chin Heavy"
3423 label_max="Forehead Heavy"
3424 value_min="-1.3"
3425 value_max="1"
3426 camera_elevation=".1"
3427 camera_distance=".5"
3428 camera_angle="20">
3429 <param_morph />
3430 </param>
3431
3432 <param
3433 shared="1"
3434 id="187"
3435 group="1"
3436 name="Squash_Stretch_Head"
3437 label="Squash/Stretch Head"
3438 wearable="shape"
3439 edit_group="shape_head"
3440 label_min="Squash Head"
3441 label_max="Stretch Head"
3442 value_min="-.5"
3443 value_max="1"
3444 camera_elevation=".1"
3445 camera_distance=".5"
3446 camera_angle="20">
3447 <param_morph />
3448 </param>
3449
3450 <param
3451 shared="1"
3452 id="194"
3453 group="1"
3454 name="Eye_Spread"
3455 edit_group="shape_eyes"
3456 label_min="Eyes Together"
3457 label_max="Eyes Spread"
3458 value_min="-2"
3459 value_max="2">
3460 <param_morph />
3461 </param>
3462
3463 <param
3464 id="518"
3465 group="0"
3466 name="Eyelashes_Long"
3467 wearable="shape"
3468 label="Eyelash Length"
3469 edit_group="shape_eyes"
3470 edit_group_order="7"
3471 label_min="Short"
3472 label_max="Long"
3473 value_min="-.3"
3474 value_max="1.5"
3475 camera_elevation=".1"
3476 camera_distance=".30"
3477 camera_angle="-20">
3478 <param_morph />
3479 </param>
3480
3481 <param
3482 shared="1"
3483 id="650"
3484 group="0"
3485 name="Eyelid_Corner_Up"
3486 label="Outer Eye Corner"
3487 wearable="shape"
3488 edit_group="shape_eyes"
3489 label_min="Corner Down"
3490 label_max="Corner Up"
3491 value_min="-1.3"
3492 value_max="1.2"
3493 camera_elevation=".1"
3494 camera_distance=".3">
3495 <param_morph />
3496 </param>
3497
3498
3499 <param
3500 shared="1"
3501 id="880"
3502 group="0"
3503 name="Eyelid_Inner_Corner_Up"
3504 label="Inner Eye Corner"
3505 wearable="shape"
3506 edit_group="shape_eyes"
3507 label_min="Corner Down"
3508 label_max="Corner Up"
3509 value_min="-1.3"
3510 value_max="1.2"
3511 camera_elevation=".1"
3512 camera_distance=".3">
3513 <param_morph />
3514 </param>
3515
3516 <param
3517 shared="1"
3518 id="686"
3519 group="1"
3520 name="Head_Eyes_Big"
3521 wearable="shape"
3522 label="Eye Size"
3523 edit_group="shape_eyes"
3524 label_min="Beady Eyes"
3525 label_max="Anime Eyes"
3526 value_min="-2"
3527 value_max="2"
3528 show_simple="true"
3529 value_default="0">
3530 <param_morph />
3531 </param>
3532
3533 <param
3534 shared="1"
3535 id="767"
3536 group="1"
3537 name="Bug_Eyed_Head"
3538 wearable="shape"
3539 label="Eye Depth"
3540 edit_group="shape_eyes"
3541 edit_group_order="4.5"
3542 label_min="Sunken Eyes"
3543 label_max="Bug Eyes"
3544 value_min="-2"
3545 value_max="2"
3546 value_default="0">
3547 <param_morph />
3548 </param>
3549
3550 <!--
3551 ##############
3552 # Facial Expression morphs
3553 ##############
3554 -->
3555 <param
3556 shared="1"
3557 id="301"
3558 group="1"
3559 name="Express_Tongue_Out"
3560 value_min="0"
3561 value_max="1">
3562 <param_morph />
3563 </param>
3564
3565 <param
3566 shared="1"
3567 id="302"
3568 group="1"
3569 name="Express_Surprise_Emote"
3570 value_min="0"
3571 value_max="1">
3572 <param_morph />
3573 </param>
3574
3575 <param
3576 shared="1"
3577 id="303"
3578 group="1"
3579 name="Express_Wink_Emote"
3580 value_min="0"
3581 value_max="1">
3582 <param_morph />
3583 </param>
3584
3585 <param
3586 shared="1"
3587 id="304"
3588 group="1"
3589 name="Express_Embarrassed_Emote"
3590 value_min="0"
3591 value_max="1">
3592 <param_morph />
3593 </param>
3594
3595 <param
3596 shared="1"
3597 id="305"
3598 group="1"
3599 name="Express_Shrug_Emote"
3600 value_min="0"
3601 value_max="1">
3602 <param_morph />
3603 </param>
3604
3605 <param
3606 shared="1"
3607 id="306"
3608 group="1"
3609 name="Express_Kiss"
3610 value_min="0"
3611 value_max="1">
3612 <param_morph />
3613 </param>
3614
3615 <param
3616 shared="1"
3617 id="307"
3618 group="1"
3619 name="Express_Bored_Emote"
3620 value_min="0"
3621 value_max="1">
3622 <param_morph />
3623 </param>
3624
3625 <param
3626 shared="1"
3627 id="308"
3628 group="1"
3629 name="Express_Repulsed_Emote"
3630 value_min="0"
3631 value_max="1">
3632 <param_morph />
3633 </param>
3634
3635 <param
3636 shared="1"
3637 id="309"
3638 group="1"
3639 name="Express_Disdain"
3640 value_min="0"
3641 value_max="1">
3642 <param_morph />
3643 </param>
3644
3645 <param
3646 shared="1"
3647 id="310"
3648 group="1"
3649 name="Express_Afraid_Emote"
3650 value_min="0"
3651 value_max="1">
3652 <param_morph />
3653 </param>
3654
3655 <param
3656 shared="1"
3657 id="312"
3658 group="1"
3659 name="Express_Cry_Emote"
3660 value_min="0"
3661 value_max="1">
3662 <param_morph />
3663 </param>
3664
3665 <param
3666 shared="1"
3667 id="313"
3668 group="1"
3669 name="Express_Sad_Emote"
3670 value_min="0"
3671 value_max="1">
3672 <param_morph />
3673 </param>
3674
3675 <param
3676 shared="1"
3677 id="314"
3678 group="1"
3679 name="Express_Anger_Emote"
3680 value_min="0"
3681 value_max="1">
3682 <param_morph />
3683 </param>
3684
3685 <param
3686 shared="1"
3687 id="315"
3688 group="1"
3689 name="Express_Frown"
3690 value_min="0"
3691 value_max="1">
3692 <param_morph />
3693 </param>
3694
3695 <param
3696 shared="1"
3697 id="316"
3698 group="1"
3699 name="Express_Laugh_Emote"
3700 value_min="0"
3701 value_max="1">
3702 <param_morph />
3703 </param>
3704
3705 <param
3706 shared="1"
3707 id="317"
3708 group="1"
3709 name="Express_Toothsmile"
3710 value_min="0"
3711 value_max="1">
3712 <param_morph />
3713 </param>
3714
3715 <param
3716 shared="1"
3717 id="318"
3718 group="1"
3719 name="Express_Smile"
3720 value_min="0"
3721 value_max="1">
3722 <param_morph />
3723 </param>
3724
3725 <!--
3726 ##############
3727 # other morphs (not user controlled)
3728 ##############
3729 -->
3730 <param
3731 shared="1"
3732 id="41"
3733 group="1"
3734 name="Old"
3735 value_min="0"
3736 value_max="1">
3737 <param_morph />
3738 </param>
3739
3740 <!--
3741 ##############
3742 # animatable morphs
3743 ##############
3744 -->
3745 <param
3746 shared="1"
3747 id="58"
3748 group="1"
3749 name="Blink_Left"
3750 value_min="0"
3751 value_max="1">
3752 <param_morph />
3753 </param>
3754
3755 <param
3756 shared="1"
3757 id="59"
3758 group="1"
3759 name="Blink_Right"
3760 value_min="0"
3761 value_max="1">
3762 <param_morph />
3763 </param>
3764 </mesh>
3765
3766 <!--
3767 #headMesh2 =
3768 #headMesh3 =
3769 -->
3770 <mesh
3771 type="upperBodyMesh"
3772 lod="0"
3773 file_name="avatar_upper_body.llm"
3774 min_pixel_width="320">
3775 <!--
3776 #begin morph targets
3777 #############
3778 # tweakable morphs
3779 #############
3780 -->
3781 <param
3782 id="104"
3783 group="1"
3784 name="Big_Belly_Torso"
3785 wearable="shape"
3786 edit_group="driven"
3787 value_min="0"
3788 value_max="1">
3789 <param_morph>
3790 <volume_morph
3791 name="BELLY"
3792 scale="0.075 0.04 0.03"
3793 pos="0.07 0 -0.07"/>
3794 </param_morph>
3795 </param>
3796
3797 <param
3798 id="626"
3799 sex="female"
3800 group="1"
3801 name="Big_Chest"
3802 label="Chest Size"
3803 wearable="shape"
3804 edit_group="shape_torso"
3805 label_min="Small"
3806 label_max="Large"
3807 value_min="0"
3808 value_max="1"
3809 camera_elevation=".1"
3810 camera_distance="1"
3811 camera_angle="15">
3812 <param_morph />
3813 </param>
3814
3815 <param
3816 id="627"
3817 sex="female"
3818 group="1"
3819 name="Small_Chest"
3820 label="Chest Size"
3821 wearable="shape"
3822 edit_group="shape_torso"
3823 label_min="Large"
3824 label_max="Small"
3825 value_min="0"
3826 value_max="1"
3827 camera_elevation="0"
3828 camera_distance=".28">
3829 <param_morph />
3830 </param>
3831
3832 <param
3833 id="843"
3834 sex="female"
3835 group="1"
3836 name="No_Chest"
3837 label="Chest Size"
3838 wearable="shape"
3839 edit_group="shape_torso"
3840 label_min="Some"
3841 label_max="None"
3842 value_min="0"
3843 value_max="1"
3844 camera_elevation="0"
3845 camera_distance=".28">
3846 <param_morph />
3847 </param>
3848
3849 <param
3850 id="106"
3851 group="1"
3852 name="Muscular_Torso"
3853 label="Torso Muscles"
3854 show_simple="true"
3855 wearable="shape"
3856 edit_group="shape_torso"
3857 label_min="Regular"
3858 label_max="Muscular"
3859 value_min="0"
3860 value_max="1.4"
3861 camera_elevation=".3"
3862 camera_distance="1.2">
3863 <param_morph>
3864 <volume_morph
3865 name="L_CLAVICLE"
3866 scale="0.02 0.0 0.005"
3867 pos="0.0 0 0.005"/>
3868 <volume_morph
3869 name="L_UPPER_ARM"
3870 scale="0.015 0.0 0.005"
3871 pos="0.015 0 0"/>
3872 <volume_morph
3873 name="L_LOWER_ARM"
3874 scale="0.005 0.0 0.005"
3875 pos="0.005 0 0"/>
3876 <volume_morph
3877 name="R_CLAVICLE"
3878 scale="0.02 0.0 0.005"
3879 pos="0.0 0 0.005"/>
3880 <volume_morph
3881 name="R_UPPER_ARM"
3882 scale="0.015 0.0 0.005"
3883 pos="0.015 0 0"/>
3884 <volume_morph
3885 name="R_LOWER_ARM"
3886 scale="0.005 0.0 0.005"
3887 pos="0.005 0 0"/>
3888 </param_morph>
3889 </param>
3890
3891 <param
3892 id="648"
3893 group="1"
3894 sex="female"
3895 name="Scrawny_Torso"
3896 label="Torso Muscles"
3897 show_simple="true"
3898 wearable="shape"
3899 edit_group="shape_torso"
3900 label_min="Regular"
3901 label_max="Scrawny"
3902 value_min="0"
3903 value_max="1.3"
3904 camera_elevation=".3"
3905 camera_distance="1.2">
3906 <param_morph>
3907 <volume_morph
3908 name="BELLY"
3909 scale="0.0 -0.01 0.0"
3910 pos="0.0 0.0 0"/>
3911 <volume_morph
3912 name="CHEST"
3913 scale="-0.01 -0.01 0.0"
3914 pos="0.01 0.0 0"/>
3915 <volume_morph
3916 name="L_CLAVICLE"
3917 scale="0.0 -0.03 -0.005"
3918 pos="0.0 0 -0.005"/>
3919 <volume_morph
3920 name="L_UPPER_ARM"
3921 scale="-0.01 -0.01 -0.02"
3922 pos="0 0 0"/>
3923 <volume_morph
3924 name="L_LOWER_ARM"
3925 scale="-0.005 0.0 -0.01"
3926 pos="-0.005 0 0"/>
3927 <volume_morph
3928 name="R_CLAVICLE"
3929 scale="0.0 -0.03 -0.005"
3930 pos="0.0 0 -0.005"/>
3931 <volume_morph
3932 name="R_UPPER_ARM"
3933 scale="-0.01 -0.01 -0.02"
3934 pos="0 0 0"/>
3935 <volume_morph
3936 name="R_LOWER_ARM"
3937 scale="-0.005 0.0 -0.01"
3938 pos="-0.005 0 0"/>
3939 </param_morph>
3940 </param>
3941
3942 <param
3943 id="677"
3944 group="1"
3945 sex="male"
3946 name="Scrawny_Torso_Male"
3947 label="Torso Scrawny"
3948 wearable="shape"
3949 edit_group="shape_torso"
3950 label_min="Regular"
3951 label_max="Scrawny"
3952 value_min="0"
3953 value_max="1.3"
3954 camera_elevation=".3"
3955 camera_distance="1.2">
3956 <param_morph>
3957 <volume_morph
3958 name="BELLY"
3959 scale="-0.01 -0.01 0.0"
3960 pos="0.01 0.0 0"/>
3961 <volume_morph
3962 name="CHEST"
3963 scale="-0.02 -0.02 0.0"
3964 pos="0.01 0.0 0"/>
3965 <volume_morph
3966 name="L_CLAVICLE"
3967 scale="0.0 -0.03 -0.005"
3968 pos="0.0 0 -0.005"/>
3969 <volume_morph
3970 name="L_UPPER_ARM"
3971 scale="-0.01 -0.01 -0.02"
3972 pos="0 0 0"/>
3973 <volume_morph
3974 name="L_LOWER_ARM"
3975 scale="-0.005 0.0 -0.01"
3976 pos="-0.005 0 0"/>
3977 <volume_morph
3978 name="R_CLAVICLE"
3979 scale="0.0 -0.03 -0.005"
3980 pos="0.0 0 -0.005"/>
3981 <volume_morph
3982 name="R_UPPER_ARM"
3983 scale="-0.01 -0.01 -0.02"
3984 pos="0 0 0"/>
3985 <volume_morph
3986 name="R_LOWER_ARM"
3987 scale="-0.005 0.0 -0.01"
3988 pos="-0.005 0 0"/>
3989 </param_morph>
3990 </param>
3991
3992 <param
3993 id="634"
3994 group="1"
3995 name="Fat_Torso"
3996 label="Fat Torso"
3997 wearable="shape"
3998 edit_group="shape_body"
3999 label_min="skinny"
4000 label_max="fat"
4001 value_min="0"
4002 value_max="1"
4003 camera_elevation=".3">
4004 <param_morph>
4005 <volume_morph
4006 name="CHEST"
4007 scale="0.02 0.03 0.03"
4008 pos="0 0 -0.03"/>
4009 <volume_morph
4010 name="BELLY"
4011 scale="0.09 0.08 0.07"
4012 pos="0 0 -0.05"/>
4013 <volume_morph
4014 name="L_CLAVICLE"
4015 scale="0.0 0.0 0.015"/>
4016 <volume_morph
4017 name="L_UPPER_ARM"
4018 scale="0.02 0.0 0.02"
4019 pos="0.0 0.0 -0.02"/>
4020 <volume_morph
4021 name="L_LOWER_ARM"
4022 scale="0.01 0.0 0.01"
4023 pos="0.0 0.0 -0.01"/>
4024 <volume_morph
4025 name="R_CLAVICLE"
4026 scale="0.0 0.0 0.015"/>
4027 <volume_morph
4028 name="R_UPPER_ARM"
4029 scale="0.02 0.0 0.02"
4030 pos="0.0 0.0 -0.02"/>
4031 <volume_morph
4032 name="R_LOWER_ARM"
4033 scale="0.01 0.0 0.01"
4034 pos="0.0 0.0 -0.01"/>
4035 <volume_morph
4036 name="NECK"
4037 scale="0.015 0.01 0.0"/>
4038 <volume_morph
4039 name="HEAD"
4040 scale="0.0 0.0 0.01"
4041 pos="0 0 -0.01"/>
4042 </param_morph>
4043 </param>
4044
4045 <param
4046 id="507"
4047 group="0"
4048 sex="female"
4049 name="Breast_Gravity"
4050 label="Breast Buoyancy"
4051 wearable="shape"
4052 edit_group="shape_torso"
4053 edit_group_order="7"
4054 label_min="Less Gravity"
4055 label_max="More Gravity"
4056 value_default="0"
4057 value_min="-1.5"
4058 value_max="2"
4059 camera_elevation=".3"
4060 camera_distance=".8">
4061 <param_morph />
4062 </param>
4063
4064 <param
4065 id="628"
4066 group="1"
4067 name="Displace_Loose_Upperbody"
4068 label="Shirt Fit"
4069 wearable="shirt"
4070 edit_group="driven"
4071 clothing_morph="true"
4072 value_min="0"
4073 value_max="1"
4074 value_default="0">
4075 <param_morph />
4076 </param>
4077
4078 <param
4079 id="840"
4080 group="0"
4081 name="Shirtsleeve_flair"
4082 label="Sleeve Looseness"
4083 show_simple="true"
4084 wearable="shirt"
4085 edit_group="shirt"
4086 edit_group_order="6"
4087 clothing_morph="true"
4088 label_min="Tight Sleeves"
4089 label_max="Loose Sleeves"
4090 value_min="0"
4091 value_max="1.5"
4092 camera_distance="1.8"
4093 camera_angle="30"
4094 camera_elevation="-.3">
4095 <param_morph />
4096 </param>
4097
4098 <param
4099 id="855"
4100 group="1"
4101 name="Love_Handles"
4102 wearable="shape"
4103 edit_group="driven"
4104 value_default="0"
4105 value_min="-1"
4106 value_max="2">
4107 <param_morph>
4108 <volume_morph
4109 name="BELLY"
4110 scale="0.0 0.02 0.0"/>
4111 </param_morph>
4112 </param>
4113
4114 <param
4115 id="684"
4116 group="0"
4117 sex="female"
4118 name="Breast_Female_Cleavage"
4119 label="Breast Cleavage"
4120 wearable="shape"
4121 edit_group="shape_torso"
4122 edit_group_order="8"
4123 label_min="Separate"
4124 label_max="Join"
4125 value_default="0"
4126 value_min="-.3"
4127 value_max="1.3"
4128 camera_elevation=".3"
4129 camera_distance=".8">
4130 <param_morph />
4131 </param>
4132
4133 <param
4134 id="685"
4135 group="0"
4136 sex="male"
4137 name="Chest_Male_No_Pecs"
4138 label="Pectorals"
4139 wearable="shape"
4140 edit_group="shape_torso"
4141 edit_group_order="5"
4142 label_min="Big Pectorals"
4143 label_max="Sunken Chest"
4144 value_default="0"
4145 value_min="-.5"
4146 value_max="1.1"
4147 camera_elevation=".3"
4148 camera_distance="1.2">
4149 <param_morph />
4150 </param>
4151
4152 <!-- ############# #
4153 other morphs (not user controlled)
4154 ############# -->
4155 <param
4156 id="100"
4157 group="1"
4158 name="Male_Torso"
4159 wearable="shape"
4160 edit_group="driven"
4161 label_min="Male_Torso"
4162 value_min="0"
4163 value_max="1">
4164 <param_morph>
4165 <volume_morph
4166 name="CHEST"
4167 scale="0.03 0.04 0.02"
4168 pos="-0.03 0 -0.01"/>
4169 <volume_morph
4170 name="BELLY"
4171 scale="0.03 0.03 0.0"
4172 pos="-0.03 0 0.02"/>
4173 <volume_morph
4174 name="L_CLAVICLE"
4175 scale="0.02 0.0 0.01"
4176 pos="-0.02 0 0"/>
4177 <volume_morph
4178 name="L_UPPER_ARM"
4179 scale="0.01 0.0 0.01"
4180 pos="0.0 0.0 -0.01"/>
4181 <volume_morph
4182 name="L_LOWER_ARM"
4183 scale="0.005 0.0 0.005"
4184 pos="0.0 0.0 -0.005"/>
4185 <volume_morph
4186 name="R_CLAVICLE"
4187 scale="0.02 0.0 0.01"
4188 pos="-0.02 0 0"/>
4189 <volume_morph
4190 name="R_UPPER_ARM"
4191 scale="0.01 0.0 0.01"
4192 pos="0.0 0.0 -0.01"/>
4193 <volume_morph
4194 name="R_LOWER_ARM"
4195 scale="0.005 0.0 0.005"
4196 pos="0.0 0.0 -0.005"/>
4197 <volume_morph
4198 name="NECK"
4199 scale="0.015 0.01 0.0"/>
4200 <volume_morph
4201 name="HEAD"
4202 scale="0.0 0.0 0.01"
4203 pos="0 0 -0.01"/>
4204 </param_morph>
4205 </param>
4206
4207 <!--
4208 ##############
4209 # animatable morphs
4210 ##############
4211 -->
4212 <param
4213 id="101"
4214 group="1"
4215 name="Hands_Relaxed"
4216 value_min="0"
4217 value_max="1">
4218 <param_morph />
4219 </param>
4220
4221 <param
4222 id="102"
4223 group="1"
4224 name="Hands_Point"
4225 value_min="0"
4226 value_max="1">
4227 <param_morph />
4228 </param>
4229
4230 <param
4231 id="103"
4232 group="1"
4233 name="Hands_Fist"
4234 value_min="0"
4235 value_max="1">
4236 <param_morph />
4237 </param>
4238
4239 <param
4240 id="666"
4241 group="1"
4242 name="Hands_Relaxed_L"
4243 value_min="0"
4244 value_max="1">
4245 <param_morph />
4246 </param>
4247
4248 <param
4249 id="667"
4250 group="1"
4251 name="Hands_Point_L"
4252 value_min="0"
4253 value_max="1">
4254 <param_morph />
4255 </param>
4256
4257 <param
4258 id="668"
4259 group="1"
4260 name="Hands_Fist_L"
4261 value_min="0"
4262 value_max="1">
4263 <param_morph />
4264 </param>
4265
4266 <param
4267 id="669"
4268 group="1"
4269 name="Hands_Relaxed_R"
4270 value_min="0"
4271 value_max="1">
4272 <param_morph />
4273 </param>
4274
4275 <param
4276 id="670"
4277 group="1"
4278 name="Hands_Point_R"
4279 value_min="0"
4280 value_max="1">
4281 <param_morph />
4282 </param>
4283
4284 <param
4285 id="671"
4286 group="1"
4287 name="Hands_Fist_R"
4288 value_min="0"
4289 value_max="1">
4290 <param_morph />
4291 </param>
4292
4293 <param
4294 id="672"
4295 group="1"
4296 name="Hands_Typing"
4297 value_min="0"
4298 value_max="1">
4299 <param_morph />
4300 </param>
4301
4302 <param
4303 id="766"
4304 group="1"
4305 name="Hands_Salute_R"
4306 value_min="0"
4307 value_max="1">
4308 <param_morph />
4309 </param>
4310
4311 <param
4312 id="791"
4313 group="1"
4314 name="Hands_Peace_R"
4315 value_min="0"
4316 value_max="1">
4317 <param_morph />
4318 </param>
4319
4320 <param
4321 id="792"
4322 group="1"
4323 name="Hands_Spread_R"
4324 value_min="0"
4325 value_max="1">
4326 <param_morph />
4327 </param>
4328
4329 <!--
4330 #############
4331 # physics morphs (not user controlled)
4332 #############
4333 -->
4334 <param
4335 id="1200"
4336 group="1"
4337 sex="female"
4338 name="Breast_Physics_UpDown_Driven"
4339 wearable="shape"
4340 edit_group="driven"
4341 value_default="0"
4342 value_min="-3"
4343 value_max="3">
4344 <param_morph />
4345 </param>
4346
4347 <param
4348 id="1201"
4349 group="1"
4350 sex="female"
4351 name="Breast_Physics_InOut_Driven"
4352 wearable="shape"
4353 edit_group="driven"
4354 value_default="0"
4355 value_min="-1.25"
4356 value_max="1.25">
4357 <param_morph />
4358 </param>
4359
4360 <param
4361 id="1204"
4362 group="1"
4363 name="Belly_Physics_Torso_UpDown_Driven"
4364 wearable="physics"
4365 cross_wearable="true"
4366 edit_group="driven"
4367 value_default="0"
4368 value_min="-1"
4369 value_max="1">
4370 <param_morph />
4371 </param>
4372
4373 <param
4374 id="1207"
4375 group="1"
4376 name="Breast_Physics_LeftRight_Driven"
4377 wearable="physics"
4378 cross_wearable="true"
4379 edit_group="driven"
4380 value_default="0"
4381 value_min="-2"
4382 value_max="2">
4383 <param_morph />
4384 </param>
4385
4386 <!--
4387 #end morph targets
4388 -->
4389
4390 </mesh>
4391
4392 <mesh
4393 type="upperBodyMesh"
4394 lod="1"
4395 file_name="avatar_upper_body_1.llm"
4396 min_pixel_width="160"
4397 reference="avatar_upper_body.llm">
4398 </mesh>
4399
4400 <mesh
4401 type="upperBodyMesh"
4402 lod="2"
4403 file_name="avatar_upper_body_2.llm"
4404 min_pixel_width="80"
4405 reference="avatar_upper_body.llm">
4406 </mesh>
4407
4408 <mesh
4409 type="upperBodyMesh"
4410 lod="3"
4411 file_name="avatar_upper_body_3.llm"
4412 min_pixel_width="40"
4413 reference="avatar_upper_body.llm">
4414 </mesh>
4415
4416 <mesh
4417 type="upperBodyMesh"
4418 lod="4"
4419 file_name="avatar_upper_body_4.llm"
4420 min_pixel_width="0"
4421 reference="avatar_upper_body.llm">
4422 </mesh>
4423
4424 <!--
4425 #upperBodyMesh2 =
4426 #upperBodyMesh3 =
4427 -->
4428 <mesh
4429 type="lowerBodyMesh"
4430 lod="0"
4431 file_name="avatar_lower_body.llm"
4432 min_pixel_width="320">
4433 <!--
4434 #begin morph targets
4435 #############
4436 # tweakable morphs
4437 #############
4438 -->
4439 <param
4440 id="156"
4441 group="1"
4442 name="Big_Belly_Legs"
4443 wearable="shape"
4444 edit_group="driven"
4445 value_min="0"
4446 value_max="1">
4447 <param_morph />
4448 </param>
4449
4450
4451 <param
4452 id="151"
4453 group="1"
4454 name="Big_Butt_Legs"
4455 label="Butt Size"
4456 wearable="shape"
4457 edit_group="shape_legs"
4458 label_min="Regular"
4459 label_max="Large"
4460 value_min="0"
4461 value_max="1">
4462 <param_morph>
4463 <volume_morph
4464 name="PELVIS"
4465 scale="0.03 0.0 0.02"
4466 pos="-0.03 0 -0.025"/>
4467 </param_morph>
4468 </param>
4469
4470 <param
4471 id="794"
4472 group="1"
4473 name="Small_Butt"
4474 label="Butt Size"
4475 wearable="shape"
4476 edit_group="shape_legs"
4477 label_min="Regular"
4478 label_max="Small"
4479 value_min="0"
4480 value_max="1">
4481 <param_morph>
4482 <volume_morph
4483 name="PELVIS"
4484 scale="-0.01 0.0 0.0"
4485 pos="0.01 0 0.0"/>
4486 </param_morph>
4487 </param>
4488
4489 <param
4490 id="152"
4491 group="1"
4492 name="Muscular_Legs"
4493 label="Leg Muscles"
4494 show_simple="true"
4495 wearable="shape"
4496 edit_group="shape_legs"
4497 label_min="Regular Muscles"
4498 label_max="More Muscles"
4499 value_min="0"
4500 value_max="1.5"
4501 camera_distance="1.3"
4502 camera_elevation="-.5">
4503 <param_morph>
4504 <volume_morph
4505 name="L_UPPER_LEG"
4506 scale="0.015 0.015 0.0"
4507 pos="0.0 0 0.0"/>
4508 <volume_morph
4509 name="L_LOWER_LEG"
4510 scale="0.01 0.01 0.0"
4511 pos="0.0 0 0.0"/>
4512 <volume_morph
4513 name="R_UPPER_LEG"
4514 scale="0.015 0.015 0.0"
4515 pos="0.0 0 0.0"/>
4516 <volume_morph
4517 name="R_LOWER_LEG"
4518 scale="0.01 0.01 0.0"
4519 pos="0.0 0 0.0"/>
4520 </param_morph>
4521 </param>
4522
4523 <param
4524 id="651"
4525 group="1"
4526 name="Scrawny_Legs"
4527 label="Scrawny Leg"
4528 wearable="shape"
4529 edit_group="shape_legs"
4530 label_min="Regular Muscles"
4531 label_max="Less Muscles"
4532 value_min="0"
4533 value_max="1.5"
4534 camera_distance="1.3"
4535 camera_elevation="-.5">
4536 <param_morph>
4537 <volume_morph
4538 name="L_UPPER_LEG"
4539 scale="-0.03 -0.03 0.0"
4540 pos="0.0 0 0.0"/>
4541 <volume_morph
4542 name="L_LOWER_LEG"
4543 scale="-0.015 -0.015 0.0"
4544 pos="0.0 0 0.0"/>
4545 <volume_morph
4546 name="R_UPPER_LEG"
4547 scale="-0.03 -0.03 0.0"
4548 pos="0.0 0 0.0"/>
4549 <volume_morph
4550 name="R_LOWER_LEG"
4551 scale="-0.015 -0.015 0.0"
4552 pos="0.0 0 0.0"/>
4553 </param_morph>
4554 </param>
4555
4556 <param
4557 id="853"
4558 group="1"
4559 name="Bowed_Legs"
4560 label="Knee Angle"
4561 wearable="shape"
4562 value_min="-1"
4563 value_max="1">
4564 <param_morph>
4565 <volume_morph
4566 name="L_UPPER_LEG"
4567 pos="0.0 0.03 0.0"/>
4568 <volume_morph
4569 name="L_LOWER_LEG"
4570 pos="0.0 0.03 0.0"/>
4571 <volume_morph
4572 name="R_UPPER_LEG"
4573 pos="0.0 -0.03 0.0"/>
4574 <volume_morph
4575 name="R_LOWER_LEG"
4576 pos="0.0 -0.03 0.0"/>
4577 </param_morph>
4578 </param>
4579
4580 <param
4581 id="500"
4582 group="1"
4583 name="Shoe_Heel_Height"
4584 label="Heel Height"
4585 wearable="shoes"
4586 edit_group="shoes"
4587 label_min="Low Heels"
4588 label_max="High Heels"
4589 value_min="0"
4590 value_max="1"
4591 camera_distance="1.5"
4592 camera_elevation="-.5">
4593 <param_morph />
4594 </param>
4595
4596 <param
4597 id="501"
4598 group="1"
4599 name="Shoe_Platform_Height"
4600 label="Platform Height"
4601 wearable="shoes"
4602 edit_group="shoes"
4603 label_min="Low Platforms"
4604 label_max="High Platforms"
4605 value_min="0"
4606 value_max="1"
4607 camera_distance="1.5"
4608 camera_elevation="-.5">
4609 <param_morph />
4610 </param>
4611
4612 <param
4613 id="508"
4614 group="0"
4615 name="Shoe_Platform_Width"
4616 label="Platform Width"
4617 wearable="shoes"
4618 edit_group="shoes"
4619 edit_group_order="7"
4620 label_min="Narrow"
4621 label_max="Wide"
4622 value_min="-1"
4623 value_max="2"
4624 camera_angle="15"
4625 camera_distance="1.5"
4626 camera_elevation="-1">
4627 <param_morph />
4628 </param>
4629
4630 <param
4631 id="509"
4632 group="1"
4633 name="Shoe_Heel_Point"
4634 label="Heel Shape"
4635 wearable="shoes"
4636 edit_group="shoes"
4637 label_min="Default Heels"
4638 label_max="Pointy Heels"
4639 value_min="0"
4640 value_max="1"
4641 camera_distance="1.3"
4642 camera_elevation="-.5">
4643 <param_morph />
4644 </param>
4645
4646 <param
4647 id="510"
4648 group="1"
4649 name="Shoe_Heel_Thick"
4650 label="Heel Shape"
4651 wearable="shoes"
4652 edit_group="shoes"
4653 label_min="default Heels"
4654 label_max="Thick Heels"
4655 value_min="0"
4656 value_max="1"
4657 camera_distance="1.3"
4658 camera_elevation="-.5">
4659 <param_morph />
4660 </param>
4661
4662 <param
4663 id="511"
4664 group="1"
4665 name="Shoe_Toe_Point"
4666 label="Toe Shape"
4667 wearable="shoes"
4668 edit_group="shoes"
4669 label_min="Default Toe"
4670 label_max="Pointy Toe"
4671 value_min="0"
4672 value_max="1"
4673 camera_distance="1.3"
4674 camera_elevation="-.5">
4675 <param_morph />
4676 </param>
4677
4678 <param
4679 id="512"
4680 group="1"
4681 name="Shoe_Toe_Square"
4682 label="Toe Shape"
4683 wearable="shoes"
4684 edit_group="shoes"
4685 label_min="Default Toe"
4686 label_max="Square Toe"
4687 value_min="0"
4688 value_max="1"
4689 camera_distance="1.5"
4690 camera_elevation="-.5">
4691 <param_morph />
4692 </param>
4693
4694 <param
4695 id="654"
4696 group="0"
4697 name="Shoe_Toe_Thick"
4698 label="Toe Thickness"
4699 wearable="shoes"
4700 edit_group="shoes"
4701 edit_group_order="5"
4702 label_min="Flat Toe"
4703 label_max="Thick Toe"
4704 value_min="0"
4705 value_max="2"
4706 camera_angle="15"
4707 camera_distance="1.5"
4708 camera_elevation="-1">
4709 <param_morph />
4710 </param>
4711
4712 <param
4713 id="515"
4714 group="0"
4715 name="Foot_Size"
4716 label="Foot Size"
4717 wearable="shape"
4718 edit_group="shape_legs"
4719 edit_group_order="6"
4720 label_min="Small"
4721 label_max="Big"
4722 value_min="-1"
4723 value_max="3"
4724 camera_angle="45"
4725 camera_distance="1.1"
4726 camera_elevation="-1">
4727 <param_morph>
4728 <volume_morph
4729 name="L_FOOT"
4730 scale="0.02 0.01 0.0"
4731 pos="0.01 0 0"/>
4732 <volume_morph
4733 name="R_FOOT"
4734 scale="0.02 0.01 0.0"
4735 pos="0.01 0 0"/>
4736 </param_morph>
4737 </param>
4738
4739 <param
4740 id="516"
4741 group="1"
4742 name="Displace_Loose_Lowerbody"
4743 label="Pants Fit"
4744 wearable="pants"
4745 edit_group="driven"
4746 clothing_morph="true"
4747 value_min="0"
4748 value_max="1"
4749 value_default="0">
4750 <param_morph />
4751 </param>
4752
4753 <param
4754 id="625"
4755 group="0"
4756 name="Leg_Pantflair"
4757 label="Cuff Flare"
4758 show_simple="true"
4759 wearable="pants"
4760 edit_group="pants"
4761 edit_group_order="3"
4762 clothing_morph="true"
4763 label_min="Tight Cuffs"
4764 label_max="Flared Cuffs"
4765 value_min="0"
4766 value_max="1.5"
4767 camera_distance="1.8"
4768 camera_angle="30"
4769 camera_elevation="-.3">
4770 <param_morph />
4771 </param>
4772
4773 <param
4774 id="793"
4775 group="1"
4776 name="Leg_Longcuffs"
4777 label="Longcuffs"
4778 wearable="pants"
4779 edit_group="driven"
4780 clothing_morph="true"
4781 value_min="0"
4782 value_max="3"
4783 value_default="0">
4784 <param_morph />
4785 </param>
4786
4787 <param
4788 id="638"
4789 group="0"
4790 name="Low_Crotch"
4791 label="Pants Crotch"
4792 wearable="pants"
4793 clothing_morph="true"
4794 edit_group="pants"
4795 edit_group_order="4"
4796 label_min="High and Tight"
4797 label_max="Low and Loose"
4798 value_min="0"
4799 value_max="1.3"
4800 camera_distance="1.2"
4801 camera_angle="-20"
4802 camera_elevation="-.3">
4803 <param_morph />
4804 </param>
4805
4806 <param
4807 id="635"
4808 group="1"
4809 name="Fat_Legs"
4810 label="Fat Torso"
4811 wearable="shape"
4812 edit_group="shape_body"
4813 label_min="skinny"
4814 label_max="fat"
4815 value_min="0"
4816 value_max="1">
4817 <param_morph>
4818 <volume_morph
4819 name="PELVIS"
4820 scale="0.03 0.06 0.0"/>
4821 <volume_morph
4822 name="R_UPPER_LEG"
4823 scale="0.02 0.02 0.0"
4824 pos="0.0 -0.02 0.0"/>
4825 <volume_morph
4826 name="R_LOWER_LEG"
4827 scale="0.01 0.01 0.0"/>
4828 <volume_morph
4829 name="L_UPPER_LEG"
4830 scale="0.02 0.02 0.0"
4831 pos="0.0 0.02 0.0"/>
4832 <volume_morph
4833 name="L_LOWER_LEG"
4834 scale="0.01 0.01 0.0"/>
4835 </param_morph>
4836 </param>
4837
4838 <param
4839 id="854"
4840 group="1"
4841 name="Saddlebags"
4842 wearable="shape"
4843 edit_group="driven"
4844 value_min="-.5"
4845 value_max="3">
4846 <param_morph>
4847 <volume_morph
4848 name="PELVIS"
4849 scale="0.0 0.025 0.0"/>
4850 </param_morph>
4851
4852 </param>
4853
4854 <param
4855 id="879"
4856 group="0"
4857 sex="male"
4858 name="Male_Package"
4859 label="Package"
4860 wearable="shape"
4861 edit_group="shape_legs"
4862 edit_group_order="4.6"
4863 label_min="Coin Purse"
4864 label_max="Duffle Bag"
4865 value_default="0"
4866 value_min="-.5"
4867 value_max="2"
4868 camera_angle="60"
4869 camera_distance=".6">
4870 <param_morph />
4871 </param>
4872
4873 <!--
4874 #############
4875 # other morphs (not user controlled)
4876 #############
4877 -->
4878 <param
4879 id="153"
4880 group="1"
4881 name="Male_Legs"
4882 wearable="shape"
4883 edit_group="driven"
4884 value_min="0"
4885 value_max="1">
4886 <param_morph />
4887 </param>
4888
4889 <!--
4890 #############
4891 # physics morphs (not user controlled)
4892 #############
4893 -->
4894 <param
4895 id="1202"
4896 group="1"
4897 name="Belly_Physics_Legs_UpDown_Driven"
4898 wearable="physics"
4899 cross_wearable="true"
4900 edit_group="driven"
4901 value_min="-1"
4902 value_max="1">
4903 <param_morph />
4904 </param>
4905
4906
4907 <param
4908 id="1205"
4909 group="1"
4910 name="Butt_Physics_UpDown_Driven"
4911 wearable="physics"
4912 cross_wearable="true"
4913 edit_group="driven"
4914 value_default="0"
4915 value_min="-1"
4916 value_max="1">
4917 <param_morph />
4918 </param>
4919
4920 <param
4921 id="1206"
4922 group="1"
4923 name="Butt_Physics_LeftRight_Driven"
4924 wearable="physics"
4925 cross_wearable="true"
4926 edit_group="driven"
4927 value_default="0"
4928 value_min="-1"
4929 value_max="1">
4930 <param_morph />
4931 </param>
4932
4933 <!--
4934 #end morph targets
4935 -->
4936
4937 </mesh>
4938
4939 <mesh
4940 type="lowerBodyMesh"
4941 lod="1"
4942 file_name="avatar_lower_body_1.llm"
4943 min_pixel_width="160"
4944 reference="avatar_lower_body.llm">
4945 </mesh>
4946
4947 <mesh
4948 type="lowerBodyMesh"
4949 lod="2"
4950 file_name="avatar_lower_body_2.llm"
4951 min_pixel_width="80"
4952 reference="avatar_lower_body.llm">
4953 </mesh>
4954
4955 <mesh
4956 type="lowerBodyMesh"
4957 lod="3"
4958 file_name="avatar_lower_body_3.llm"
4959 min_pixel_width="40"
4960 reference="avatar_lower_body.llm">
4961 </mesh>
4962
4963 <mesh
4964 type="lowerBodyMesh"
4965 lod="4"
4966 file_name="avatar_lower_body_4.llm"
4967 min_pixel_width="0"
4968 reference="avatar_lower_body.llm">
4969 </mesh>
4970
4971 <!--
4972 #lowerBodyMesh2 =
4973 #lowerBodyMesh3 =
4974 -->
4975 <!--
4976 #eyeLidLeftMesh =
4977 -->
4978 <mesh
4979 type="eyeBallLeftMesh"
4980 lod="0"
4981 file_name="avatar_eye.llm"
4982 min_pixel_width="320">
4983 <!-- begin morph_params -->
4984 <param
4985 id="679"
4986 group="1"
4987 name="Eyeball_Size"
4988 label="Eyeball Size"
4989 wearable="shape"
4990 edit_group="shape_eyes"
4991 label_min="small eye"
4992 label_max="big eye"
4993 value_min="-.25"
4994 value_max=".10">
4995 <param_morph />
4996 </param>
4997
4998 <param
4999 id="687"
5000 group="1"
5001 name="Eyeball_Size"
5002 label="Big Eyeball"
5003 wearable="shape"
5004 edit_group="shape_eyes"
5005 label_min="small eye"
5006 label_max="big eye"
5007 value_min="-.25"
5008 value_max=".25">
5009 <param_morph />
5010 </param>
5011 </mesh>
5012
5013 <mesh
5014 type="eyeBallLeftMesh"
5015 lod="1"
5016 file_name="avatar_eye_1.llm"
5017 min_pixel_width="80">
5018 <!-- begin morph_params -->
5019 <param
5020 id="694"
5021 group="1"
5022 name="Eyeball_Size"
5023 label="Eyeball Size"
5024 wearable="shape"
5025 edit_group="shape_eyes"
5026 label_min="small eye"
5027 label_max="big eye"
5028 value_min="-.25"
5029 value_max=".10">
5030 <param_morph />
5031 </param>
5032
5033 <param
5034 id="695"
5035 group="1"
5036 name="Eyeball_Size"
5037 label="Big Eyeball"
5038 wearable="shape"
5039 edit_group="shape_eyes"
5040 label_min="small eye"
5041 label_max="big eye"
5042 value_min="-.25"
5043 value_max=".25">
5044 <param_morph />
5045 </param>
5046 </mesh>
5047
5048 <!--
5049 #eyeLidRightMesh =
5050 -->
5051 <mesh
5052 type="eyeBallRightMesh"
5053 lod="0"
5054 file_name="avatar_eye.llm"
5055 min_pixel_width="320">
5056 <!-- begin morph_params -->
5057 <param
5058 id="680"
5059 group="1"
5060 name="Eyeball_Size"
5061 label="Eyeball Size"
5062 wearable="shape"
5063 label_min="small eye"
5064 label_max="big eye"
5065 value_min="-.25"
5066 value_max=".10">
5067 <param_morph />
5068 </param>
5069
5070 <param
5071 id="688"
5072 group="1"
5073 name="Eyeball_Size"
5074 label="Big Eyeball"
5075 wearable="shape"
5076 label_min="small eye"
5077 label_max="big eye"
5078 value_min="-.25"
5079 value_max=".25">
5080 <param_morph />
5081 </param>
5082 </mesh>
5083
5084 <mesh
5085 type="eyeBallRightMesh"
5086 lod="1"
5087 file_name="avatar_eye_1.llm"
5088 min_pixel_width="80">
5089 <!-- begin morph_params -->
5090 <param
5091 id="681"
5092 group="1"
5093 name="Eyeball_Size"
5094 label="Eyeball Size"
5095 wearable="shape"
5096 edit_group="shape_eyes"
5097 label_min="small eye"
5098 label_max="big eye"
5099 value_min="-.25"
5100 value_max=".10">
5101 <param_morph />
5102 </param>
5103
5104 <param
5105 id="691"
5106 group="1"
5107 name="Eyeball_Size"
5108 label="Big Eyeball"
5109 wearable="shape"
5110 edit_group="shape_eyes"
5111 label_min="small eye"
5112 label_max="big eye"
5113 value_min="-.25"
5114 value_max=".25">
5115 <param_morph />
5116 </param>
5117 </mesh>
5118
5119 <mesh
5120 type="skirtMesh"
5121 lod="0"
5122 file_name="avatar_skirt.llm"
5123 min_pixel_width="320">
5124 <param
5125 id="845"
5126 group="1"
5127 name="skirt_poofy"
5128 label="poofy skirt"
5129 clothing_morph="true"
5130 wearable="skirt"
5131 edit_group="skirt"
5132 label_min="less poofy"
5133 label_max="more poofy"
5134 value_min="0"
5135 value_max="1.5">
5136 <param_morph />
5137 </param>
5138
5139 <param
5140 id="846"
5141 group="1"
5142 name="skirt_loose"
5143 label="loose skirt"
5144 clothing_morph="true"
5145 wearable="skirt"
5146 edit_group="skirt"
5147 label_min="form fitting"
5148 label_max="loose"
5149 value_min="0"
5150 value_max="1">
5151 <param_morph />
5152 </param>
5153
5154 <param
5155 id="866"
5156 group="1"
5157 name="skirt_tight"
5158 label="tight skirt"
5159 clothing_morph="true"
5160 wearable="skirt"
5161 edit_group="skirt"
5162 label_min="form fitting"
5163 label_max="loose"
5164 value_min="0"
5165 value_max="1">
5166 <param_morph />
5167 </param>
5168
5169 <param
5170 id="867"
5171 group="1"
5172 name="skirt_smallbutt"
5173 label="tight skirt"
5174 clothing_morph="false"
5175 wearable="skirt"
5176 edit_group="skirt"
5177 cross_wearable="true"
5178 label_min="form fitting"
5179 label_max="loose"
5180 value_min="0"
5181 value_max="1">
5182 <param_morph />
5183 </param>
5184
5185 <param
5186 id="848"
5187 group="0"
5188 name="skirt_bustle"
5189 label="bustle skirt"
5190 clothing_morph="true"
5191 wearable="skirt"
5192 edit_group_order="3"
5193 edit_group="skirt"
5194 label_min="no bustle"
5195 label_max="more bustle"
5196 value_min="0"
5197 value_max="2"
5198 value_default=".2"
5199 camera_angle="100"
5200 camera_distance="1.3"
5201 camera_elevation="-.5">
5202 <param_morph />
5203 </param>
5204
5205 <param
5206 id="847"
5207 group="1"
5208 name="skirt_bowlegs"
5209 label="legs skirt"
5210 wearable="skirt"
5211 edit_group="driven"
5212 cross_wearable="true"
5213 value_min="-1"
5214 value_max="1"
5215 value_default="0">
5216 <param_morph />
5217 </param>
5218
5219 <param
5220 id="852"
5221 group="1"
5222 name="skirt_bigbutt"
5223 wearable="skirt"
5224 edit_group="driven"
5225 cross_wearable="true"
5226 label="bigbutt skirt"
5227 label_min="less"
5228 label_max="more"
5229 value_min="0"
5230 value_max="1">
5231 <param_morph />
5232 </param>
5233
5234 <param
5235 id="849"
5236 group="1"
5237 name="skirt_belly"
5238 wearable="skirt"
5239 edit_group="driven"
5240 cross_wearable="true"
5241 label="big belly skirt"
5242 value_min="0"
5243 value_max="1">
5244 <param_morph />
5245 </param>
5246
5247 <param
5248 id="850"
5249 group="1"
5250 wearable="skirt"
5251 edit_group="driven"
5252 cross_wearable="true"
5253 name="skirt_saddlebags"
5254 value_min="-.5"
5255 value_max="3">
5256 <param_morph />
5257 </param>
5258
5259 <param
5260 id="851"
5261 group="1"
5262 name="skirt_chubby"
5263 wearable="skirt"
5264 edit_group="driven"
5265 cross_wearable="true"
5266 label_min="less"
5267 label_max="more"
5268 value_min="0"
5269 value_max="1"
5270 value_default="0">
5271 <param_morph />
5272 </param>
5273
5274 <param
5275 id="856"
5276 group="1"
5277 name="skirt_lovehandles"
5278 wearable="skirt"
5279 edit_group="driven"
5280 cross_wearable="true"
5281 label_min="less"
5282 label_max="more"
5283 value_min="-1"
5284 value_max="2"
5285 value_default="0">
5286 <param_morph />
5287 </param>
5288
5289 <!--
5290 #############
5291 # other morphs (not user controlled)
5292 #############
5293 -->
5294 <param
5295 id="857"
5296 group="1"
5297 name="skirt_male"
5298 wearable="skirt"
5299 edit_group="driven"
5300 cross_wearable="true"
5301 value_min="0"
5302 value_max="1">
5303 <param_morph />
5304 </param>
5305
5306 <!--
5307 #############
5308 # physics morphs (not user controlled)
5309 #############
5310 -->
5311 <param
5312 id="1203"
5313 group="1"
5314 name="Belly_Physics_Skirt_UpDown_Driven"
5315 wearable="physics"
5316 cross_wearable="true"
5317 edit_group="driven"
5318 value_default="0"
5319 value_min="-1"
5320 value_max="1">
5321 <param_morph />
5322 </param>
5323
5324 </mesh>
5325
5326 <mesh
5327 type="skirtMesh"
5328 lod="1"
5329 file_name="avatar_skirt_1.llm"
5330 min_pixel_width="160"
5331 reference="avatar_skirt.llm">
5332 </mesh>
5333
5334 <mesh
5335 type="skirtMesh"
5336 lod="2"
5337 file_name="avatar_skirt_2.llm"
5338 min_pixel_width="80"
5339 reference="avatar_skirt.llm">
5340 </mesh>
5341
5342 <mesh
5343 type="skirtMesh"
5344 lod="3"
5345 file_name="avatar_skirt_3.llm"
5346 min_pixel_width="40"
5347 reference="avatar_skirt.llm">
5348 </mesh>
5349
5350 <mesh
5351 type="skirtMesh"
5352 lod="4"
5353 file_name="avatar_skirt_4.llm"
5354 min_pixel_width="0"
5355 reference="avatar_skirt.llm">
5356 </mesh>
5357
5358 <!-- =========================================================== -->
5359 <global_color
5360 name="skin_color">
5361 <param
5362 id="111"
5363 group="0"
5364 wearable="skin"
5365 edit_group="skin_color"
5366 edit_group_order="1"
5367 name="Pigment"
5368 show_simple="true"
5369 label_min="Light"
5370 label_max="Dark"
5371 value_min="0"
5372 value_max="1"
5373 value_default=".5">
5374 <param_color>
5375 <value
5376 color="252, 215, 200, 255" />
5377
5378 <value
5379 color="240, 177, 112, 255" />
5380
5381 <value
5382 color="90, 40, 16, 255" />
5383
5384 <value
5385 color="29, 9, 6, 255" />
5386 </param_color>
5387 </param>
5388
5389 <param
5390 id="110"
5391 group="0"
5392 wearable="skin"
5393 edit_group="skin_color"
5394 edit_group_order="2"
5395 name="Red Skin"
5396 label="Ruddiness"
5397 label_min="Pale"
5398 label_max="Ruddy"
5399 value_min="0"
5400 value_max="0.1">
5401 <param_color
5402 operation="blend">
5403 <value
5404 color="218, 41, 37, 255" />
5405 </param_color>
5406 </param>
5407
5408 <param
5409 id="108"
5410 group="0"
5411 wearable="skin"
5412 edit_group="skin_color"
5413 edit_group_order="3"
5414 name="Rainbow Color"
5415 show_simple="true"
5416 label_min="None"
5417 label_max="Wild"
5418 value_min="0"
5419 value_max="1"
5420 camera_elevation=".1"
5421 camera_distance=".5">
5422 <param_color>
5423 <value
5424 color=" 0, 0, 0, 255" />
5425
5426 <value
5427 color="255, 0, 255, 255" />
5428
5429 <value
5430 color="255, 0, 0, 255" />
5431
5432 <value
5433 color="255, 255, 0, 255" />
5434
5435 <value
5436 color=" 0, 255, 0, 255" />
5437
5438 <value
5439 color=" 0, 255, 255, 255" />
5440
5441 <value
5442 color=" 0, 0, 255, 255" />
5443
5444 <value
5445 color="255, 0, 255, 255" />
5446 </param_color>
5447 </param>
5448 </global_color>
5449
5450 <!-- =========================================================== -->
5451 <global_color
5452 name="hair_color">
5453 <param
5454 id="114"
5455 group="0"
5456 wearable="hair"
5457 edit_group="hair_color"
5458 edit_group_order="3"
5459 name="Blonde Hair"
5460 show_simple="true"
5461 label_min="Black"
5462 label_max="Blonde"
5463 value_min="0"
5464 value_max="1"
5465 value_default=".5"
5466 camera_elevation=".1"
5467 camera_distance=".5">
5468 <param_color>
5469 <value
5470 color="0, 0, 0, 255" />
5471
5472 <value
5473 color="22, 6, 6, 255" />
5474
5475 <value
5476 color="29, 9, 6, 255" />
5477
5478 <value
5479 color="45, 21, 11, 255" />
5480
5481 <value
5482 color="78, 39, 11, 255" />
5483
5484 <value
5485 color="90, 53, 16, 255" />
5486
5487 <value
5488 color="136, 92, 21, 255" />
5489
5490 <value
5491 color="150, 106, 33, 255" />
5492
5493 <value
5494 color="198, 156, 74, 255" />
5495
5496 <value
5497 color="233, 192, 103, 255" />
5498
5499 <value
5500 color="238, 205, 136, 255" />
5501 </param_color>
5502 </param>
5503
5504 <param
5505 id="113"
5506 group="0"
5507 wearable="hair"
5508 edit_group="hair_color"
5509 edit_group_order="4"
5510 name="Red Hair"
5511 show_simple="true"
5512 label_min="No Red"
5513 label_max="Very Red"
5514 value_min="0"
5515 value_max="1"
5516 camera_elevation=".1"
5517 camera_distance=".5">
5518 <param_color>
5519 <value
5520 color="0, 0, 0, 255" />
5521
5522 <value
5523 color="118, 47, 19, 255" />
5524 </param_color>
5525 </param>
5526
5527 <param
5528 id="115"
5529 group="0"
5530 wearable="hair"
5531 edit_group="hair_color"
5532 edit_group_order="1"
5533 name="White Hair"
5534 show_simple="true"
5535 label_min="No White"
5536 label_max="All White"
5537 value_min="0"
5538 value_max="1"
5539 camera_elevation=".1"
5540 camera_distance=".5">
5541 <param_color>
5542 <value
5543 color="0, 0, 0, 255" />
5544
5545 <value
5546 color="255, 255, 255, 255" />
5547 </param_color>
5548 </param>
5549
5550 <param
5551 id="112"
5552 group="0"
5553 wearable="hair"
5554 edit_group="hair_color"
5555 edit_group_order="2"
5556 name="Rainbow Color"
5557 show_simple="true"
5558 label_min="None"
5559 label_max="Wild"
5560 value_min="0"
5561 value_max="1"
5562 camera_elevation=".1"
5563 camera_distance=".5">
5564 <param_color>
5565 <value
5566 color=" 0, 0, 0, 255" />
5567
5568 <value
5569 color="255, 0, 255, 255" />
5570
5571 <value
5572 color="255, 0, 0, 255" />
5573
5574 <value
5575 color="255, 255, 0, 255" />
5576
5577 <value
5578 color=" 0, 255, 0, 255" />
5579
5580 <value
5581 color=" 0, 255, 255, 255" />
5582
5583 <value
5584 color=" 0, 0, 255, 255" />
5585
5586 <value
5587 color="255, 0, 255, 255" />
5588 </param_color>
5589 </param>
5590 </global_color>
5591
5592 <!-- =========================================================== -->
5593 <global_color
5594 name="eye_color">
5595 <param
5596 id="99"
5597 group="0"
5598 wearable="eyes"
5599 edit_group="eyes"
5600 edit_group_order="1"
5601 name="Eye Color"
5602 show_simple="true"
5603 label_min="Natural"
5604 label_max="Unnatural"
5605 value_min="0"
5606 value_max="1"
5607 value_default="0"
5608 camera_elevation=".1"
5609 camera_distance=".3">
5610 <!-- default to natural brown eyes-->
5611 <param_color>
5612 <value
5613 color="50, 25, 5, 255" />
5614
5615 <!-- natural dark brown eyes-->
5616 <value
5617 color="109, 55, 15, 255" />
5618
5619 <!-- natural brown eyes-->
5620 <value
5621 color="150, 93, 49, 255" />
5622
5623 <!-- natural light brown eyes-->
5624 <value
5625 color="152, 118, 25, 255" />
5626
5627 <!--natural hazel eyes-->
5628 <value
5629 color="95, 179, 107, 255" />
5630
5631 <!--natural green eyes-->
5632 <value
5633 color="87, 192, 191, 255" />
5634
5635 <!--natural aqua eyes-->
5636 <value
5637 color="95, 172, 179, 255" />
5638
5639 <!--natural blue eyes-->
5640 <value
5641 color="128, 128, 128, 255" />
5642
5643 <!--natural grey eyes-->
5644 <value
5645 color="0, 0, 0, 255" />
5646
5647 <!--black eyes-->
5648 <value
5649 color="255, 255, 0, 255" />
5650
5651 <!--bright yellow eyes-->
5652 <value
5653 color=" 0, 255, 0, 255" />
5654
5655 <!-- bright green eyes-->
5656 <value
5657 color=" 0, 255, 255, 255" />
5658
5659 <!-- bright cyan eyes-->
5660 <value
5661 color=" 0, 0, 255, 255" />
5662
5663 <!--bright blue eyes-->
5664 <value
5665 color="255, 0, 255, 255" />
5666
5667 <!-- bright violet eyes-->
5668 <value
5669 color="255, 0, 0, 255" />
5670
5671 <!--bright red eyes-->
5672 </param_color>
5673 </param>
5674
5675 <param
5676 id="98"
5677 group="0"
5678 wearable="eyes"
5679 edit_group="eyes"
5680 edit_group_order="2"
5681 name="Eye Lightness"
5682 show_simple="true"
5683 label_min="Darker"
5684 label_max="Lighter"
5685 value_min="0"
5686 value_max="1"
5687 camera_elevation=".1"
5688 camera_distance=".3">
5689 <param_color>
5690 <value
5691 color="0, 0, 0, 0" />
5692
5693 <value
5694 color="255, 255, 255, 255" />
5695 </param_color>
5696 </param>
5697 </global_color>
5698
5699 <!-- =========================================================== -->
5700 <layer_set
5701 body_region="hair"
5702 width="512"
5703 height="512"
5704 clear_alpha="false">
5705 <layer
5706 name="base"
5707 global_color="hair_color"
5708 write_all_channels="true">
5709 <texture
5710 local_texture="hair_grain" />
5711 </layer>
5712
5713 <layer
5714 name="hair texture alpha layer"
5715 visibility_mask="TRUE">
5716 <texture
5717 local_texture="hair_grain" />
5718 </layer>
5719
5720 <layer
5721 name="hair alpha"
5722 visibility_mask="TRUE">
5723 <texture
5724 local_texture="hair_alpha" />
5725 </layer>
5726
5727 </layer_set>
5728 <!-- =========================================================== -->
5729
5730 <layer_set
5731 body_region="head"
5732 width="512"
5733 height="512">
5734 <layer
5735 name="head bump base"
5736 fixed_color = "128,128,128,255"
5737 render_pass="bump">
5738 </layer>
5739
5740 <layer
5741 name="head bump definition"
5742 render_pass="bump">
5743
5744
5745 <texture
5746 tga_file="bump_head_base.tga"
5747 file_is_mask="FALSE"/>
5748
5749 <param
5750 id="873"
5751 group="1"
5752 wearable="skin"
5753 edit_group="driven"
5754 edit_group_order="12"
5755 name="Bump base"
5756 value_min="0"
5757 value_max="1">
5758 <param_alpha
5759 domain="0" />
5760 </param>
5761 </layer>
5762
5763 <layer
5764 name="base"
5765 global_color="skin_color">
5766 <texture
5767 tga_file="head_skingrain.tga" />
5768 </layer>
5769
5770 <layer
5771 name="headcolor">
5772 <texture
5773 tga_file="head_color.tga" />
5774 </layer>
5775
5776 <layer
5777 name="shadow">
5778 <texture
5779 tga_file="head_shading_alpha.tga"
5780 file_is_mask="TRUE" />
5781
5782 <param
5783 id="158"
5784 group="1"
5785 wearable="skin"
5786 name="Shading"
5787 value_min="0"
5788 value_max="1">
5789 <param_color>
5790 <value
5791 color="0, 0, 0, 0" />
5792
5793 <value
5794 color="0, 0, 0, 128" />
5795 </param_color>
5796 </param>
5797 </layer>
5798
5799 <layer
5800 name="highlight">
5801 <texture
5802 tga_file="head_highlights_alpha.tga"
5803file_is_mask="TRUE" />
5804
5805
5806 <param
5807 id="159"
5808 group="1"
5809 name="Shading"
5810 wearable="skin"
5811 value_min="0"
5812 value_max="1">
5813 <param_color>
5814 <value
5815color="255, 255, 255, 0" />
5816
5817
5818 <value
5819 color="255, 255, 255, 64" />
5820 </param_color>
5821 </param>
5822 </layer>
5823 <layer
5824 name="rosyface">
5825 <texture
5826 tga_file="rosyface_alpha.tga"
5827 file_is_mask="true" />
5828
5829 <param
5830 id="116"
5831 group="0"
5832 wearable="skin"
5833 edit_group="skin_facedetail"
5834 edit_group_order="4"
5835 name="Rosy Complexion"
5836 label_min="Less Rosy"
5837 label_max="More Rosy"
5838 value_min="0"
5839 value_max="1"
5840 camera_distance=".3"
5841 camera_elevation=".07">
5842 <param_color>
5843 <value
5844 color="198, 71, 71, 0" />
5845
5846 <value
5847 color="198, 71, 71, 255" />
5848 </param_color>
5849 </param>
5850 </layer>
5851
5852 <layer
5853 name="lips">
5854 <texture
5855 tga_file="lips_mask.tga"
5856 file_is_mask="true" />
5857
5858 <param
5859 id="117"
5860 group="0"
5861 wearable="skin"
5862 edit_group="skin_facedetail"
5863 edit_group_order="5"
5864 name="Lip Pinkness"
5865 label_min="Darker"
5866 label_max="Pinker"
5867 value_min="0"
5868 value_max="1"
5869 camera_distance=".25">
5870 <param_color>
5871 <value
5872 color="220, 115, 115, 0" />
5873
5874 <value
5875 color="220, 115, 115, 128" />
5876 </param_color>
5877 </param>
5878 </layer>
5879
5880 <layer
5881 name="wrinkles_shading"
5882 render_pass="bump"
5883 fixed_color="0,0,0,100">
5884 <param
5885 id="118"
5886 group="1"
5887 wearable="skin"
5888 name="Wrinkles"
5889 value_min="0"
5890 value_max="1">
5891 <param_alpha
5892 tga_file="bump_face_wrinkles.tga"
5893 skip_if_zero="true"
5894 domain="0.3" />
5895 </param>
5896 </layer>
5897
5898 <!--<layer
5899 name="wrinkles_highlights"
5900 fixed_color="255,255,255,64">
5901 <param
5902 id="128"
5903 group="1"
5904 name="Wrinkles"
5905 value_min="0"
5906 value_max="1">
5907 <param_alpha
5908 tga_file="head_wrinkles_highlights_alpha.tga"
5909 skip_if_zero="true"
5910 domain="0.3" />
5911 </param>
5912 </layer>-->
5913 <layer
5914 name="freckles"
5915 fixed_color="120,47,20,128">
5916 <param
5917 id="165"
5918 group="0"
5919 wearable="skin"
5920 edit_group="skin_facedetail"
5921 edit_group_order="2"
5922 name="Freckles"
5923 label_min="Less"
5924 label_max="More"
5925 value_min="0"
5926 value_max="1"
5927 camera_distance=".3"
5928camera_elevation=".07">
5929 <param_alpha
5930 tga_file="freckles_alpha.tga"
5931 skip_if_zero="true"
5932domain="0.5" />
5933 </param>
5934 </layer>
5935 <layer
5936name="eyebrowsbump"
5937render_pass="bump">
5938 <texture
5939 tga_file="head_hair.tga"
5940 file_is_mask="false" />
5941
5942 <param
5943 id="1000"
5944 group="1"
5945 wearable="hair"
5946 edit_group="driven"
5947 name="Eyebrow Size Bump"
5948 value_min="0"
5949 value_max="1">
5950 <param_alpha
5951 tga_file="eyebrows_alpha.tga"
5952 domain="0.1" />
5953 </param>
5954
5955 <param
5956 id="1002"
5957 group="1"
5958 wearable="hair"
5959 edit_group="driven"
5960 name="Eyebrow Density Bump"
5961 value_min="0"
5962 value_max="1">
5963 <param_color>
5964 <value
5965 color="255,255,255,0" />
5966
5967 <value
5968 color="255,255,255,255" />
5969 </param_color>
5970 </param>
5971 </layer>
5972
5973 <layer
5974 name="eyebrows"
5975 global_color="hair_color">
5976 <texture
5977 tga_file="head_hair.tga"
5978 file_is_mask="false" />
5979
5980 <param
5981 id="1001"
5982 group="1"
5983 wearable="hair"
5984 edit_group="hair_eyebrows"
5985 name="Eyebrow Size"
5986 show_simple="true"
5987 value_min="0"
5988 value_max="1"
5989 value_default="0.5">
5990 <param_alpha
5991 tga_file="eyebrows_alpha.tga"
5992 domain="0.1" />
5993 </param>
5994
5995 <param
5996 id="1003"
5997 group="1"
5998 wearable="hair"
5999 edit_group="driven"
6000 name="Eyebrow Density"
6001 value_min="0"
6002 value_max="1">
6003 <param_color
6004 operation="multiply">
6005 <value
6006 color="255,255,255,0" />
6007
6008 <value
6009 color="255,255,255,255" />
6010 </param_color>
6011 </param>
6012 </layer>
6013
6014 <layer
6015 name="lipstick">
6016 <param
6017 id="700"
6018 group="0"
6019 wearable="skin"
6020 edit_group="skin_makeup"
6021 edit_group_order="2"
6022 name="Lipstick Color"
6023 label_min="Pink"
6024 label_max="Black"
6025 value_min="0"
6026 value_max="1"
6027 value_default=".25"
6028 camera_distance=".25">
6029 <param_color>
6030 <value
6031 color="245,161,177,200" />
6032
6033 <value
6034 color="216,37,67,200" />
6035
6036 <value
6037 color="178,48,76,200" />
6038
6039 <value
6040 color="68,0,11,200" />
6041
6042 <value
6043 color="252,207,184,200" />
6044
6045 <value
6046 color="241,136,106,200" />
6047
6048 <value
6049 color="208,110,85,200" />
6050
6051 <value
6052 color="106,28,18,200" />
6053
6054 <value
6055 color="58,26,49,200" />
6056
6057 <value
6058 color="14,14,14,200" />
6059 </param_color>
6060 </param>
6061
6062 <param
6063 id="701"
6064 group="0"
6065 wearable="skin"
6066 edit_group="skin_makeup"
6067 edit_group_order="1"
6068 name="Lipstick"
6069 label_min="No Lipstick"
6070 label_max="More Lipstick"
6071 value_min="0"
6072 value_max=".9"
6073 value_default="0.0"
6074 camera_distance=".25">
6075 <param_alpha
6076 tga_file="lipstick_alpha.tga"
6077 skip_if_zero="true"
6078 domain="0.05" />
6079 </param>
6080 </layer>
6081
6082 <layer
6083 name="lipgloss"
6084 fixed_color="255,255,255,190">
6085 <param
6086 id="702"
6087 name="Lipgloss"
6088 label_min="No Lipgloss"
6089 label_max="Glossy"
6090 wearable="skin"
6091 edit_group="skin_makeup"
6092 edit_group_order="3"
6093 group="0"
6094 value_min="0"
6095 value_max="1"
6096 camera_distance=".25">
6097 <param_alpha
6098 tga_file="lipgloss_alpha.tga"
6099 skip_if_zero="true"
6100 domain="0.2" />
6101 </param>
6102 </layer>
6103
6104 <layer
6105 name="blush">
6106 <param
6107 id="704"
6108 group="0"
6109 wearable="skin"
6110 edit_group="skin_makeup"
6111 edit_group_order="4"
6112 name="Blush"
6113 label_min="No Blush"
6114 label_max="More Blush"
6115 value_min="0"
6116 value_max=".9"
6117 value_default="0"
6118 camera_distance=".3"
6119 camera_elevation=".07"
6120 camera_angle="20">
6121 <param_alpha
6122 tga_file="blush_alpha.tga"
6123 skip_if_zero="true"
6124 domain="0.3" />
6125 </param>
6126
6127 <param
6128 id="705"
6129 group="0"
6130 wearable="skin"
6131 edit_group="skin_makeup"
6132 edit_group_order="5"
6133 name="Blush Color"
6134 label_min="Pink"
6135 label_max="Orange"
6136 value_min="0"
6137 value_max="1"
6138 value_default=".5"
6139 camera_distance=".3"
6140 camera_elevation=".07"
6141 camera_angle="20">
6142 <param_color>
6143 <value
6144 color="253,162,193,200" />
6145
6146 <value
6147 color="247,131,152,200" />
6148
6149 <value
6150 color="213,122,140,200" />
6151
6152 <value
6153 color="253,152,144,200" />
6154
6155 <value
6156 color="236,138,103,200" />
6157
6158 <value
6159 color="195,128,122,200" />
6160
6161 <value
6162 color="148,103,100,200" />
6163
6164 <value
6165 color="168,95,62,200" />
6166 </param_color>
6167 </param>
6168
6169 <param
6170 id="711"
6171 group="0"
6172 wearable="skin"
6173 edit_group="skin_makeup"
6174 edit_group_order="6"
6175 name="Blush Opacity"
6176 label_min="Clear"
6177 label_max="Opaque"
6178 value_min="0"
6179 value_max="1"
6180 value_default=".5"
6181 camera_distance=".3"
6182 camera_elevation=".07"
6183 camera_angle="20">
6184 <param_color
6185 operation="multiply">
6186 <value
6187 color="255,255,255,0" />
6188
6189 <value
6190 color="255,255,255,255" />
6191 </param_color>
6192 </param>
6193 </layer>
6194
6195 <layer
6196 name="Outer Eye Shadow">
6197 <param
6198 id="708"
6199 group="0"
6200 wearable="skin"
6201 edit_group="skin_makeup"
6202 edit_group_order="11"
6203 name="Out Shdw Color"
6204 label_min="Light"
6205 label_max="Dark"
6206 value_min="0"
6207 value_max="1"
6208 camera_distance=".3"
6209 camera_elevation=".14">
6210 <param_color>
6211 <value
6212 color="252,247,246,255" />
6213
6214 <value
6215 color="255,206,206,255" />
6216
6217 <value
6218 color="233,135,149,255" />
6219
6220 <value
6221 color="220,168,192,255" />
6222
6223 <value
6224 color="228,203,232,255" />
6225
6226 <value
6227 color="255,234,195,255" />
6228
6229 <value
6230 color="230,157,101,255" />
6231
6232 <value
6233 color="255,147,86,255" />
6234
6235 <value
6236 color="228,110,89,255" />
6237
6238 <value
6239 color="228,150,120,255" />
6240
6241 <value
6242 color="223,227,213,255" />
6243
6244 <value
6245 color="96,116,87,255" />
6246
6247 <value
6248 color="88,143,107,255" />
6249
6250 <value
6251 color="194,231,223,255" />
6252
6253 <value
6254 color="207,227,234,255" />
6255
6256 <value
6257 color="41,171,212,255" />
6258
6259 <value
6260 color="180,137,130,255" />
6261
6262 <value
6263 color="173,125,105,255" />
6264
6265 <value
6266 color="144,95,98,255" />
6267
6268 <value
6269 color="115,70,77,255" />
6270
6271 <value
6272 color="155,78,47,255" />
6273
6274 <value
6275 color="239,239,239,255" />
6276
6277 <value
6278 color="194,194,194,255" />
6279
6280 <value
6281 color="120,120,120,255" />
6282
6283 <value
6284 color="10,10,10,255" />
6285 </param_color>
6286 </param>
6287
6288 <param
6289 id="706"
6290 group="0"
6291 wearable="skin"
6292 edit_group="skin_makeup"
6293 edit_group_order="12"
6294 name="Out Shdw Opacity"
6295 label_min="Clear"
6296 label_max="Opaque"
6297 value_min=".2"
6298 value_max="1"
6299 value_default=".6"
6300 camera_distance=".3"
6301 camera_elevation=".14">
6302 <param_color
6303 operation="multiply">
6304 <value
6305 color="255,255,255,0" />
6306
6307 <value
6308 color="255,255,255,255" />
6309 </param_color>
6310 </param>
6311
6312 <param
6313 id="707"
6314 group="0"
6315 wearable="skin"
6316 edit_group="skin_makeup"
6317 edit_group_order="10"
6318 name="Outer Shadow"
6319 label_min="No Eyeshadow"
6320 label_max="More Eyeshadow"
6321 value_min="0"
6322 value_max=".7"
6323 camera_distance=".3"
6324 camera_elevation=".14">
6325 <param_alpha
6326 tga_file="eyeshadow_outer_alpha.tga"
6327 skip_if_zero="true"
6328 domain="0.05" />
6329 </param>
6330 </layer>
6331
6332 <layer
6333 name="Inner Eye Shadow">
6334 <param
6335 id="712"
6336 group="0"
6337 wearable="skin"
6338 edit_group="skin_makeup"
6339 edit_group_order="8"
6340 name="In Shdw Color"
6341 label_min="Light"
6342 label_max="Dark"
6343 value_min="0"
6344 value_max="1"
6345 camera_distance=".3"
6346 camera_elevation=".14">
6347 <param_color>
6348 <value
6349 color="252,247,246,255" />
6350
6351 <value
6352 color="255,206,206,255" />
6353
6354 <value
6355 color="233,135,149,255" />
6356
6357 <value
6358 color="220,168,192,255" />
6359
6360 <value
6361 color="228,203,232,255" />
6362
6363 <value
6364 color="255,234,195,255" />
6365
6366 <value
6367 color="230,157,101,255" />
6368
6369 <value
6370 color="255,147,86,255" />
6371
6372 <value
6373 color="228,110,89,255" />
6374
6375 <value
6376 color="228,150,120,255" />
6377
6378 <value
6379 color="223,227,213,255" />
6380
6381 <value
6382 color="96,116,87,255" />
6383
6384 <value
6385 color="88,143,107,255" />
6386
6387 <value
6388 color="194,231,223,255" />
6389
6390 <value
6391 color="207,227,234,255" />
6392
6393 <value
6394 color="41,171,212,255" />
6395
6396 <value
6397 color="180,137,130,255" />
6398
6399 <value
6400 color="173,125,105,255" />
6401
6402 <value
6403 color="144,95,98,255" />
6404
6405 <value
6406 color="115,70,77,255" />
6407
6408 <value
6409 color="155,78,47,255" />
6410
6411 <value
6412 color="239,239,239,255" />
6413
6414 <value
6415 color="194,194,194,255" />
6416
6417 <value
6418 color="120,120,120,255" />
6419
6420 <value
6421 color="10,10,10,255" />
6422 </param_color>
6423 </param>
6424
6425 <param
6426 id="713"
6427 group="0"
6428 wearable="skin"
6429 edit_group="skin_makeup"
6430 edit_group_order="9"
6431 name="In Shdw Opacity"
6432 label_min="Clear"
6433 label_max="Opaque"
6434 value_min=".2"
6435 value_max="1"
6436 value_default=".7"
6437 camera_distance=".3"
6438 camera_elevation=".14">
6439 <param_color
6440 operation="multiply">
6441 <value
6442 color="255,255,255,0" />
6443
6444 <value
6445 color="255,255,255,255" />
6446 </param_color>
6447 </param>
6448
6449 <param
6450 id="709"
6451 group="0"
6452 wearable="skin"
6453 edit_group="skin_makeup"
6454 edit_group_order="7"
6455 name="Inner Shadow"
6456 label_min="No Eyeshadow"
6457 label_max="More Eyeshadow"
6458 value_min="0"
6459 value_max="1"
6460 value_default="0"
6461 camera_distance=".3"
6462 camera_elevation=".14">
6463 <param_alpha
6464 tga_file="eyeshadow_inner_alpha.tga"
6465 skip_if_zero="true"
6466 domain="0.2" />
6467 </param>
6468 </layer>
6469
6470 <layer
6471 name="eyeliner"
6472 fixed_color="0,0,0,200">
6473 <param
6474 id="703"
6475 group="0"
6476 wearable="skin"
6477 edit_group="skin_makeup"
6478 edit_group_order="13"
6479 name="Eyeliner"
6480 label_min="No Eyeliner"
6481 label_max="Full Eyeliner"
6482 value_min="0"
6483 value_max="1"
6484 value_default="0.0"
6485 camera_distance=".3"
6486 camera_elevation=".14">
6487 <param_alpha
6488 tga_file="eyeliner_alpha.tga"
6489 skip_if_zero="true"
6490 domain="0.1" />
6491 </param>
6492
6493 <param
6494 id="714"
6495 group="0"
6496 wearable="skin"
6497 edit_group="skin_makeup"
6498 edit_group_order="14"
6499 name="Eyeliner Color"
6500 label_min="Dark Green"
6501 label_max="Black"
6502 value_min="0"
6503 value_max="1"
6504 camera_distance=".3"
6505 camera_elevation=".14">
6506 <param_color>
6507 <value
6508 color="24,98,40,250" />
6509
6510 <!-- dark green -->
6511 <value
6512 color="9,100,127,250" />
6513
6514 <!-- lt.aqua blue -->
6515 <value
6516 color="61,93,134,250" />
6517
6518 <!-- aqua -->
6519 <value
6520 color="70,29,27,250" />
6521
6522 <!-- dark brown -->
6523 <value
6524 color="115,75,65,250" />
6525
6526 <!-- lt. brown blue -->
6527 <value
6528 color="100,100,100,250" />
6529
6530 <!-- grey -->
6531 <value
6532 color="91,80,74,250" />
6533
6534 <!-- grey/brown -->
6535 <value
6536 color="112,42,76,250" />
6537
6538 <!-- plum -->
6539 <value
6540 color="14,14,14,250" />
6541
6542 <!-- black -->
6543 </param_color>
6544 </param>
6545 </layer>
6546
6547 <layer
6548 name="facialhair bump"
6549 render_pass="bump">
6550 <texture
6551 tga_file="head_hair.tga"
6552 file_is_mask="false" />
6553
6554 <param
6555 id="1004"
6556 sex="male"
6557 group="1"
6558 wearable="hair"
6559 edit_group="driven"
6560 name="Sideburns bump"
6561 value_min="0"
6562 value_max="1">
6563 <param_alpha
6564 tga_file="facehair_sideburns_alpha.tga"
6565 skip_if_zero="true"
6566 domain="0.05" />
6567 </param>
6568
6569 <param
6570 id="1006"
6571 sex="male"
6572 group="1"
6573 wearable="hair"
6574 edit_group="driven"
6575 name="Moustache bump"
6576 value_min="0"
6577 value_max="1">
6578 <param_alpha
6579 tga_file="facehair_moustache_alpha.tga"
6580 skip_if_zero="true"
6581 domain="0.05" />
6582 </param>
6583
6584 <param
6585 id="1008"
6586 sex="male"
6587 group="1"
6588 wearable="hair"
6589 edit_group="driven"
6590 name="Soulpatch bump"
6591 value_min="0"
6592 value_max="1">
6593 <param_alpha
6594 tga_file="facehair_soulpatch_alpha.tga"
6595 skip_if_zero="true"
6596 domain="0.1" />
6597 </param>
6598
6599 <param
6600 id="1010"
6601 sex="male"
6602 group="1"
6603 edit_group="driven"
6604 wearable="hair"
6605 name="Chin Curtains bump"
6606 value_min="0"
6607 value_max="1">
6608 <param_alpha
6609 tga_file="facehair_chincurtains_alpha.tga"
6610 skip_if_zero="true"
6611 domain="0.03" />
6612 </param>
6613
6614 <param
6615 id="1012"
6616 group="1"
6617 sex="male"
6618 wearable="hair"
6619 edit_group="driven"
6620 name="5 O'Clock Shadow bump"
6621 value_min="0"
6622 value_max="1">
6623 <param_color>
6624 <value
6625 color="255,255,255,255" />
6626
6627 <value
6628 color="255,255,255,0" />
6629 </param_color>
6630 </param>
6631 </layer>
6632
6633 <layer
6634 name="facialhair"
6635 global_color="hair_color">
6636
6637 <texture
6638 tga_file="head_hair.tga"
6639 file_is_mask="false" />
6640
6641 <param
6642 id="1005"
6643 sex="male"
6644 group="1"
6645 wearable="hair"
6646 edit_group="driven"
6647 name="Sideburns"
6648 value_min="0"
6649 value_max="1">
6650 <param_alpha
6651 tga_file="facehair_sideburns_alpha.tga"
6652 skip_if_zero="true"
6653 domain="0.05" />
6654 </param>
6655
6656 <param
6657 id="1007"
6658 sex="male"
6659 group="1"
6660 wearable="hair"
6661 edit_group="driven"
6662 name="Moustache"
6663 value_min="0"
6664 value_max="1">
6665 <param_alpha
6666 tga_file="facehair_moustache_alpha.tga"
6667 skip_if_zero="true"
6668 domain="0.05" />
6669 </param>
6670
6671 <param
6672 id="1009"
6673 sex="male"
6674 group="1"
6675 wearable="hair"
6676 edit_group="driven"
6677 name="Soulpatch"
6678 value_min="0"
6679 value_max="1">
6680 <param_alpha
6681 tga_file="facehair_soulpatch_alpha.tga"
6682 skip_if_zero="true"
6683 domain="0.1" />
6684 </param>
6685
6686 <param
6687 id="1011"
6688 sex="male"
6689 group="1"
6690 wearable="hair"
6691 edit_group="driven"
6692 name="Chin Curtains"
6693 value_min="0"
6694 value_max="1">
6695 <param_alpha
6696 tga_file="facehair_chincurtains_alpha.tga"
6697 skip_if_zero="true"
6698 domain="0.03" />
6699 </param>
6700
6701 <param
6702 id="751"
6703 group="1"
6704 wearable="hair"
6705 sex="male"
6706 edit_group="hair_facial"
6707 name="5 O'Clock Shadow"
6708 label_min="Dense hair"
6709 label_max="Shadow hair"
6710 value_min="0"
6711 value_max="1"
6712 value_default="0.7"
6713 camera_elevation=".1"
6714 camera_distance=".3">
6715 <param_color
6716 operation="multiply">
6717 <value
6718 color="255,255,255,255" />
6719
6720 <value
6721 color="255,255,255,30" />
6722 </param_color>
6723 </param>
6724 </layer>
6725
6726 <layer
6727 name="head_bodypaint">
6728 <texture
6729 local_texture="head_bodypaint" />
6730 </layer>
6731 <layer
6732 name="eyelash alpha"
6733 visibility_mask="TRUE">
6734 <texture
6735 tga_file="head_alpha.tga"
6736 file_is_mask="TRUE" />
6737 </layer>
6738 <layer
6739 name="head alpha"
6740 visibility_mask="TRUE">
6741 <texture
6742 local_texture="head_alpha" />
6743 </layer>
6744 <layer
6745 name="head_tattoo">
6746 <texture
6747 local_texture="head_tattoo" />
6748 <param
6749 id="1062"
6750 group="1"
6751 edit_group="colorpicker_driven"
6752 wearable="tattoo"
6753 name="tattoo_head_red"
6754 value_min="0"
6755 value_max="1"
6756 value_default="1">
6757 <param_color>
6758 <value
6759 color="0, 0, 0, 255" />
6760
6761 <value
6762 color="255, 0, 0, 255" />
6763 </param_color>
6764 </param>
6765
6766 <param
6767 id="1063"
6768 group="1"
6769 edit_group="colorpicker_driven"
6770 wearable="tattoo"
6771 name="tattoo_head_green"
6772 value_min="0"
6773 value_max="1"
6774 value_default="1">
6775 <param_color>
6776 <value
6777 color="0, 0, 0, 255" />
6778
6779 <value
6780 color="0, 255, 0, 255" />
6781 </param_color>
6782 </param>
6783
6784 <param
6785 id="1064"
6786 group="1"
6787 edit_group="colorpicker_driven"
6788 wearable="tattoo"
6789 name="tattoo_head_blue"
6790 value_min="0"
6791 value_max="1"
6792 value_default="1">
6793 <param_color>
6794 <value
6795 color="0, 0, 0, 255" />
6796
6797 <value
6798 color="0, 0, 255, 255" />
6799 </param_color>
6800 </param>
6801
6802 </layer>
6803
6804
6805 </layer_set>
6806
6807 <!-- =========================================================== -->
6808 <layer_set
6809 body_region="upper_body"
6810 width="512"
6811 height="512">
6812 <layer
6813 name="base_upperbody bump"
6814 render_pass="bump"
6815 fixed_color="128,128,128,255">
6816 </layer>
6817 <layer
6818 name="upperbody bump definition"
6819 render_pass="bump">
6820 <texture
6821 tga_file="bump_upperbody_base.tga"
6822 file_is_mask="FALSE"/>
6823
6824 <param
6825 id="874"
6826 group="1"
6827 wearable="skin"
6828 edit_group="driven"
6829 edit_group_order="20"
6830 name="Bump upperdef"
6831 value_min="0"
6832 value_max="1">
6833 <param_alpha
6834 domain="0" />
6835 </param>
6836 </layer>
6837
6838 <layer
6839 name="base"
6840 global_color="skin_color">
6841 <texture
6842 tga_file="body_skingrain.tga" />
6843 </layer>
6844
6845 <layer
6846 name="nipples">
6847 <texture
6848 tga_file="upperbody_color.tga" />
6849 </layer>
6850
6851 <layer
6852 name="shadow">
6853 <texture
6854 tga_file="upperbody_shading_alpha.tga"
6855 file_is_mask="TRUE" />
6856
6857 <param
6858 id="125"
6859 group="1"
6860 name="Shading"
6861 wearable="skin"
6862 value_min="0"
6863 value_max="1">
6864 <param_color>
6865 <value
6866 color="0, 0, 0, 0" />
6867
6868 <value
6869 color="0, 0, 0, 128" />
6870 </param_color>
6871 </param>
6872 </layer>
6873
6874 <layer
6875 name="highlight">
6876 <texture
6877 tga_file="upperbody_highlights_alpha.tga"
6878 file_is_mask="TRUE" />
6879
6880 <param
6881 id="126"
6882 group="1"
6883 wearable="skin"
6884 name="Shading"
6885 value_min="0"
6886 value_max="1">
6887 <param_color>
6888 <value
6889 color="255, 255, 255, 0" />
6890
6891 <value
6892 color="255, 255, 255, 64" />
6893 </param_color>
6894 </param>
6895 </layer>
6896
6897 <layer
6898 name="upper_bodypaint">
6899 <texture
6900 local_texture="upper_bodypaint" />
6901 </layer>
6902
6903 <layer
6904 name="freckles upper"
6905 fixed_color="120,47,20,128">
6906 <param
6907 id="776"
6908 group="1"
6909 name="freckles upper"
6910 wearable="skin"
6911 value_min="0"
6912 value_max="1">
6913 <param_alpha
6914 tga_file="upperbodyfreckles_alpha.tga"
6915 skip_if_zero="true"
6916 domain="0.6" />
6917 </param>
6918 </layer>
6919
6920 <layer
6921 name="upper_tattoo">
6922 <texture
6923 local_texture="upper_tattoo" />
6924
6925 <param
6926 id="1065"
6927 group="1"
6928 edit_group="colorpicker_driven"
6929 wearable="tattoo"
6930 name="tattoo_upper_red"
6931 value_min="0"
6932 value_max="1"
6933 value_default="1">
6934 <param_color>
6935 <value
6936 color="0, 0, 0, 255" />
6937
6938 <value
6939 color="255, 0, 0, 255" />
6940 </param_color>
6941 </param>
6942
6943 <param
6944 id="1066"
6945 group="1"
6946 edit_group="colorpicker_driven"
6947 wearable="tattoo"
6948 name="tattoo_upper_green"
6949 value_min="0"
6950 value_max="1"
6951 value_default="1">
6952 <param_color>
6953 <value
6954 color="0, 0, 0, 255" />
6955
6956 <value
6957 color="0, 255, 0, 255" />
6958 </param_color>
6959 </param>
6960
6961 <param
6962 id="1067"
6963 group="1"
6964 edit_group="colorpicker_driven"
6965 wearable="tattoo"
6966 name="tattoo_upper_blue"
6967 value_min="0"
6968 value_max="1"
6969 value_default="1">
6970 <param_color>
6971 <value
6972 color="0, 0, 0, 255" />
6973
6974 <value
6975 color="0, 0, 255, 255" />
6976 </param_color>
6977 </param>
6978
6979 </layer>
6980
6981
6982 <layer
6983 name="upper_undershirt bump"
6984 render_pass="bump"
6985 fixed_color="128,128,128,255">
6986 <texture
6987 local_texture="upper_undershirt"
6988 local_texture_alpha_only="true" />
6989
6990 <param
6991 id="1043"
6992 group="1"
6993 wearable="undershirt"
6994 edit_group="driven"
6995 name="Sleeve Length bump"
6996 value_min=".01"
6997 value_max="1"
6998 value_default=".4">
6999 <param_alpha
7000 tga_file="shirt_sleeve_alpha.tga"
7001 multiply_blend="false"
7002 domain="0.01" />
7003 </param>
7004
7005 <param
7006 id="1045"
7007 group="1"
7008 wearable="undershirt"
7009 edit_group="undershirt"
7010 edit_group_order="2"
7011 name="Bottom bump"
7012 value_min="0"
7013 value_max="1"
7014 value_default=".8">
7015 <param_alpha
7016 tga_file="shirt_bottom_alpha.tga"
7017 multiply_blend="true"
7018 domain="0.05" />
7019 </param>
7020
7021 <param
7022 id="1047"
7023 group="1"
7024 wearable="undershirt"
7025 edit_group="driven"
7026 name="Collar Front bump"
7027 value_min="0"
7028 value_max="1"
7029 value_default=".8">
7030 <param_alpha
7031 tga_file="shirt_collar_alpha.tga"
7032 multiply_blend="true"
7033 domain="0.05" />
7034 </param>
7035
7036 <param
7037 id="1049"
7038 group="1"
7039 wearable="undershirt"
7040 edit_group="driven"
7041 name="Collar Back bump"
7042 value_min="0"
7043 value_max="1"
7044 value_default=".8">
7045 <param_alpha
7046 tga_file="shirt_collar_back_alpha.tga"
7047 multiply_blend="true"
7048 domain="0.05" />
7049 </param>
7050 </layer>
7051
7052 <layer
7053 name="upper_undershirt">
7054 <texture
7055 local_texture="upper_undershirt" />
7056
7057 <param
7058 id="821"
7059 group="0"
7060 wearable="undershirt"
7061 edit_group="colorpicker"
7062 name="undershirt_red"
7063 value_min="0"
7064 value_max="1"
7065 value_default="1">
7066 <param_color>
7067 <value
7068 color="0, 0, 0, 255" />
7069
7070 <value
7071 color="255, 0, 0, 255" />
7072 </param_color>
7073 </param>
7074
7075 <param
7076 id="822"
7077 group="0"
7078 wearable="undershirt"
7079 edit_group="colorpicker"
7080 name="undershirt_green"
7081 value_min="0"
7082 value_max="1"
7083 value_default="1">
7084 <param_color>
7085 <value
7086 color="0, 0, 0, 255" />
7087
7088 <value
7089 color="0, 255, 0, 255" />
7090 </param_color>
7091 </param>
7092
7093 <param
7094 id="823"
7095 group="0"
7096 wearable="undershirt"
7097 edit_group="colorpicker"
7098 name="undershirt_blue"
7099 value_min="0"
7100 value_max="1"
7101 value_default="1">
7102 <param_color>
7103 <value
7104 color="0, 0, 0, 255" />
7105
7106 <value
7107 color="0, 0, 255, 255" />
7108 </param_color>
7109 </param>
7110
7111 <param
7112 id="1042"
7113 group="1"
7114 wearable="undershirt"
7115 edit_group="driven"
7116 name="Sleeve Length"
7117 value_min=".01"
7118 value_max="1"
7119 value_default=".4">
7120 <param_alpha
7121 tga_file="shirt_sleeve_alpha.tga"
7122 multiply_blend="false"
7123 domain="0.01" />
7124 </param>
7125
7126 <param
7127 id="1044"
7128 group="1"
7129 wearable="undershirt"
7130 edit_group="driven"
7131 name="Bottom"
7132 value_min="0"
7133 value_max="1"
7134 value_default=".8">
7135 <param_alpha
7136 tga_file="shirt_bottom_alpha.tga"
7137 multiply_blend="true"
7138 domain="0.05" />
7139 </param>
7140
7141 <param
7142 id="1046"
7143 group="1"
7144 wearable="undershirt"
7145 edit_group="driven"
7146 name="Collar Front"
7147 value_min="0"
7148 value_max="1"
7149 value_default=".8">
7150 <param_alpha
7151 tga_file="shirt_collar_alpha.tga"
7152 multiply_blend="true"
7153 domain="0.05" />
7154 </param>
7155
7156 <param
7157 id="1048"
7158 group="1"
7159 wearable="undershirt"
7160 edit_group="driven"
7161 name="Collar Back"
7162 label_min="Low"
7163 label_max="High"
7164 value_min="0"
7165 value_max="1"
7166 value_default=".8">
7167 <param_alpha
7168 tga_file="shirt_collar_back_alpha.tga"
7169 multiply_blend="true"
7170 domain="0.05" />
7171 </param>
7172 </layer>
7173
7174 <layer
7175 name="Nail Polish">
7176 <param
7177 id="710"
7178 group="0"
7179 wearable="skin"
7180 edit_group="skin_makeup"
7181 edit_group_order="15"
7182 name="Nail Polish"
7183 label_min="No Polish"
7184 label_max="Painted Nails"
7185 value_min="0"
7186 value_max="1"
7187 value_default="0.0"
7188 camera_distance="1.6"
7189 camera_elevation="-.4"
7190 camera_angle="70">
7191 <param_alpha
7192 tga_file="nailpolish_alpha.tga"
7193 skip_if_zero="true"
7194 domain="0.1" />
7195 </param>
7196
7197 <param
7198 id="715"
7199 group="0"
7200 wearable="skin"
7201 edit_group="skin_makeup"
7202 edit_group_order="16"
7203 name="Nail Polish Color"
7204 label_min="Pink"
7205 label_max="Black"
7206 value_min="0"
7207 value_max="1"
7208 camera_distance="1.6"
7209 camera_elevation="-.4"
7210 camera_angle="70">
7211 <param_color>
7212 <value
7213 color="255,187,200,255" />
7214
7215 <value
7216 color="194,102,127,255" />
7217
7218 <value
7219 color="227,34,99,255" />
7220
7221 <value
7222 color="168,41,60,255" />
7223
7224 <value
7225 color="97,28,59,255" />
7226
7227 <value
7228 color="234,115,93,255" />
7229
7230 <value
7231 color="142,58,47,255" />
7232
7233 <value
7234 color="114,30,46,255" />
7235
7236 <value
7237 color="14,14,14,255" />
7238 </param_color>
7239 </param>
7240 </layer>
7241
7242 <layer
7243 name="upper_gloves bump"
7244 render_pass="bump"
7245 fixed_color="128,128,128,255">
7246 <texture
7247 local_texture="upper_gloves"
7248 local_texture_alpha_only="true" />
7249
7250 <param
7251 id="1059"
7252 group="1"
7253 wearable="gloves"
7254 edit_group="driven"
7255 name="Glove Length bump"
7256 value_min=".01"
7257 value_max="1"
7258 value_default=".8">
7259 <param_alpha
7260 tga_file="glove_length_alpha.tga"
7261 domain="0.01" />
7262 </param>
7263
7264 <param
7265 id="1061"
7266 group="1"
7267 wearable="gloves"
7268 edit_group="driven"
7269 name="Glove Fingers bump"
7270 value_min=".01"
7271 value_max="1"
7272 value_default="1">
7273 <param_alpha
7274 tga_file="gloves_fingers_alpha.tga"
7275 multiply_blend="true"
7276 domain="0.01" />
7277 </param>
7278 </layer>
7279
7280 <layer
7281 name="upper_gloves">
7282 <texture
7283 local_texture="upper_gloves" />
7284
7285 <param
7286 id="827"
7287 group="0"
7288 wearable="gloves"
7289 edit_group="colorpicker"
7290 name="gloves_red"
7291 value_min="0"
7292 value_max="1"
7293 value_default="1">
7294 <param_color>
7295 <value
7296 color="0, 0, 0, 255" />
7297
7298 <value
7299 color="255, 0, 0, 255" />
7300 </param_color>
7301 </param>
7302
7303 <param
7304 id="829"
7305 group="0"
7306 wearable="gloves"
7307 edit_group="colorpicker"
7308 name="gloves_green"
7309 value_min="0"
7310 value_max="1"
7311 value_default="1">
7312 <param_color>
7313 <value
7314 color="0, 0, 0, 255" />
7315
7316 <value
7317 color="0, 255, 0, 255" />
7318 </param_color>
7319 </param>
7320
7321 <param
7322 id="830"
7323 group="0"
7324 wearable="gloves"
7325 edit_group="colorpicker"
7326 name="gloves_blue"
7327 value_min="0"
7328 value_max="1"
7329 value_default="1">
7330 <param_color>
7331 <value
7332 color="0, 0, 0, 255" />
7333
7334 <value
7335 color="0, 0, 255, 255" />
7336 </param_color>
7337 </param>
7338
7339 <param
7340 id="1058"
7341 group="1"
7342 wearable="gloves"
7343 edit_group="driven"
7344 name="Glove Length"
7345 value_min=".01"
7346 value_max="1"
7347 value_default=".8">
7348 <param_alpha
7349 tga_file="glove_length_alpha.tga"
7350 domain="0.01" />
7351 </param>
7352
7353 <param
7354 id="1060"
7355 group="1"
7356 wearable="gloves"
7357 edit_group="driven"
7358 name="Glove Fingers"
7359 value_min=".01"
7360 value_max="1"
7361 value_default="1">
7362 <param_alpha
7363 tga_file="gloves_fingers_alpha.tga"
7364 multiply_blend="true"
7365 domain="0.01" />
7366 </param>
7367 </layer>
7368
7369 <layer
7370 name="upper_clothes_shadow">
7371 <texture
7372 local_texture="upper_shirt" />
7373
7374 <param
7375 id="899"
7376 group="1"
7377 edit_group="driven"
7378 wearable="shirt"
7379 name="Upper Clothes Shading"
7380 value_min="0"
7381 value_max="1"
7382 value_default="0">
7383 <param_color>
7384 <value
7385 color="0, 0, 0, 0" />
7386
7387 <value
7388 color="0, 0, 0, 80" />
7389 </param_color>
7390 </param>
7391
7392 <param
7393 id="900"
7394 group="1"
7395 wearable="shirt"
7396 edit_group="driven"
7397 name="Sleeve Length Shadow"
7398 value_min="0.02"
7399 value_max=".87"
7400 value_default="0.02">
7401 <param_alpha
7402 multiply_blend="false"
7403 tga_file="shirt_sleeve_alpha.tga"
7404 skip_if_zero="true"
7405 domain="0.03" />
7406 </param>
7407
7408 <param
7409 id="901"
7410 group="1"
7411 wearable="shirt"
7412 edit_group="driven"
7413 name="Shirt Shadow Bottom"
7414 value_min="0.02"
7415 value_max="1">
7416 <param_alpha
7417 multiply_blend="true"
7418 tga_file="shirt_bottom_alpha.tga"
7419 skip_if_zero="true"
7420 domain="0.05" />
7421 </param>
7422
7423 <param
7424 id="902"
7425 group="1"
7426 wearable="shirt"
7427 edit_group="driven"
7428 name="Collar Front Shadow Height"
7429 value_min="0.02"
7430 value_max="1">
7431 <param_alpha
7432 multiply_blend="true"
7433 tga_file="shirt_collar_alpha.tga"
7434 skip_if_zero="true"
7435 domain="0.02" />
7436 </param>
7437
7438 <param
7439 id="903"
7440 group="1"
7441 wearable="shirt"
7442 edit_group="driven"
7443 name="Collar Back Shadow Height"
7444 value_min="0.02"
7445 value_max="1">
7446 <param_alpha
7447 multiply_blend="true"
7448 tga_file="shirt_collar_back_alpha.tga"
7449 skip_if_zero="true"
7450 domain="0.02" />
7451 </param>
7452 </layer>
7453
7454 <layer
7455 name="upper_shirt base bump"
7456 render_pass="bump"
7457 fixed_color="128,128,128,255">
7458 <texture
7459 local_texture="upper_shirt"
7460 local_texture_alpha_only="true" />
7461
7462 <param
7463 id="1029"
7464 group="1"
7465 wearable="shirt"
7466 edit_group="driven"
7467 name="Sleeve Length Cloth"
7468 value_min="0"
7469 value_max="0.85">
7470 <param_alpha
7471 multiply_blend="false"
7472 tga_file="shirt_sleeve_alpha.tga"
7473 domain="0.01" />
7474 </param>
7475
7476 <param
7477 id="1030"
7478 group="1"
7479 wearable="shirt"
7480 edit_group="driven"
7481 name="Shirt Bottom Cloth"
7482 value_min="0"
7483 value_max="1">
7484 <param_alpha
7485 multiply_blend="true"
7486 tga_file="shirt_bottom_alpha.tga"
7487 domain="0.05" />
7488 </param>
7489
7490 <param
7491 id="1031"
7492 group="1"
7493 wearable="shirt"
7494 edit_group="driven"
7495 name="Collar Front Height Cloth"
7496 value_min="0"
7497 value_max="1">
7498 <param_alpha
7499 multiply_blend="true"
7500 tga_file="shirt_collar_alpha.tga"
7501 domain="0.05" />
7502 </param>
7503
7504 <param
7505 id="1032"
7506 group="1"
7507 wearable="shirt"
7508 edit_group="driven"
7509 name="Collar Back Height Cloth"
7510 value_min="0"
7511 value_max="1">
7512 <param_alpha
7513 multiply_blend="true"
7514 tga_file="shirt_collar_back_alpha.tga"
7515 domain="0.05" />
7516 </param>
7517 </layer>
7518
7519 <layer
7520 name="upper_clothes bump"
7521 render_pass="bump">
7522 <texture
7523 tga_file="bump_shirt_wrinkles.tga" />
7524
7525 <texture
7526 local_texture="upper_shirt"
7527 local_texture_alpha_only="true" />
7528
7529 <param
7530 id="868"
7531 group="0"
7532 wearable="shirt"
7533 edit_group="shirt"
7534 edit_group_order="8"
7535 name="Shirt Wrinkles"
7536 value_min="0"
7537 value_max="1"
7538 value_default="0">
7539 <param_color>
7540 <value
7541 color="255, 255, 255, 0" />
7542
7543 <value
7544 color="255, 255, 255, 255" />
7545 </param_color>
7546 </param>
7547
7548 <param
7549 id="1013"
7550 group="1"
7551 wearable="shirt"
7552 edit_group="driven"
7553 name="Sleeve Length Cloth"
7554 value_min="0"
7555 value_max="0.85">
7556 <param_alpha
7557 multiply_blend="false"
7558 tga_file="shirt_sleeve_alpha.tga"
7559 domain="0.01" />
7560 </param>
7561
7562 <param
7563 id="1014"
7564 group="1"
7565 wearable="shirt"
7566 edit_group="driven"
7567 name="Shirt Bottom Cloth"
7568 value_min="0"
7569 value_max="1">
7570 <param_alpha
7571 multiply_blend="true"
7572 tga_file="shirt_bottom_alpha.tga"
7573 domain="0.05" />
7574 </param>
7575
7576 <param
7577 id="1015"
7578 group="1"
7579 wearable="shirt"
7580 edit_group="driven"
7581 name="Collar Front Height Cloth"
7582 value_min="0"
7583 value_max="1">
7584 <param_alpha
7585 multiply_blend="true"
7586 tga_file="shirt_collar_alpha.tga"
7587 domain="0.05" />
7588 </param>
7589
7590 <param
7591 id="1016"
7592 group="1"
7593 wearable="shirt"
7594 edit_group="driven"
7595 name="Collar Back Height Cloth"
7596 value_min="0"
7597 value_max="1">
7598 <param_alpha
7599 multiply_blend="true"
7600 tga_file="shirt_collar_back_alpha.tga"
7601 domain="0.05" />
7602 </param>
7603 </layer>
7604
7605 <layer
7606 name="upper_clothes">
7607 <texture
7608 local_texture="upper_shirt" />
7609
7610 <param
7611 id="803"
7612 group="0"
7613 wearable="shirt"
7614 edit_group="colorpicker"
7615 name="shirt_red"
7616 value_min="0"
7617 value_max="1"
7618 value_default="1">
7619 <param_color>
7620 <value
7621 color="0, 0, 0, 255" />
7622
7623 <value
7624 color="255, 0, 0, 255" />
7625 </param_color>
7626 </param>
7627
7628 <param
7629 id="804"
7630 group="0"
7631 wearable="shirt"
7632 edit_group="colorpicker"
7633 name="shirt_green"
7634 value_min="0"
7635 value_max="1"
7636 value_default="1">
7637 <param_color>
7638 <value
7639 color="0, 0, 0, 255" />
7640
7641 <value
7642 color="0, 255, 0, 255" />
7643 </param_color>
7644 </param>
7645
7646 <param
7647 id="805"
7648 group="0"
7649 wearable="shirt"
7650 edit_group="colorpicker"
7651 name="shirt_blue"
7652 value_min="0"
7653 value_max="1"
7654 value_default="1">
7655 <param_color>
7656 <value
7657 color="0, 0, 0, 255" />
7658
7659 <value
7660 color="0, 0, 255, 255" />
7661 </param_color>
7662 </param>
7663
7664 <param
7665 id="600"
7666 group="1"
7667 wearable="shirt"
7668 edit_group="driven"
7669 name="Sleeve Length Cloth"
7670 value_min="0"
7671 value_max="0.85"
7672 value_default=".7">
7673 <param_alpha
7674 multiply_blend="false"
7675 tga_file="shirt_sleeve_alpha.tga"
7676 domain="0.01" />
7677 </param>
7678
7679 <param
7680 id="601"
7681 group="1"
7682 wearable="shirt"
7683 edit_group="driven"
7684 name="Shirt Bottom Cloth"
7685 value_min="0"
7686 value_max="1"
7687 value_default=".8">
7688 <param_alpha
7689 multiply_blend="true"
7690 tga_file="shirt_bottom_alpha.tga"
7691 domain="0.05" />
7692 </param>
7693
7694 <param
7695 id="602"
7696 group="1"
7697 wearable="shirt"
7698 edit_group="driven"
7699 name="Collar Front Height Cloth"
7700 value_min="0"
7701 value_max="1"
7702 value_default=".8">
7703 <param_alpha
7704 multiply_blend="true"
7705 tga_file="shirt_collar_alpha.tga"
7706 domain="0.05" />
7707 </param>
7708
7709 <param
7710 id="778"
7711 group="1"
7712 wearable="shirt"
7713 edit_group="driven"
7714 name="Collar Back Height Cloth"
7715 value_min="0"
7716 value_max="1"
7717 value_default=".8">
7718 <param_alpha
7719 multiply_blend="true"
7720 tga_file="shirt_collar_back_alpha.tga"
7721 domain="0.05" />
7722 </param>
7723 </layer>
7724
7725 <layer
7726 name="upper_jacket base bump"
7727 render_pass="bump"
7728 fixed_color="128,128,128,255">
7729 <texture
7730 local_texture="upper_jacket"
7731 local_texture_alpha_only="true" />
7732
7733 <param
7734 id="1039"
7735 group="1"
7736 wearable="jacket"
7737 edit_group="driven"
7738 edit_group_order="1"
7739 name="Jacket Sleeve Length bump"
7740 value_min="0"
7741 value_max="1">
7742 <param_alpha
7743 multiply_blend="false"
7744 tga_file="shirt_sleeve_alpha.tga"
7745 domain="0.01" />
7746 </param>
7747
7748 <param
7749 id="1040"
7750 group="1"
7751 wearable="jacket"
7752 edit_group="driven"
7753 name="Jacket Collar Front bump"
7754 value_min="0"
7755 value_max="1">
7756 <param_alpha
7757 multiply_blend="true"
7758 tga_file="shirt_collar_alpha.tga"
7759 domain="0.05" />
7760 </param>
7761
7762 <param
7763 id="1041"
7764 group="1"
7765 wearable="jacket"
7766 edit_group="driven"
7767 edit_group_order="3.5"
7768 name="Jacket Collar Back bump"
7769 value_min="0"
7770 value_max="1">
7771 <param_alpha
7772 multiply_blend="true"
7773 tga_file="shirt_collar_back_alpha.tga"
7774 domain="0.05" />
7775 </param>
7776
7777 <param
7778 id="1037"
7779 group="1"
7780 wearable="jacket"
7781 edit_group="driven"
7782 name="jacket bottom length upper bump"
7783 value_min="0"
7784 value_max="1">
7785 <param_alpha
7786 multiply_blend="true"
7787 tga_file="jacket_length_upper_alpha.tga"
7788 domain="0.01" />
7789 </param>
7790
7791 <param
7792 id="1038"
7793 group="1"
7794 wearable="jacket"
7795 edit_group="driven"
7796 name="jacket open upper bump"
7797 value_min="0"
7798 value_max="1">
7799 <param_alpha
7800 multiply_blend="true"
7801 tga_file="jacket_open_upper_alpha.tga"
7802 domain="0.01" />
7803 </param>
7804 </layer>
7805
7806 <layer
7807 name="upper_jacket bump"
7808 render_pass="bump">
7809 <texture
7810 tga_file="bump_shirt_wrinkles.tga" />
7811
7812 <texture
7813 local_texture="upper_jacket"
7814 local_texture_alpha_only="true" />
7815
7816
7817 <param
7818 id="875"
7819 group="1"
7820 wearable="jacket"
7821 name="jacket upper Wrinkles"
7822 value_min="0"
7823 value_max="1"
7824 value_default="0">
7825 <param_color>
7826 <value
7827 color="255, 255, 255, 0" />
7828
7829 <value
7830 color="255, 255, 255, 255" />
7831 </param_color>
7832 </param>
7833
7834 <param
7835 id="1019"
7836 group="1"
7837 wearable="jacket"
7838 edit_group="driven"
7839 edit_group_order="1"
7840 name="Jacket Sleeve Length bump"
7841 value_min="0"
7842 value_max="1">
7843 <param_alpha
7844 multiply_blend="false"
7845 tga_file="shirt_sleeve_alpha.tga"
7846 domain="0.01" />
7847 </param>
7848
7849 <param
7850 id="1021"
7851 group="1"
7852 wearable="jacket"
7853 edit_group="driven"
7854 name="Jacket Collar Front bump"
7855 value_min="0"
7856 value_max="1">
7857 <param_alpha
7858 multiply_blend="true"
7859 tga_file="shirt_collar_alpha.tga"
7860 domain="0.05" />
7861 </param>
7862
7863 <param
7864 id="1023"
7865 group="1"
7866 wearable="jacket"
7867 edit_group="driven"
7868 edit_group_order="3.5"
7869 name="Jacket Collar Back bump"
7870 value_min="0"
7871 value_max="1">
7872 <param_alpha
7873 multiply_blend="true"
7874 tga_file="shirt_collar_back_alpha.tga"
7875 domain="0.05" />
7876 </param>
7877
7878 <param
7879 id="1025"
7880 group="1"
7881 wearable="jacket"
7882 edit_group="driven"
7883 name="jacket bottom length upper bump"
7884 value_min="0"
7885 value_max="1">
7886 <param_alpha
7887 multiply_blend="true"
7888 tga_file="jacket_length_upper_alpha.tga"
7889 domain="0.01" />
7890 </param>
7891
7892 <param
7893 id="1026"
7894 group="1"
7895 wearable="jacket"
7896 edit_group="driven"
7897 name="jacket open upper bump"
7898 value_min="0"
7899 value_max="1">
7900 <param_alpha
7901 multiply_blend="true"
7902 tga_file="jacket_open_upper_alpha.tga"
7903 domain="0.01" />
7904 </param>
7905 </layer>
7906
7907 <layer
7908 name="upper_jacket">
7909 <texture
7910 local_texture="upper_jacket" />
7911
7912 <param
7913 id="831"
7914 group="1"
7915 edit_group="colorpicker_driven"
7916 wearable="jacket"
7917 name="upper_jacket_red"
7918 value_min="0"
7919 value_max="1"
7920 value_default="1">
7921 <param_color>
7922 <value
7923 color="0, 0, 0, 255" />
7924
7925 <value
7926 color="255, 0, 0, 255" />
7927 </param_color>
7928 </param>
7929
7930 <param
7931 id="832"
7932 group="1"
7933 edit_group="colorpicker_driven"
7934 wearable="jacket"
7935 name="upper_jacket_green"
7936 value_min="0"
7937 value_max="1"
7938 value_default="1">
7939 <param_color>
7940 <value
7941 color="0, 0, 0, 255" />
7942
7943 <value
7944 color="0, 255, 0, 255" />
7945 </param_color>
7946 </param>
7947
7948 <param
7949 id="833"
7950 group="1"
7951 edit_group="colorpicker_driven"
7952 wearable="jacket"
7953 name="upper_jacket_blue"
7954 value_min="0"
7955 value_max="1"
7956 value_default="1">
7957 <param_color>
7958 <value
7959 color="0, 0, 0, 255" />
7960
7961 <value
7962 color="0, 0, 255, 255" />
7963 </param_color>
7964 </param>
7965
7966 <param
7967 id="1020"
7968 group="1"
7969 edit_group="driven"
7970 wearable="jacket"
7971 name="jacket Sleeve Length" value_min="0"
7972 value_max="1">
7973 <param_alpha
7974 multiply_blend="false"
7975 tga_file="shirt_sleeve_alpha.tga"
7976 domain="0.01" />
7977 </param>
7978
7979 <param
7980 id="1022"
7981 group="1"
7982 wearable="jacket"
7983 edit_group="driven"
7984 name="jacket Collar Front"
7985 value_min="0"
7986 value_max="1">
7987 <param_alpha
7988 multiply_blend="true"
7989 tga_file="shirt_collar_alpha.tga"
7990 domain="0.05" />
7991 </param>
7992
7993 <param
7994 id="1024"
7995 group="1"
7996 wearable="jacket"
7997 edit_group="driven"
7998 edit_group_order="3.5"
7999 name="jacket Collar Back"
8000 value_min="0"
8001 value_max="1">
8002 <param_alpha
8003 multiply_blend="true"
8004 tga_file="shirt_collar_back_alpha.tga"
8005 domain="0.05" />
8006 </param>
8007
8008 <param
8009 id="620"
8010 group="1"
8011 wearable="jacket"
8012 edit_group="jacket"
8013 name="bottom length upper"
8014 label_min="hi cut"
8015 label_max="low cut"
8016 value_min="0"
8017 value_max="1"
8018 value_default=".8"
8019 camera_distance="1.2"
8020 camera_angle="30"
8021 camera_elevation=".2">
8022 <param_alpha
8023 multiply_blend="true"
8024 tga_file="jacket_length_upper_alpha.tga"
8025 domain="0.01" />
8026 </param>
8027
8028 <param
8029 id="622"
8030 group="1"
8031 wearable="jacket"
8032 edit_group="jacket"
8033 name="open upper"
8034 label_min="closed"
8035 label_max="open"
8036 value_min="0"
8037 value_max="1"
8038 value_default=".8"
8039 camera_distance="1.2"
8040 camera_angle="30"
8041 camera_elevation=".2">
8042 <param_alpha
8043 multiply_blend="true"
8044 tga_file="jacket_open_upper_alpha.tga"
8045 domain="0.01" />
8046 </param>
8047 </layer>
8048
8049 <layer
8050 name="upper alpha"
8051 visibility_mask="TRUE">
8052 <texture
8053 local_texture="upper_alpha" />
8054 </layer>
8055
8056 </layer_set>
8057
8058 <!-- =========================================================== -->
8059 <layer_set
8060 body_region="lower_body"
8061 width="512"
8062 height="512">
8063 <layer
8064 name="lower body bump base"
8065 fixed_color = "128,128,128,255"
8066 render_pass="bump">
8067 </layer>
8068 <layer
8069 name="base_lowerbody bump"
8070 render_pass="bump">
8071 <texture
8072 tga_file="bump_lowerbody_base.tga"
8073 file_is_mask="FALSE" />
8074
8075 <param
8076 id="878"
8077 group="1"
8078 wearable="skin"
8079 edit_group="driven"
8080 edit_group_order="20"
8081 name="Bump upperdef"
8082 value_min="0"
8083 value_max="1">
8084 <param_alpha
8085 domain="0" />
8086 </param>
8087 </layer>
8088
8089 <layer
8090 name="base"
8091 global_color="skin_color">
8092 <texture
8093 tga_file="body_skingrain.tga" />
8094 </layer>
8095
8096 <layer
8097 name="shadow">
8098 <texture
8099 tga_file="lowerbody_shading_alpha.tga"
8100 file_is_mask="TRUE" />
8101
8102 <param
8103 id="160"
8104 group="1"
8105 name="Shading"
8106 wearable="pants"
8107 cross_wearable="true"
8108 value_min="0"
8109 value_max="1">
8110 <param_color>
8111 <value
8112 color="0, 0, 0, 0" />
8113
8114 <value
8115 color="0, 0, 0, 128" />
8116 </param_color>
8117 </param>
8118 </layer>
8119
8120 <layer
8121 name="highlight">
8122 <texture
8123 tga_file="lowerbody_highlights_alpha.tga"
8124 file_is_mask="TRUE" />
8125
8126 <param
8127 id="161"
8128 group="1"
8129 name="Shading"
8130 wearable="skin"
8131 value_min="0"
8132 value_max="1">
8133 <param_color>
8134 <value
8135 color="255, 255, 255, 0" />
8136
8137 <value
8138 color="255, 255, 255, 64" />
8139 </param_color>
8140 </param>
8141 </layer>
8142
8143 <layer
8144 name="toenails">
8145 <texture
8146 tga_file="lowerbody_color.tga" />
8147 </layer>
8148
8149 <layer
8150 name="lower_bodypaint">
8151 <texture
8152 local_texture="lower_bodypaint" />
8153 </layer>
8154
8155 <layer
8156 name="freckles lower"
8157 fixed_color="120,47,20,128">
8158 <param
8159 id="777"
8160 group="1"
8161 name="freckles lower"
8162 wearable="skin"
8163 value_min="0"
8164 value_max="1">
8165 <param_alpha
8166 tga_file="bodyfreckles_alpha.tga"
8167 skip_if_zero="true"
8168 domain="0.6" />
8169 </param>
8170 </layer>
8171
8172 <layer
8173 name="lower_tattoo">
8174 <texture
8175 local_texture="lower_tattoo" />
8176
8177 <param
8178 id="1068"
8179 group="1"
8180 edit_group="colorpicker_driven"
8181 wearable="tattoo"
8182 name="tattoo_lower_red"
8183 value_min="0"
8184 value_max="1"
8185 value_default="1">
8186 <param_color>
8187 <value
8188 color="0, 0, 0, 255" />
8189
8190 <value
8191 color="255, 0, 0, 255" />
8192 </param_color>
8193 </param>
8194
8195 <param
8196 id="1069"
8197 group="1"
8198 edit_group="colorpicker_driven"
8199 wearable="tattoo"
8200 name="tattoo_lower_green"
8201 value_min="0"
8202 value_max="1"
8203 value_default="1">
8204 <param_color>
8205 <value
8206 color="0, 0, 0, 255" />
8207
8208 <value
8209 color="0, 255, 0, 255" />
8210 </param_color>
8211 </param>
8212
8213 <param
8214 id="1070"
8215 group="1"
8216 edit_group="colorpicker_driven"
8217 wearable="tattoo"
8218 name="tattoo_lower_blue"
8219 value_min="0"
8220 value_max="1"
8221 value_default="1">
8222 <param_color>
8223 <value
8224 color="0, 0, 0, 255" />
8225
8226 <value
8227 color="0, 0, 255, 255" />
8228 </param_color>
8229 </param>
8230
8231 </layer>
8232
8233 <layer
8234 name="lower_underpants bump"
8235 render_pass="bump"
8236 fixed_color="128,128,128,255">
8237 <texture
8238 local_texture="lower_underpants"
8239 local_texture_alpha_only="true" />
8240
8241 <param
8242 id="1055"
8243 group="1"
8244 wearable="underpants"
8245 edit_group="underpants"
8246 name="Pants Length"
8247 value_min="0"
8248 value_max="1"
8249 value_default=".3">
8250 <param_alpha
8251 tga_file="pants_length_alpha.tga"
8252 domain="0.01" />
8253 </param>
8254
8255 <param
8256 id="1057"
8257 group="1"
8258 wearable="underpants"
8259 edit_group="underpants"
8260 name="Pants Waist"
8261 value_min="0"
8262 value_max="1"
8263 value_default=".8">
8264 <param_alpha
8265 tga_file="pants_waist_alpha.tga"
8266 domain="0.05" />
8267 </param>
8268 </layer>
8269
8270 <layer
8271 name="lower_underpants">
8272 <texture
8273 local_texture="lower_underpants" />
8274
8275 <param
8276 id="824"
8277 group="0"
8278 wearable="underpants"
8279 edit_group="colorpicker"
8280 name="underpants_red"
8281 value_min="0"
8282 value_max="1"
8283 value_default="1">
8284 <param_color>
8285 <value
8286 color="0, 0, 0, 255" />
8287
8288 <value
8289 color="255, 0, 0, 255" />
8290 </param_color>
8291 </param>
8292
8293 <param
8294 id="825"
8295 group="0"
8296 wearable="underpants"
8297 edit_group="colorpicker"
8298 name="underpants_green"
8299 value_min="0"
8300 value_max="1"
8301 value_default="1">
8302 <param_color>
8303 <value
8304 color="0, 0, 0, 255" />
8305
8306 <value
8307 color="0, 255, 0, 255" />
8308 </param_color>
8309 </param>
8310
8311 <param
8312 id="826"
8313 group="0"
8314 wearable="underpants"
8315 edit_group="colorpicker"
8316 name="underpants_blue"
8317 value_min="0"
8318 value_max="1"
8319 value_default="1">
8320 <param_color>
8321 <value
8322 color="0, 0, 0, 255" />
8323
8324 <value
8325 color="0, 0, 255, 255" />
8326 </param_color>
8327 </param>
8328
8329 <param
8330 id="1054"
8331 group="1"
8332 wearable="underpants"
8333 edit_group="driven"
8334 name="Pants Length"
8335 value_min="0"
8336 value_max="1"
8337 value_default=".3"
8338 camera_distance="1.2"
8339 camera_angle="30"
8340 camera_elevation="-.3">
8341 <param_alpha
8342 tga_file="pants_length_alpha.tga"
8343 domain="0.01" />
8344 </param>
8345
8346 <param
8347 id="1056"
8348 group="1"
8349 wearable="underpants"
8350 edit_group="driven"
8351 name="Pants Waist"
8352 value_min="0"
8353 value_max="1"
8354 value_default=".8">
8355 <param_alpha
8356 tga_file="pants_waist_alpha.tga"
8357 domain="0.05" />
8358 </param>
8359 </layer>
8360
8361 <layer
8362 name="lower_socks bump"
8363 render_pass="bump"
8364 fixed_color="128,128,128,255">
8365 <texture
8366 local_texture="lower_socks"
8367 local_texture_alpha_only="true" />
8368
8369 <param
8370 id="1051"
8371 group="1"
8372 wearable="socks"
8373 edit_group="driven"
8374 name="Socks Length bump"
8375 value_min="0"
8376 value_max="1"
8377 value_default="0.35">
8378 <param_alpha
8379 tga_file="shoe_height_alpha.tga"
8380 domain="0.01" />
8381 </param>
8382 </layer>
8383
8384 <layer
8385 name="lower_socks">
8386 <texture
8387 local_texture="lower_socks" />
8388
8389 <param
8390 id="818"
8391 group="0"
8392 wearable="socks"
8393 edit_group="colorpicker"
8394 name="socks_red"
8395 value_min="0"
8396 value_max="1"
8397 value_default="1">
8398 <param_color>
8399 <value
8400 color="0, 0, 0, 255" />
8401
8402 <value
8403 color="255, 0, 0, 255" />
8404 </param_color>
8405 </param>
8406
8407 <param
8408 id="819"
8409 group="0"
8410 wearable="socks"
8411 edit_group="colorpicker"
8412 name="socks_green"
8413 value_min="0"
8414 value_max="1"
8415 value_default="1">
8416 <param_color>
8417 <value
8418 color="0, 0, 0, 255" />
8419
8420 <value
8421 color="0, 255, 0, 255" />
8422 </param_color>
8423 </param>
8424
8425 <param
8426 id="820"
8427 group="0"
8428 wearable="socks"
8429 edit_group="colorpicker"
8430 name="socks_blue"
8431 value_min="0"
8432 value_max="1"
8433 value_default="1">
8434 <param_color>
8435 <value
8436 color="0, 0, 0, 255" />
8437
8438 <value
8439 color="0, 0, 255, 255" />
8440 </param_color>
8441 </param>
8442
8443 <param
8444 id="1050"
8445 group="1"
8446 wearable="socks"
8447 edit_group="driven"
8448 name="Socks Length bump"
8449 value_min="0"
8450 value_max="1"
8451 value_default="0.35">
8452 <param_alpha
8453 tga_file="shoe_height_alpha.tga"
8454 domain="0.01" />
8455 </param>
8456 </layer>
8457
8458 <layer
8459 name="lower_shoes bump"
8460 render_pass="bump"
8461 fixed_color="128,128,128,255">
8462 <texture
8463 local_texture="lower_shoes"
8464 local_texture_alpha_only="true" />
8465
8466 <param
8467 id="1053"
8468 group="1"
8469 wearable="shoes"
8470 edit_group="driven"
8471 name="Shoe Height bump"
8472 value_min="0"
8473 value_max="1"
8474 value_default="0.1">
8475 <param_alpha
8476 tga_file="shoe_height_alpha.tga"
8477 domain="0.01" />
8478 </param>
8479 </layer>
8480
8481 <layer
8482 name="lower_shoes">
8483 <texture
8484 local_texture="lower_shoes" />
8485
8486 <param
8487 id="812"
8488 group="0"
8489 wearable="shoes"
8490 edit_group="colorpicker"
8491 name="shoes_red"
8492 value_min="0"
8493 value_max="1"
8494 value_default="1">
8495 <param_color>
8496 <value
8497 color="0, 0, 0, 255" />
8498
8499 <value
8500 color="255, 0, 0, 255" />
8501 </param_color>
8502 </param>
8503
8504 <param
8505 id="813"
8506 group="0"
8507 wearable="shoes"
8508 edit_group="colorpicker"
8509 name="shoes_green"
8510 value_min="0"
8511 value_max="1"
8512 value_default="1">
8513 <param_color>
8514 <value
8515 color="0, 0, 0, 255" />
8516
8517 <value
8518 color="0, 255, 0, 255" />
8519 </param_color>
8520 </param>
8521
8522 <param
8523 id="817"
8524 group="0"
8525 wearable="shoes"
8526 edit_group="colorpicker"
8527 name="shoes_blue"
8528 value_min="0"
8529 value_max="1"
8530 value_default="1">
8531 <param_color>
8532 <value
8533 color="0, 0, 0, 255" />
8534
8535 <value
8536 color="0, 0, 255, 255" />
8537 </param_color>
8538 </param>
8539
8540 <param
8541 id="1052"
8542 group="1"
8543 wearable="shoes"
8544 edit_group="driven"
8545 name="Shoe Height"
8546 value_min="0"
8547 value_max="1"
8548 value_default="0.1">
8549 <param_alpha
8550 tga_file="shoe_height_alpha.tga"
8551 domain="0.01" />
8552 </param>
8553 </layer>
8554
8555 <layer
8556 name="lower_clothes_shadow">
8557 <texture
8558 local_texture="lower_pants" />
8559
8560 <param
8561 id="913"
8562 group="1"
8563 edit_group="driven"
8564 wearable="pants"
8565 name="Lower Clothes Shading"
8566 value_min="0"
8567 value_max="1"
8568 value_default="0">
8569 <param_color>
8570 <value
8571 color="0, 0, 0, 0" />
8572
8573 <value
8574 color="0, 0, 0, 80" />
8575 </param_color>
8576 </param>
8577
8578 <param
8579 id="914"
8580 group="1"
8581 edit_group="driven"
8582 wearable="pants"
8583 name="Waist Height Shadow"
8584 value_min="0.02"
8585 value_max="1">
8586 <param_alpha
8587 tga_file="pants_waist_alpha.tga"
8588 skip_if_zero="true"
8589 domain="0.04" />
8590 </param>
8591
8592 <param
8593 id="915"
8594 group="1"
8595 edit_group="driven"
8596 wearable="pants"
8597 name="Pants Length Shadow"
8598 value_min="0.02"
8599 value_max="1">
8600 <param_alpha
8601 tga_file="pants_length_alpha.tga"
8602 skip_if_zero="true"
8603 domain="0.03" />
8604 </param>
8605 </layer>
8606
8607 <layer
8608 name="lower_pants base bump"
8609 render_pass="bump"
8610 fixed_color="128,128,128,255">
8611 <texture
8612 local_texture="lower_pants"
8613 local_texture_alpha_only="true" />
8614
8615 <param
8616 id="1035"
8617 group="1"
8618 edit_group="driven"
8619 wearable="pants"
8620 name="Waist Height Cloth"
8621 value_min="0"
8622 value_max="1">
8623 <param_alpha
8624 tga_file="pants_waist_alpha.tga"
8625 domain="0.05" />
8626 </param>
8627
8628 <param
8629 id="1036"
8630 group="1"
8631 edit_group="driven"
8632 wearable="pants"
8633 name="Pants Length Cloth"
8634 value_min="0"
8635 value_max="1">
8636 <param_alpha
8637 tga_file="pants_length_alpha.tga"
8638 domain="0.01" />
8639 </param>
8640 </layer>
8641
8642 <layer
8643 name="lower_pants bump"
8644 render_pass="bump">
8645 <texture
8646 tga_file="bump_pants_wrinkles.tga" />
8647
8648 <texture
8649 local_texture="lower_pants"
8650 local_texture_alpha_only="true" />
8651
8652 <param
8653 id="869"
8654 group="0"
8655 wearable="pants"
8656 edit_group="pants"
8657 edit_group_order="6"
8658 name="Pants Wrinkles"
8659 value_min="0"
8660 value_max="1"
8661 value_default="0">
8662 <param_color>
8663 <value
8664 color="255, 255, 255, 0" />
8665
8666 <value
8667 color="255, 255, 255, 255" />
8668 </param_color>
8669 </param>
8670
8671 <param
8672 id="1017"
8673 group="1"
8674 edit_group="driven"
8675 wearable="pants"
8676 name="Waist Height Cloth"
8677 value_min="0"
8678 value_max="1">
8679 <param_alpha
8680 tga_file="pants_waist_alpha.tga"
8681 domain="0.05" />
8682 </param>
8683
8684 <param
8685 id="1018"
8686 group="1"
8687 edit_group="driven"
8688 wearable="pants"
8689 name="Pants Length Cloth"
8690 value_min="0"
8691 value_max="1">
8692 <param_alpha
8693 tga_file="pants_length_alpha.tga"
8694 domain="0.01" />
8695 </param>
8696 </layer>
8697
8698 <layer
8699 name="lower_pants">
8700 <texture
8701 local_texture="lower_pants" />
8702
8703 <param
8704 id="806"
8705 group="0"
8706 wearable="pants"
8707 edit_group="colorpicker"
8708 name="pants_red"
8709 value_min="0"
8710 value_max="1"
8711 value_default="1">
8712 <param_color>
8713 <value
8714 color="0, 0, 0, 255" />
8715
8716 <value
8717 color="255, 0, 0, 255" />
8718 </param_color>
8719 </param>
8720
8721 <param
8722 id="807"
8723 group="0"
8724 wearable="pants"
8725 edit_group="colorpicker"
8726 name="pants_green"
8727 value_min="0"
8728 value_max="1"
8729 value_default="1">
8730 <param_color>
8731 <value
8732 color="0, 0, 0, 255" />
8733
8734 <value
8735 color="0, 255, 0, 255" />
8736 </param_color>
8737 </param>
8738
8739 <param
8740 id="808"
8741 group="0"
8742 wearable="pants"
8743 edit_group="colorpicker"
8744 name="pants_blue"
8745 value_min="0"
8746 value_max="1"
8747 value_default="1">
8748 <param_color>
8749 <value
8750 color="0, 0, 0, 255" />
8751
8752 <value
8753 color="0, 0, 255, 255" />
8754 </param_color>
8755 </param>
8756
8757 <param
8758 id="614"
8759 group="1"
8760 edit_group="driven"
8761 wearable="pants"
8762 name="Waist Height Cloth"
8763 value_min="0"
8764 value_max="1"
8765 value_default=".8">
8766 <param_alpha
8767 tga_file="pants_waist_alpha.tga"
8768 domain="0.05" />
8769 </param>
8770
8771 <param
8772 id="615"
8773 group="1"
8774 edit_group="driven"
8775 wearable="pants"
8776 name="Pants Length Cloth"
8777 value_min="0"
8778 value_max="1"
8779 value_default=".8">
8780 <param_alpha
8781 tga_file="pants_length_alpha.tga"
8782 domain="0.01" />
8783 </param>
8784 </layer>
8785
8786 <layer
8787 name="lower_jacket base bump"
8788 render_pass="bump"
8789 fixed_color="128,128,128,255">
8790 <texture
8791 local_texture="lower_jacket"
8792 local_texture_alpha_only="true" />
8793
8794 <param
8795 id="1033"
8796 group="1"
8797 wearable="jacket"
8798 edit_group="driven"
8799 cross_wearable="true"
8800 name="jacket bottom length lower bump"
8801 value_min="0"
8802 value_max="1">
8803 <param_alpha
8804 multiply_blend="false"
8805 tga_file="jacket_length_lower_alpha.tga"
8806 domain="0.01" />
8807 </param>
8808
8809 <param
8810 id="1034"
8811 group="1"
8812 wearable="jacket"
8813 edit_group="driven"
8814 name="jacket open lower bump"
8815 value_min="0"
8816 value_max="1">
8817 <param_alpha
8818 multiply_blend="true"
8819 tga_file="jacket_open_lower_alpha.tga"
8820 domain="0.01" />
8821 </param>
8822 </layer>
8823
8824 <layer
8825 name="lower_jacket bump"
8826 render_pass="bump">
8827 <texture
8828 tga_file="bump_pants_wrinkles.tga" />
8829
8830 <texture
8831 local_texture="lower_jacket"
8832 local_texture_alpha_only="true" />
8833
8834
8835 <param
8836 id="876"
8837 group="1"
8838 wearable="jacket"
8839 name="jacket upper Wrinkles"
8840 value_min="0"
8841 value_max="1"
8842 value_default="0">
8843 <param_color>
8844 <value
8845 color="255, 255, 255, 0" />
8846
8847 <value
8848 color="255, 255, 255, 255" />
8849 </param_color>
8850 </param>
8851
8852 <param
8853 id="1027"
8854 group="1"
8855 wearable="jacket"
8856 edit_group="driven"
8857 name="jacket bottom length lower bump"
8858 value_min="0"
8859 value_max="1">
8860 <param_alpha
8861 multiply_blend="false"
8862 tga_file="jacket_length_lower_alpha.tga"
8863 domain="0.01" />
8864 </param>
8865
8866 <param
8867 id="1028"
8868 group="1"
8869 wearable="jacket"
8870 edit_group="driven"
8871 name="jacket open lower bump"
8872 value_min="0"
8873 value_max="1">
8874 <param_alpha
8875 multiply_blend="true"
8876 tga_file="jacket_open_lower_alpha.tga"
8877 domain="0.01" />
8878 </param>
8879 </layer>
8880
8881 <layer
8882 name="lower_jacket">
8883 <texture
8884 local_texture="lower_jacket" />
8885
8886 <param
8887 id="809"
8888 group="1"
8889 edit_group="colorpicker_driven"
8890 wearable="jacket"
8891 name="lower_jacket_red"
8892 value_min="0"
8893 value_max="1"
8894 value_default="1">
8895 <param_color>
8896 <value
8897 color="0, 0, 0, 255" />
8898
8899 <value
8900 color="255, 0, 0, 255" />
8901 </param_color>
8902 </param>
8903
8904 <param
8905 id="810"
8906 group="1"
8907 edit_group="colorpicker_driven"
8908 wearable="jacket"
8909 name="lower_jacket_green"
8910 value_min="0"
8911 value_max="1"
8912 value_default="1">
8913 <param_color>
8914 <value
8915 color="0, 0, 0, 255" />
8916
8917 <value
8918 color="0, 255, 0, 255" />
8919 </param_color>
8920 </param>
8921
8922 <param
8923 id="811"
8924 group="1"
8925 edit_group="colorpicker_driven"
8926 wearable="jacket"
8927 name="lower_jacket_blue"
8928 value_min="0"
8929 value_max="1"
8930 value_default="1">
8931 <param_color>
8932 <value
8933 color="0, 0, 0, 255" />
8934
8935 <value
8936 color="0, 0, 255, 255" />
8937 </param_color>
8938 </param>
8939
8940 <param
8941 id="621"
8942 group="1"
8943 wearable="jacket"
8944 edit_group="jacket"
8945 name="bottom length lower"
8946 label_min="hi cut"
8947 label_max="low cut"
8948 value_min="0"
8949 value_max="1"
8950 value_default=".8"
8951 camera_distance="1.2"
8952 camera_angle="30"
8953 camera_elevation=".2">
8954 <param_alpha
8955 multiply_blend="false"
8956 tga_file="jacket_length_lower_alpha.tga"
8957 domain="0.01" />
8958 </param>
8959
8960 <param
8961 id="623"
8962 group="1"
8963 wearable="jacket"
8964 edit_group="jacket"
8965 name="open lower"
8966 label_min="open"
8967 label_max="closed"
8968 value_min="0"
8969 value_max="1"
8970 value_default=".8"
8971 camera_distance="1.2"
8972 camera_angle="30"
8973 camera_elevation=".2">
8974 <param_alpha
8975 multiply_blend="true"
8976 tga_file="jacket_open_lower_alpha.tga"
8977 domain="0.01" />
8978 </param>
8979 </layer>
8980
8981 <layer
8982 name="lower alpha"
8983 visibility_mask="TRUE">
8984 <texture
8985 local_texture="lower_alpha" />
8986 </layer>
8987
8988 </layer_set>
8989
8990 <!-- =========================================================== -->
8991 <layer_set
8992 body_region="eyes"
8993 width="128"
8994 height="128">
8995 <layer
8996 name="whites">
8997 <texture
8998 tga_file="eyewhite.tga" />
8999 </layer>
9000
9001 <layer
9002 name="iris"
9003 global_color="eye_color">
9004 <texture
9005 local_texture="eyes_iris" />
9006 </layer>
9007
9008 <layer
9009 name="eyes alpha"
9010 visibility_mask="TRUE">
9011 <texture
9012 local_texture="eyes_alpha" />
9013 </layer>
9014
9015 </layer_set>
9016
9017 <!-- =========================================================== -->
9018 <layer_set
9019 body_region="skirt"
9020 width="512"
9021 height="512"
9022 clear_alpha="false">
9023 <layer
9024 name="skirt_fabric"
9025 write_all_channels="true">
9026 <texture
9027 local_texture="skirt" />
9028
9029 <param
9030 id="921"
9031 group="0"
9032 wearable="skirt"
9033 edit_group="colorpicker"
9034 name="skirt_red"
9035 value_min="0"
9036 value_max="1"
9037 value_default="1">
9038 <param_color>
9039 <value
9040 color="0, 0, 0, 255" />
9041
9042 <value
9043 color="255, 0, 0, 255" />
9044 </param_color>
9045 </param>
9046
9047 <param
9048 id="922"
9049 group="0"
9050 wearable="skirt"
9051 edit_group="colorpicker"
9052 name="skirt_green"
9053 value_min="0"
9054 value_max="1"
9055 value_default="1">
9056 <param_color>
9057 <value
9058 color="0, 0, 0, 255" />
9059
9060 <value
9061 color="0, 255, 0, 255" />
9062 </param_color>
9063 </param>
9064
9065 <param
9066 id="923"
9067 group="0"
9068 wearable="skirt"
9069 edit_group="colorpicker"
9070 name="skirt_blue"
9071 value_min="0"
9072 value_max="1"
9073 value_default="1">
9074 <param_color>
9075 <value
9076 color="0, 0, 0, 255" />
9077
9078 <value
9079 color="0, 0, 255, 255" />
9080 </param_color>
9081 </param>
9082 </layer>
9083
9084 <layer
9085 name="skirt_fabric_alpha">
9086 <param
9087 id="858"
9088 group="0"
9089 wearable="skirt"
9090 edit_group="skirt"
9091 edit_group_order="1"
9092 name="Skirt Length"
9093 show_simple="true"
9094 label_min="Short"
9095 label_max="Long"
9096 value_min=".01"
9097 value_max="1"
9098 value_default=".4"
9099 simple_percent_min="40"
9100 simple_percent_max="100"
9101 camera_distance="1.3"
9102 camera_elevation="-.5"
9103 camera_angle="30">
9104 <param_alpha
9105 tga_file="skirt_length_alpha.tga"
9106 domain="0"
9107 multiply_blend="true" />
9108 </param>
9109
9110 <param
9111 id="859"
9112 group="0"
9113 wearable="skirt"
9114 edit_group="skirt"
9115 edit_group_order="4"
9116 name="Slit Front"
9117 label_min="Open Front"
9118 label_max="Closed Front"
9119 value_min="0"
9120 value_max="1"
9121 value_default="1"
9122 camera_distance="1.3"
9123 camera_elevation="-.5"
9124 camera_angle="30">
9125 <param_alpha
9126 tga_file="skirt_slit_front_alpha.tga"
9127 multiply_blend="true"
9128 domain="0" />
9129 </param>
9130
9131 <param
9132 id="860"
9133 group="0"
9134 wearable="skirt"
9135 edit_group="skirt"
9136 edit_group_order="5"
9137 name="Slit Back"
9138 label_min="Open Back"
9139 label_max="Closed Back"
9140 value_min="0"
9141 value_max="1"
9142 value_default="1"
9143 camera_distance="1.3"
9144 camera_elevation="-.5"
9145 camera_angle="160">
9146 <param_alpha
9147 tga_file="skirt_slit_back_alpha.tga"
9148 multiply_blend="true"
9149 domain="0" />
9150 </param>
9151
9152 <param
9153 id="861"
9154 group="0"
9155 wearable="skirt"
9156 edit_group="skirt"
9157 edit_group_order="6"
9158 name="Slit Left"
9159 label_min="Open Left"
9160 label_max="Closed Left"
9161 value_min="0"
9162 value_max="1"
9163 value_default="1"
9164 camera_distance="1.3"
9165 camera_elevation="-.5"
9166 camera_angle="30">
9167 <param_alpha
9168 tga_file="skirt_slit_left_alpha.tga"
9169 multiply_blend="true"
9170 domain="0" />
9171 </param>
9172
9173 <param
9174 id="862"
9175 group="0"
9176 wearable="skirt"
9177 edit_group="skirt"
9178 edit_group_order="7"
9179 name="Slit Right"
9180 label_min="Open Right"
9181 label_max="Closed Right"
9182 value_min="0"
9183 value_max="1"
9184 value_default="1"
9185 camera_distance="1.3"
9186 camera_elevation="-.5"
9187 camera_angle="-30">
9188 <param_alpha
9189 tga_file="skirt_slit_right_alpha.tga"
9190 multiply_blend="true"
9191 domain="0" />
9192 </param>
9193 </layer>
9194
9195 </layer_set>
9196
9197 <!-- =========================================================== -->
9198 <driver_parameters>
9199
9200 <param
9201 id="828"
9202 group="0"
9203 name="Loose Upper Clothing"
9204 label="Shirt Fit"
9205 show_simple="true"
9206 wearable="shirt"
9207 edit_group="shirt"
9208 edit_group_order="4"
9209 label_min="Tight Shirt"
9210 label_max="Loose Shirt"
9211 value_min="0"
9212 value_max="1"
9213 camera_distance="1.2"
9214 camera_angle="30"
9215 camera_elevation=".2">
9216 <param_driver>
9217 <driven
9218 id="628" />
9219
9220 <driven
9221 id="899"
9222 min1="0.1"
9223 max1="0.5"
9224 max2="1"
9225 min2="1" />
9226 </param_driver>
9227 </param>
9228
9229 <param
9230 id="816"
9231 group="0"
9232 name="Loose Lower Clothing"
9233 label="Pants Fit"
9234 show_simple="true"
9235 wearable="pants"
9236 edit_group="pants"
9237 edit_group_order="2.5"
9238 label_min="Tight Pants"
9239 label_max="Loose Pants"
9240 value_min="0"
9241 value_max="1"
9242 camera_distance="1.8"
9243 camera_angle="30"
9244 camera_elevation="-.3">
9245 <param_driver>
9246 <driven
9247 id="516" />
9248
9249 <driven
9250 id="913"
9251 min1="0.1"
9252 max1="0.5"
9253 max2="1"
9254 min2="1" />
9255 </param_driver>
9256 </param>
9257
9258 <param
9259 id="814"
9260 group="0"
9261 wearable="pants"
9262 edit_group="pants"
9263 edit_group_order="2"
9264 name="Waist Height"
9265 label_min="Low"
9266 label_max="High"
9267 value_min="0"
9268 value_max="1"
9269 value_default="1"
9270 camera_distance="1.2"
9271 camera_angle="30"
9272 camera_elevation="-.3">
9273 <param_driver>
9274 <driven
9275 id="614" />
9276
9277 <driven
9278 id="1017" />
9279
9280 <driven
9281 id="1035" />
9282
9283 <driven
9284 id="914"
9285 min1="0"
9286 max1=".98"
9287 max2="1"
9288 min2="1" />
9289 </param_driver>
9290 </param>
9291
9292 <param
9293 id="815"
9294 group="0"
9295 wearable="pants"
9296 edit_group="pants"
9297 edit_group_order="1"
9298 name="Pants Length"
9299 show_simple="true"
9300 label_min="Short"
9301 label_max="Long"
9302 value_min="0"
9303 value_max="1"
9304 value_default=".8"
9305 simple_percent_min="20"
9306 simple_percent_max="100"
9307 camera_distance="1.8"
9308 camera_angle="30"
9309 camera_elevation="-.3">
9310 <param_driver>
9311 <driven
9312 id="615"
9313 min1="0"
9314 max1=".9"
9315 max2="1"
9316 min2="1" />
9317
9318 <driven
9319 id="1018"
9320 min1="0"
9321 max1=".9"
9322 max2="1"
9323 min2="1" />
9324
9325 <driven
9326 id="1036"
9327 min1="0"
9328 max1=".9"
9329 max2="1"
9330 min2="1" />
9331
9332 <driven
9333 id="793"
9334 min1=".9"
9335 max1="1"
9336 max2="1"
9337 min2="1" />
9338
9339 <driven
9340 id="915"
9341 min1="0"
9342 max1=".882"
9343 max2="1"
9344 min2="1" />
9345 </param_driver>
9346 </param>
9347
9348 <param
9349 id="800"
9350 group="0"
9351 wearable="shirt"
9352 edit_group="shirt"
9353 edit_group_order="1"
9354 name="Sleeve Length"
9355 show_simple="true"
9356 label_min="Short"
9357 label_max="Long"
9358 value_min="0"
9359 value_max="1"
9360 value_default=".89"
9361 simple_percent_min="15"
9362 simple_percent_max="100"
9363 camera_distance="1.2"
9364 camera_angle="30"
9365 camera_elevation=".2">
9366 <param_driver>
9367 <driven
9368 id="600" />
9369
9370 <driven
9371 id="1013" />
9372
9373 <driven
9374 id="1029" />
9375
9376 <driven
9377 id="900"
9378 min1="0"
9379 max1="1"
9380 max2="1"
9381 min2="1" />
9382 </param_driver>
9383 </param>
9384
9385 <param
9386 id="801"
9387 group="0"
9388 wearable="shirt"
9389 edit_group="shirt"
9390 edit_group_order="2"
9391 name="Shirt Bottom"
9392 label_min="Short"
9393 label_max="Long"
9394 value_min="0"
9395 value_max="1"
9396 value_default="1"
9397 camera_distance="1.2"
9398 camera_angle="30"
9399 camera_elevation=".2">
9400 <param_driver>
9401 <driven
9402 id="601" />
9403
9404 <driven
9405 id="1014" />
9406
9407 <driven
9408 id="1030" />
9409
9410 <driven
9411 id="901"
9412 min1="0"
9413 max1=".98"
9414 max2="1"
9415 min2="1" />
9416 </param_driver>
9417 </param>
9418
9419 <param
9420 id="802"
9421 group="0"
9422 wearable="shirt"
9423 edit_group="shirt"
9424 edit_group_order="3"
9425 name="Collar Front"
9426 show_simple="true"
9427 label_min="Low"
9428 label_max="High"
9429 value_min="0"
9430 value_max="1"
9431 value_default=".78"
9432 simple_percent_min="40"
9433 simple_percent_max="100"
9434 camera_distance="1.2"
9435 camera_angle="15"
9436 camera_elevation=".2">
9437 <param_driver>
9438 <driven
9439 id="602" />
9440
9441 <driven
9442 id="1015" />
9443
9444 <driven
9445 id="1031" />
9446
9447 <driven
9448 id="902"
9449 min1="0"
9450 max1=".98"
9451 max2="1"
9452 min2="1" />
9453 </param_driver>
9454 </param>
9455
9456 <param
9457 id="781"
9458 group="0"
9459 wearable="shirt"
9460 edit_group="shirt"
9461 edit_group_order="3.1"
9462 name="Collar Back"
9463 label_min="Low"
9464 label_max="High"
9465 value_min="0"
9466 value_max="1"
9467 value_default=".78"
9468 camera_distance="1.2"
9469 camera_angle="195"
9470 camera_elevation=".2">
9471 <param_driver>
9472 <driven
9473 id="778" />
9474
9475 <driven
9476 id="1016" />
9477
9478 <driven
9479 id="1032" />
9480
9481 <driven
9482 id="903"
9483 min1="0"
9484 max1=".98"
9485 max2="1"
9486 min2="1" />
9487 </param_driver>
9488 </param>
9489
9490 <param
9491 id="150"
9492 group="0"
9493 wearable="skin"
9494 edit_group="skin_bodydetail"
9495 name="Body Definition"
9496 label_min="Less"
9497 label_max="More"
9498 value_min="0"
9499 value_max="1"
9500 value_default="0"
9501 camera_distance="1.4"
9502 camera_elevation="-.2">
9503 <param_driver>
9504 <driven
9505 id="125" />
9506
9507 <driven
9508 id="126" />
9509
9510 <driven
9511 id="160" />
9512
9513 <driven
9514 id="161" />
9515
9516 <driven
9517 id="874" />
9518
9519 <driven
9520 id="878" />
9521
9522 </param_driver>
9523 </param>
9524
9525 <param
9526 id="775"
9527 group="0"
9528 wearable="skin"
9529 edit_group="skin_bodydetail"
9530 name="Body Freckles"
9531 label_min="Less Freckles"
9532 label_max="More Freckles"
9533 value_min="0"
9534 value_max="1"
9535 value_default="0"
9536 camera_distance="1.4"
9537 camera_elevation="-.2">
9538 <param_driver>
9539 <driven
9540 id="776" />
9541
9542 <driven
9543 id="777" />
9544 </param_driver>
9545 </param>
9546
9547 <param
9548 id="162"
9549 group="0"
9550 wearable="skin"
9551 edit_group="skin_facedetail"
9552 edit_group_order="1"
9553 name="Facial Definition"
9554 label_min="Less"
9555 label_max="More"
9556 value_min="0"
9557 value_max="1"
9558 camera_distance=".3"
9559 camera_elevation=".07"
9560 value_default="0">
9561 <param_driver>
9562 <driven
9563 id="158" />
9564
9565 <driven
9566 id="159" />
9567
9568 <driven
9569 id="873" />
9570 </param_driver>
9571 </param>
9572
9573 <param
9574 id="163"
9575 group="0"
9576 wearable="skin"
9577 edit_group="skin_facedetail"
9578 edit_group_order="3"
9579 name="Wrinkles"
9580 label_min="Less"
9581 label_max="More"
9582 value_min="0"
9583 value_max="1"
9584 camera_distance=".3"
9585 camera_elevation=".07"
9586 value_default="0">
9587 <param_driver>
9588 <!--<driven
9589 id="128" />-->
9590 <driven
9591 id="118" />
9592 </param_driver>
9593 </param>
9594
9595 <param
9596 id="505"
9597 group="0"
9598 wearable="shape"
9599 edit_group="shape_mouth"
9600 edit_group_order="3"
9601 name="Lip Thickness"
9602 label_min="Thin Lips"
9603 label_max="Fat Lips"
9604 value_min="0"
9605 value_max="1"
9606 value_default=".5"
9607 camera_distance=".3"
9608 camera_elevation=".04"
9609 camera_angle="20">
9610 <param_driver>
9611 <driven
9612 id="26"
9613 min1="0"
9614 max1="0"
9615 max2="0"
9616 min2=".5" />
9617
9618 <driven
9619 id="28"
9620 min1=".5"
9621 max1="1"
9622 max2="1"
9623 min2="1" />
9624 </param_driver>
9625 </param>
9626
9627 <param
9628 id="799"
9629 group="0"
9630 wearable="shape"
9631 edit_group="shape_mouth"
9632 edit_group_order="3.2"
9633 name="Lip Ratio"
9634 label="Lip Ratio"
9635 show_simple="true"
9636 label_min="More Upper Lip"
9637 label_max="More Lower Lip"
9638 value_min="0"
9639 value_max="1"
9640 value_default=".5"
9641 camera_distance=".3"
9642 camera_elevation=".04"
9643 camera_angle="20">
9644 <param_driver>
9645 <driven
9646 id="797"
9647 min1="0"
9648 max1="0"
9649 max2="0"
9650 min2=".5" />
9651
9652 <driven
9653 id="798"
9654 min1=".5"
9655 max1="1"
9656 max2="1"
9657 min2="1" />
9658 </param_driver>
9659 </param>
9660
9661 <param
9662 id="155"
9663 group="0"
9664 wearable="shape"
9665 edit_group="shape_mouth"
9666 edit_group_order="1"
9667 name="Lip Width"
9668 label="Lip Width"
9669 label_min="Narrow Lips"
9670 label_max="Wide Lips"
9671 show_simple="true"
9672 value_min="-0.9"
9673 value_max="1.3"
9674 camera_distance=".3"
9675 camera_elevation=".04"
9676 value_default="0">
9677 <param_driver>
9678 <driven
9679 id="29" />
9680
9681 <driven
9682 id="30" />
9683 </param_driver>
9684 </param>
9685
9686 <param
9687 id="196"
9688 group="0"
9689 wearable="shape"
9690 edit_group="shape_eyes"
9691 edit_group_order="2"
9692 name="Eye Spacing"
9693 label="Eye Spacing"
9694 label_min="Close Set Eyes"
9695 label_max="Far Set Eyes"
9696 show_simple="true"
9697 value_min="-2"
9698 value_max="1"
9699 value_default="0"
9700 camera_elevation=".1"
9701 camera_distance=".35"
9702 camera_angle="5">
9703 <param_driver>
9704 <driven
9705 id="194" />
9706
9707 <driven
9708 id="195" />
9709 </param_driver>
9710 </param>
9711
9712 <param
9713 id="769"
9714 group="0"
9715 wearable="shape"
9716 edit_group="shape_eyes"
9717 edit_group_order="4.5"
9718 name="Eye Depth"
9719 label_min="Sunken Eyes"
9720 label_max="Bugged Eyes"
9721 value_min="0"
9722 value_max="1"
9723 value_default=".5"
9724 camera_elevation=".1"
9725 camera_distance=".3"
9726 camera_angle="75">
9727 <param_driver>
9728 <driven
9729 id="767" />
9730
9731 <driven
9732 id="768" />
9733 </param_driver>
9734 </param>
9735
9736 <param
9737 id="198"
9738 group="0"
9739 wearable="shoes"
9740 edit_group="shoes"
9741 edit_group_order="2"
9742 name="Heel Height"
9743 label_min="Low Heels"
9744 label_max="High Heels"
9745 value_min="0"
9746 value_max="1"
9747 value_default="0"
9748 camera_angle="45"
9749 camera_distance=".8"
9750 camera_elevation="-1">
9751 <param_driver>
9752 <driven
9753 id="197" />
9754
9755 <driven
9756 id="500" />
9757 </param_driver>
9758 </param>
9759
9760 <param
9761 id="513"
9762 group="0"
9763 wearable="shoes"
9764 edit_group="shoes"
9765 edit_group_order="3"
9766 name="Heel Shape"
9767 label_min="Pointy Heels"
9768 label_max="Thick Heels"
9769 value_min="0"
9770 value_max="1"
9771 value_default=".5"
9772 camera_angle="45"
9773 camera_distance="1.5"
9774 camera_elevation="-1">
9775 <param_driver>
9776 <driven
9777 id="509"
9778 min1="0"
9779 max1="0"
9780 max2="0"
9781 min2=".5" />
9782
9783 <driven
9784 id="510"
9785 min1=".5"
9786 max1="1"
9787 max2="1"
9788 min2="1" />
9789 </param_driver>
9790 </param>
9791
9792 <param
9793 id="514"
9794 group="0"
9795 wearable="shoes"
9796 edit_group="shoes"
9797 edit_group_order="4"
9798 name="Toe Shape"
9799 label_min="Pointy"
9800 label_max="Square"
9801 value_min="0"
9802 value_max="1"
9803 value_default=".5"
9804 camera_angle="5"
9805 camera_distance=".8"
9806 camera_elevation="-.8">
9807 <param_driver>
9808 <driven
9809 id="511"
9810 min1="0"
9811 max1="0"
9812 max2="0"
9813 min2=".5" />
9814
9815 <driven
9816 id="512"
9817 min1=".5"
9818 max1="1"
9819 max2="1"
9820 min2="1" />
9821 </param_driver>
9822 </param>
9823
9824 <param
9825 id="503"
9826 group="0"
9827 wearable="shoes"
9828 edit_group="shoes"
9829 edit_group_order="6"
9830 name="Platform Height"
9831 label_min="Low Platforms"
9832 label_max="High Platforms"
9833 value_min="0"
9834 value_max="1"
9835 value_default="0"
9836 camera_angle="45"
9837 camera_distance=".5"
9838 camera_elevation="-1">
9839 <param_driver>
9840 <driven
9841 id="501" />
9842
9843 <driven
9844 id="502" />
9845 </param_driver>
9846 </param>
9847
9848 <param
9849 id="193"
9850 group="0"
9851 wearable="shape"
9852 edit_group="shape_head"
9853 edit_group_order="3"
9854 name="Head Shape"
9855 label="Head Shape"
9856 label_min="More Square"
9857 label_max="More Round"
9858 show_simple="true"
9859 value_min="0"
9860 value_max="1"
9861 value_default=".5"
9862 camera_elevation=".1"
9863 camera_distance=".5"
9864 camera_angle="20">
9865 <param_driver>
9866 <driven
9867 id="188"
9868 min1="0"
9869 max1="0"
9870 max2="0"
9871 min2=".5" />
9872
9873 <driven
9874 id="642"
9875 min1="0"
9876 max1="0"
9877 max2="0"
9878 min2=".5" />
9879
9880 <driven
9881 id="189"
9882 min1=".5"
9883 max1="1"
9884 max2="1"
9885 min2="1" />
9886
9887 <driven
9888 id="643"
9889 min1=".5"
9890 max1="1"
9891 max2="1"
9892 min2="1" />
9893 </param_driver>
9894 </param>
9895
9896 <param
9897 id="157"
9898 group="0"
9899 wearable="shape"
9900 edit_group="shape_torso"
9901 edit_group_order="13"
9902 name="Belly Size"
9903 label_min="Small"
9904 label_max="Big"
9905 value_min="0"
9906 value_max="1"
9907 value_default="0"
9908 camera_distance="1.4"
9909 camera_angle="30"
9910 camera_elevation=".2">
9911 <param_driver>
9912 <driven
9913 id="104" />
9914
9915 <driven
9916 id="156" />
9917
9918 <driven
9919 id="849" />
9920 </param_driver>
9921 </param>
9922
9923 <param
9924 id="637"
9925 group="0"
9926 wearable="shape"
9927 edit_group="shape_body"
9928 edit_group_order="3"
9929 name="Body Fat"
9930 label_min="Less Body Fat"
9931 label_max="More Body Fat"
9932 value_min="0"
9933 value_max="1"
9934 value_default="0"
9935 camera_distance="1.8">
9936 <param_driver>
9937 <driven
9938 id="633" />
9939
9940 <driven
9941 id="634" />
9942
9943 <driven
9944 id="635" />
9945
9946 <driven
9947 id="851" />
9948 </param_driver>
9949 </param>
9950
9951 <param
9952 id="130"
9953 group="0"
9954 wearable="hair"
9955 edit_group="hair_style"
9956 edit_group_order="8"
9957 name="Front Fringe"
9958 label_min="Short"
9959 label_max="Long"
9960 value_min="0"
9961 value_max="1"
9962 value_default=".45"
9963 camera_elevation=".1"
9964 camera_distance=".5"
9965 camera_angle="20">
9966 <param_driver>
9967 <driven
9968 id="144"
9969 min1="0"
9970 max1="0"
9971 max2="0"
9972 min2=".5" />
9973
9974 <driven
9975 id="145"
9976 min1=".5"
9977 max1="1"
9978 max2="1"
9979 min2="1" />
9980 </param_driver>
9981 </param>
9982
9983 <param
9984 id="131"
9985 group="0"
9986 wearable="hair"
9987 edit_group="hair_style"
9988 edit_group_order="9"
9989 name="Side Fringe"
9990 label_min="Short"
9991 label_max="Long"
9992 value_min="0"
9993 value_max="1"
9994 value_default=".5"
9995 camera_elevation=".1"
9996 camera_distance=".5"
9997 camera_angle="90">
9998 <param_driver>
9999 <driven
10000 id="146"
10001 min1="0"
10002 max1="0"
10003 max2="0"
10004 min2=".5" />
10005
10006 <driven
10007 id="147"
10008 min1=".5"
10009 max1="1"
10010 max2="1"
10011 min2="1" />
10012 </param_driver>
10013 </param>
10014
10015 <param
10016 id="132"
10017 group="0"
10018 wearable="hair"
10019 edit_group="hair_style"
10020 edit_group_order="10"
10021 name="Back Fringe"
10022 label_min="Short"
10023 label_max="Long"
10024 value_min="0"
10025 value_max="1"
10026 value_default=".39"
10027 camera_elevation=".1"
10028 camera_distance=".5"
10029 camera_angle="160">
10030 <param_driver>
10031 <driven
10032 id="148"
10033 min1="0"
10034 max1="0"
10035 max2="0"
10036 min2=".5" />
10037
10038 <driven
10039 id="149"
10040 min1=".5"
10041 max1="1"
10042 max2="1"
10043 min2="1" />
10044 </param_driver>
10045 </param>
10046
10047 <param
10048 id="133"
10049 group="0"
10050 wearable="hair"
10051 edit_group="hair_style"
10052 edit_group_order="2"
10053 name="Hair Front"
10054 label_min="Short"
10055 label_max="Long"
10056 value_min="0"
10057 value_max="1"
10058 value_default=".25"
10059 camera_elevation=".1"
10060 camera_distance=".5"
10061 camera_angle="20">
10062 <param_driver>
10063 <driven
10064 id="172"
10065 min1="0"
10066 max1="0"
10067 max2="0"
10068 min2=".5" />
10069
10070 <driven
10071 id="171"
10072 min1=".5"
10073 max1="1"
10074 max2="1"
10075 min2="1" />
10076 </param_driver>
10077 </param>
10078
10079 <param
10080 id="134"
10081 group="0"
10082 wearable="hair"
10083 edit_group="hair_style"
10084 edit_group_order="3"
10085 name="Hair Sides"
10086 label_min="Short"
10087 label_max="Long"
10088 value_min="0"
10089 value_max="1"
10090 value_default=".5"
10091 camera_elevation=".1"
10092 camera_distance=".5"
10093 camera_angle="90">
10094 <param_driver>
10095 <driven
10096 id="174"
10097 min1="0"
10098 max1="0"
10099 max2="0"
10100 min2=".5" />
10101
10102 <driven
10103 id="173"
10104 min1=".5"
10105 max1="1"
10106 max2="1"
10107 min2="1" />
10108 </param_driver>
10109 </param>
10110
10111 <param
10112 id="135"
10113 group="0"
10114 wearable="hair"
10115 edit_group="hair_style"
10116 edit_group_order="4"
10117 name="Hair Back"
10118 show_simple="true"
10119 label_min="Short"
10120 label_max="Long"
10121 value_min="0"
10122 value_max="1"
10123 value_default=".55"
10124 camera_elevation="-.1"
10125 camera_distance=".8"
10126 camera_angle="160">
10127 <param_driver>
10128 <driven
10129 id="176"
10130 min1="0"
10131 max1="0"
10132 max2="0"
10133 min2=".5" />
10134
10135 <driven
10136 id="175"
10137 min1=".5"
10138 max1="1"
10139 max2="1"
10140 min2="1" />
10141 </param_driver>
10142 </param>
10143
10144 <param
10145 id="136"
10146 group="0"
10147 wearable="hair"
10148 edit_group="hair_style"
10149 edit_group_order="11.5"
10150 name="Hair Sweep"
10151 label_min="Sweep Forward"
10152 label_max="Sweep Back"
10153 value_min="0"
10154 value_max="1"
10155 value_default=".5"
10156 camera_elevation=".1"
10157 camera_distance=".5"
10158 camera_angle="90">
10159 <param_driver>
10160 <driven
10161 id="179"
10162 min1="0"
10163 max1="0"
10164 max2="0"
10165 min2=".5" />
10166
10167 <driven
10168 id="178"
10169 min1=".5"
10170 max1="1"
10171 max2="1"
10172 min2="1" />
10173 </param_driver>
10174 </param>
10175
10176 <param
10177 id="137"
10178 group="0"
10179 wearable="hair"
10180 edit_group="hair_style"
10181 edit_group_order="16"
10182 name="Hair Tilt"
10183 label_min="Left"
10184 label_max="Right"
10185 value_min="0"
10186 value_max="1"
10187 value_default=".5"
10188 camera_elevation=".1"
10189 camera_distance=".5"
10190 camera_angle="0">
10191 <param_driver>
10192 <driven
10193 id="190"
10194 min1="0"
10195 max1="0"
10196 max2="0"
10197 min2=".5" />
10198
10199 <driven
10200 id="191"
10201 min1=".5"
10202 max1="1"
10203 max2="1"
10204 min2="1" />
10205 </param_driver>
10206 </param>
10207
10208 <param
10209 id="608"
10210 group="0"
10211 wearable="jacket"
10212 edit_group="jacket"
10213 edit_group_order="2"
10214 name="bottom length lower"
10215 label="Jacket Length"
10216 label_min="Short"
10217 label_max="Long"
10218 value_min="0"
10219 value_max="1"
10220 value_default=".8"
10221 camera_distance="1.4"
10222 camera_angle="30"
10223 camera_elevation=".2">
10224 <param_driver>
10225 <driven
10226 id="620" />
10227
10228 <driven
10229 id="1025" />
10230
10231 <driven
10232 id="1037" />
10233
10234 <driven
10235 id="621" />
10236
10237 <driven
10238 id="1027" />
10239
10240 <driven
10241 id="1033" />
10242 </param_driver>
10243 </param>
10244
10245 <param
10246 id="609"
10247 group="0"
10248 wearable="jacket"
10249 edit_group="jacket"
10250 edit_group_order="4"
10251 name="open jacket"
10252 label="Open Front"
10253 label_min="Open"
10254 label_max="Closed"
10255 value_min="0"
10256 value_max="1"
10257 value_default=".2"
10258 camera_distance="1.4"
10259 camera_angle="30"
10260 camera_elevation=".2">
10261 <param_driver>
10262 <driven
10263 id="622" />
10264
10265 <driven
10266 id="1026" />
10267
10268 <driven
10269 id="1038" />
10270
10271 <driven
10272 id="623" />
10273
10274 <driven
10275 id="1028" />
10276
10277 <driven
10278 id="1034" />
10279 </param_driver>
10280 </param>
10281
10282 <param
10283 id="105"
10284 group="0"
10285 sex="female"
10286 wearable="shape"
10287 edit_group="shape_torso"
10288 edit_group_order="6"
10289 name="Breast Size"
10290 label_min="Small"
10291 label_max="Large"
10292 value_min="0"
10293 value_max="1"
10294 value_default=".5"
10295 camera_elevation=".3"
10296 camera_distance="1.2"
10297 camera_angle="30">
10298 <param_driver>
10299 <driven
10300 id="843"
10301 min1="0"
10302 max1="0"
10303 max2="0"
10304 min2=".01" />
10305
10306 <driven
10307 id="627"
10308 min1="0"
10309 max1="0.01"
10310 max2="0.01"
10311 min2=".5" />
10312
10313 <driven
10314 id="626"
10315 min1=".5"
10316 max1="1"
10317 max2="1"
10318 min2="1" />
10319 </param_driver>
10320 </param>
10321
10322 <param
10323 id="629"
10324 group="0"
10325 wearable="shape"
10326 edit_group="shape_head"
10327 edit_group_order="6"
10328 name="Forehead Angle"
10329 label_min="More Vertical"
10330 label_max="More Sloped"
10331 value_min="0"
10332 value_max="1"
10333 value_default=".5"
10334 camera_elevation=".1"
10335 camera_distance=".5"
10336 camera_angle="70">
10337 <param_driver>
10338 <driven
10339 id="630"
10340 min1="0"
10341 max1="0"
10342 max2="0"
10343 min2=".5" />
10344
10345 <driven
10346 id="644"
10347 min1="0"
10348 max1="0"
10349 max2="0"
10350 min2=".5" />
10351
10352 <driven
10353 id="631"
10354 min1=".5"
10355 max1="1"
10356 max2="1"
10357 min2="1" />
10358
10359 <driven
10360 id="645"
10361 min1=".5"
10362 max1="1"
10363 max2="1"
10364 min2="1" />
10365 </param_driver>
10366 </param>
10367
10368 <param
10369 id="646"
10370 group="0"
10371 name="Egg_Head"
10372 label="Egg Head"
10373 wearable="shape"
10374 edit_group="shape_head"
10375 edit_group_order="4"
10376 label_min="Chin Heavy"
10377 label_max="Forehead Heavy"
10378 show_simple="true"
10379 value_min="-1.3"
10380 value_max="1"
10381 value_default="0"
10382 camera_elevation=".1"
10383 camera_distance=".5"
10384 camera_angle="20">
10385 <param_driver>
10386 <driven
10387 id="640" />
10388
10389 <driven
10390 id="186" />
10391 </param_driver>
10392 </param>
10393
10394 <param
10395 id="647"
10396 group="0"
10397 name="Squash_Stretch_Head"
10398 label="Head Stretch"
10399 wearable="shape"
10400 edit_group="shape_head"
10401 edit_group_order="2"
10402 show_simple="true"
10403 label_min="Squash Head"
10404 label_max="Stretch Head"
10405 value_min="-0.5"
10406 value_max="1"
10407 value_default="0"
10408 camera_elevation=".1"
10409 camera_distance=".5"
10410 camera_angle="20">
10411 <param_driver>
10412 <driven
10413 id="641" />
10414
10415 <driven
10416 id="187" />
10417 </param_driver>
10418 </param>
10419
10420 <param
10421 id="649"
10422 group="0"
10423 sex="female"
10424 wearable="shape"
10425 edit_group="shape_torso"
10426 edit_group_order="1.1"
10427 name="Torso Muscles"
10428 label="Torso Muscles"
10429 show_simple="true"
10430 label_min="Less Muscular"
10431 label_max="More Muscular"
10432 value_min="0"
10433 value_max="1"
10434 value_default=".5"
10435 camera_elevation=".1"
10436 camera_distance="1"
10437 camera_angle="15">
10438 <param_driver>
10439 <driven
10440 id="648"
10441 min1="0"
10442 max1="0"
10443 max2="0"
10444 min2=".5" />
10445
10446 <driven
10447 id="106"
10448 min1=".5"
10449 max1="1"
10450 max2="1"
10451 min2="1" />
10452 </param_driver>
10453 </param>
10454
10455 <param
10456 id="678"
10457 group="0"
10458 sex="male"
10459 wearable="shape"
10460 edit_group="shape_torso"
10461 edit_group_order="1"
10462 name="Torso Muscles"
10463 show_simple="true"
10464 label_min="Less Muscular"
10465 label_max="More Muscular"
10466 value_min="0"
10467 value_max="1"
10468 value_default=".5"
10469 camera_elevation=".1"
10470 camera_distance="1.2"
10471 camera_angle="0">
10472 <param_driver>
10473 <driven
10474 id="677"
10475 min1="0"
10476 max1="0"
10477 max2="0"
10478 min2=".5" />
10479
10480 <driven
10481 id="106"
10482 min1=".5"
10483 max1="1"
10484 max2="1"
10485 min2="1" />
10486 </param_driver>
10487 </param>
10488
10489 <param
10490 id="652"
10491 group="0"
10492 wearable="shape"
10493 edit_group="shape_legs"
10494 edit_group_order="1"
10495 name="Leg Muscles"
10496 label_min="Less Muscular"
10497 label_max="More Muscular"
10498 show_simple="true"
10499 value_min="0"
10500 value_max="1"
10501 value_default=".5"
10502 camera_distance="1.3"
10503 camera_elevation="-.5"
10504 camera_angle="15">
10505 <param_driver>
10506 <driven
10507 id="651"
10508 min1="0"
10509 max1="0"
10510 max2="0"
10511 min2=".5" />
10512
10513 <driven
10514 id="152"
10515 min1=".5"
10516 max1="1"
10517 max2="1"
10518 min2="1" />
10519 </param_driver>
10520 </param>
10521
10522 <param
10523 id="80"
10524 name="male"
10525 group="0"
10526 edit_group="dummy"
10527 wearable="shape"
10528 value_min="0"
10529 value_max="1">
10530 <param_driver>
10531 <driven
10532 id="32" />
10533
10534 <driven
10535 id="153" />
10536
10537 <driven
10538 id="40" />
10539
10540 <driven
10541 id="100" />
10542
10543 <driven
10544 id="857" />
10545 </param_driver>
10546 </param>
10547
10548 <param
10549 id="659"
10550 group="0"
10551 wearable="shape"
10552 edit_group="shape_mouth"
10553 edit_group_order="5"
10554 name="Mouth Corner"
10555 label_min="Corner Down"
10556 label_max="Corner Up"
10557 value_min="0"
10558 value_max="1"
10559 value_default=".5"
10560 camera_elevation="0"
10561 camera_distance=".28">
10562 <param_driver>
10563 <driven
10564 id="658"
10565 min1="0"
10566 max1="0"
10567 max2="0"
10568 min2=".5" />
10569
10570 <driven
10571 id="657"
10572 min1=".5"
10573 max1="1"
10574 max2="1"
10575 min2="1" />
10576 </param_driver>
10577 </param>
10578
10579 <param
10580 id="662"
10581 group="0"
10582 wearable="shape"
10583 edit_group="shape_head"
10584 edit_group_order="5"
10585 name="Face Shear"
10586 label_min="Shear Right Up"
10587 label_max="Shear Left Up"
10588 value_min="0"
10589 value_max="1"
10590 value_default=".5"
10591 camera_elevation=".1"
10592 camera_distance=".5">
10593 <param_driver>
10594 <driven
10595 id="660" />
10596
10597 <driven
10598 id="661" />
10599
10600 <driven
10601 id="774" />
10602 </param_driver>
10603 </param>
10604
10605 <param
10606 id="773"
10607 group="0"
10608 wearable="shape"
10609 edit_group="shape_head"
10610 edit_group_order="4.5"
10611 name="Head Length"
10612 label_min="Flat Head"
10613 label_max="Long Head"
10614 value_min="0"
10615 value_max="1"
10616 value_default=".5"
10617 camera_elevation=".1"
10618 camera_distance=".5"
10619 camera_angle="75">
10620 <param_driver>
10621 <driven
10622 id="770" />
10623
10624 <driven
10625 id="771" />
10626
10627 <driven
10628 id="772" />
10629 </param_driver>
10630 </param>
10631
10632 <param
10633 id="682"
10634 group="0"
10635 wearable="shape"
10636 edit_group="shape_head"
10637 edit_group_order="1"
10638 name="Head Size"
10639 label="Head Size"
10640 label_min="Small Head"
10641 label_max="Big Head"
10642 show_simple="true"
10643 value_min="0"
10644 value_max="1"
10645 value_default=".5"
10646 camera_elevation=".1"
10647 camera_distance=".5">
10648 <param_driver>
10649 <driven
10650 id="679" />
10651
10652 <driven
10653 id="694" />
10654
10655 <driven
10656 id="680" />
10657
10658 <driven
10659 id="681" />
10660
10661 <driven
10662 id="655" />
10663 </param_driver>
10664 </param>
10665
10666 <param
10667 id="690"
10668 group="0"
10669 wearable="shape"
10670 edit_group="shape_eyes"
10671 edit_group_order="1"
10672 name="Eye Size"
10673 label="Eye Size"
10674 label_min="Beady Eyes"
10675 label_max="Anime Eyes"
10676 value_min="0"
10677 value_max="1"
10678 value_default=".5"
10679 show_simple="true"
10680 camera_elevation=".1"
10681 camera_distance=".35">
10682 <param_driver>
10683 <driven
10684 id="686" />
10685
10686 <driven
10687 id="687" />
10688
10689 <driven
10690 id="695" />
10691
10692 <driven
10693 id="688" />
10694
10695 <driven
10696 id="691" />
10697
10698 <driven
10699 id="689" />
10700 </param_driver>
10701 </param>
10702
10703 <param
10704 id="752"
10705 group="0"
10706 sex="male"
10707 wearable="hair"
10708 edit_group="hair_facial"
10709 edit_group_order="1"
10710 name="Hair Thickness"
10711 label_min="5 O'Clock Shadow"
10712 label_max="Bushy Hair"
10713 value_min="0"
10714 value_max="1"
10715 value_default=".5"
10716 camera_elevation="0"
10717 camera_distance=".28">
10718 <param_driver>
10719 <driven
10720 id="751"
10721 min1="0"
10722 max1="0"
10723 max2="0"
10724 min2=".2" />
10725
10726 <driven
10727 id="1012"
10728 min1="0"
10729 max1="0"
10730 max2=".2"
10731 min2=".6" />
10732
10733 <driven
10734 id="400"
10735 min1=".2"
10736 max1="1"
10737 max2="1"
10738 min2="1" />
10739 </param_driver>
10740 </param>
10741
10742 <param
10743 id="763"
10744 group="0"
10745 wearable="hair"
10746 edit_group="hair_style"
10747 edit_group_order="1"
10748 name="Hair Volume"
10749 show_simple="true"
10750 label_min="Less Volume"
10751 label_max="More Volume"
10752 value_min="0"
10753 value_max="1"
10754 value_default=".55"
10755 camera_elevation=".1"
10756 camera_distance=".5"
10757 camera_angle="20">
10758 <param_driver>
10759 <driven
10760 id="761"
10761 min1="0"
10762 max1="0"
10763 max2="0"
10764 min2=".5" />
10765
10766 <driven
10767 id="180"
10768 min1=".5"
10769 max1="1"
10770 max2="1"
10771 min2="1" />
10772 </param_driver>
10773 </param>
10774
10775 <param
10776 id="834"
10777 group="0"
10778 wearable="jacket"
10779 edit_group="colorpicker"
10780 name="jacket_red"
10781 value_min="0"
10782 value_max="1"
10783 value_default="1">
10784 <param_driver>
10785 <driven
10786 id="809"
10787 min1="0"
10788 max1="1"
10789 max2="1"
10790 min2="1" />
10791
10792 <driven
10793 id="831"
10794 min1="0"
10795 max1="1"
10796 max2="1"
10797 min2="1" />
10798 </param_driver>
10799 </param>
10800
10801 <param
10802 id="835"
10803 group="0"
10804 wearable="jacket"
10805 edit_group="colorpicker"
10806 name="jacket_green"
10807 value_min="0"
10808 value_max="1"
10809 value_default="1">
10810 <param_driver>
10811 <driven
10812 id="810"
10813 min1="0"
10814 max1="1"
10815 max2="1"
10816 min2="1" />
10817
10818 <driven
10819 id="832"
10820 min1="0"
10821 max1="1"
10822 max2="1"
10823 min2="1" />
10824 </param_driver>
10825 </param>
10826
10827 <param
10828 id="836"
10829 group="0"
10830 wearable="jacket"
10831 edit_group="colorpicker"
10832 name="jacket_blue"
10833 value_min="0"
10834 value_max="1"
10835 value_default="1">
10836 <param_driver>
10837 <driven
10838 id="811"
10839 min1="0"
10840 max1="1"
10841 max2="1"
10842 min2="1" />
10843
10844 <driven
10845 id="833"
10846 min1="0"
10847 max1="1"
10848 max2="1"
10849 min2="1" />
10850 </param_driver>
10851 </param>
10852
10853 <param
10854 id="785"
10855 group="0"
10856 wearable="hair"
10857 edit_group="hair_style"
10858 edit_group_order="14.6"
10859 name="Pigtails"
10860 show_simple="true"
10861 label_min="Short Pigtails"
10862 label_max="Long Pigtails"
10863 value_min="0"
10864 value_max="1"
10865 value_default="0"
10866 camera_elevation=".1"
10867 camera_distance=".5"
10868 camera_angle="15">
10869 <param_driver>
10870 <driven
10871 id="782"
10872 min1="0"
10873 max1=".10"
10874 max2=".10"
10875 min2=".5" />
10876
10877 <driven
10878 id="783"
10879 min1=".10"
10880 max1=".5"
10881 max2=".5"
10882 min2=".75" />
10883
10884 <driven
10885 id="790"
10886 min1=".5"
10887 max1=".75"
10888 max2=".75"
10889 min2="1" />
10890
10891 <driven
10892 id="784"
10893 min1=".75"
10894 max1="1"
10895 max2="1"
10896 min2="1" />
10897 </param_driver>
10898 </param>
10899
10900 <param
10901 id="789"
10902 group="0"
10903 wearable="hair"
10904 edit_group="hair_style"
10905 edit_group_order="14.7"
10906 name="Ponytail"
10907 label_min="Short Ponytail"
10908 label_max="Long Ponytail"
10909 value_min="0"
10910 value_max="1"
10911 value_default="0"
10912 camera_elevation=".1"
10913 camera_distance=".5"
10914 camera_angle="180">
10915 <param_driver>
10916 <driven
10917 id="786"
10918 min1="0"
10919 max1=".10"
10920 max2=".10"
10921 min2=".66" />
10922
10923 <driven
10924 id="787"
10925 min1=".10"
10926 max1=".66"
10927 max2=".66"
10928 min2="1" />
10929
10930 <driven
10931 id="788"
10932 min1=".66"
10933 max1="1"
10934 max2="1"
10935 min2="1" />
10936 </param_driver>
10937 </param>
10938
10939 <param
10940 id="795"
10941 group="0"
10942 name="Butt Size"
10943 label="Butt Size"
10944 wearable="shape"
10945 edit_group="shape_legs"
10946 edit_group_order="4"
10947 label_min="Flat Butt"
10948 label_max="Big Butt"
10949 value_min="0"
10950 value_max="1"
10951 value_default=".25"
10952 camera_angle="180"
10953 camera_distance=".6">
10954 <param_driver>
10955 <driven
10956 id="867"
10957 min1="0"
10958 max1="0"
10959 max2="0"
10960 min2=".3" />
10961
10962 <driven
10963 id="794"
10964 min1="0"
10965 max1="0"
10966 max2="0"
10967 min2=".3" />
10968
10969 <driven
10970 id="151"
10971 min1=".3"
10972 max1="1"
10973 max2="1"
10974 min2="1" />
10975
10976 <driven
10977 id="852"
10978 min1=".3"
10979 max1="1"
10980 max2="1"
10981 min2="1" />
10982 </param_driver>
10983 </param>
10984
10985 <param
10986 id="841"
10987 group="0"
10988 name="Bowed_Legs"
10989 label="Knee Angle"
10990 wearable="shape"
10991 edit_group_order="5.5"
10992 edit_group="shape_legs"
10993 label_min="Knock Kneed"
10994 label_max="Bow Legged"
10995 value_min="-1"
10996 value_max="1"
10997 value_default="0"
10998 camera_distance="1.3"
10999 camera_elevation="-.5">
11000 <param_driver>
11001 <driven
11002 id="853" />
11003
11004 <driven
11005 id="847" />
11006 </param_driver>
11007 </param>
11008
11009 <param
11010 id="753"
11011 group="0"
11012 name="Saddlebags"
11013 label="Saddle Bags"
11014 wearable="shape"
11015 edit_group="shape_legs"
11016 edit_group_order="5"
11017 label_min="Less Saddle"
11018 label_max="More Saddle"
11019 value_min="-0.5"
11020 value_max="3"
11021 value_default="0"
11022 camera_angle="0"
11023 camera_distance="1.2">
11024 <param_driver>
11025 <driven
11026 id="850" />
11027
11028 <driven
11029 id="854" />
11030 </param_driver>
11031 </param>
11032
11033 <param
11034 id="676"
11035 group="0"
11036 name="Love_Handles"
11037 label="Love Handles"
11038 wearable="shape"
11039 edit_group="shape_torso"
11040 edit_group_order="12"
11041 label_min="Less Love"
11042 label_max="More Love"
11043 value_min="-1"
11044 value_max="2"
11045 value_default="0"
11046 camera_elevation=".3"
11047 camera_distance=".9">
11048 <param_driver>
11049 <driven
11050 id="855" />
11051
11052 <driven
11053 id="856" />
11054 </param_driver>
11055 </param>
11056
11057 <param
11058 id="863"
11059 group="0"
11060 name="skirt_looseness"
11061 label="Skirt Fit"
11062 show_simple="true"
11063 clothing_morph="true"
11064 wearable="skirt"
11065 edit_group_order="2"
11066 edit_group="skirt"
11067 label_min="Tight Skirt"
11068 label_max="Poofy Skirt"
11069 value_min="0"
11070 value_max="1"
11071 value_default=".333"
11072 camera_distance="1.3"
11073 camera_elevation="-.5">
11074 <param_driver>
11075 <driven
11076 id="866"
11077 min1="0"
11078 max1="0"
11079 max2="0"
11080 min2=".2" />
11081
11082 <driven
11083 id="846"
11084 min1="0"
11085 max1=".5"
11086 max2=".5"
11087 min2="1" />
11088
11089 <driven
11090 id="845"
11091 min1=".5"
11092 max1="1"
11093 max2="1"
11094 min2="1" />
11095 </param_driver>
11096 </param>
11097
11098 <param
11099 id="119"
11100 group="0"
11101 wearable="hair"
11102 edit_group="hair_eyebrows"
11103 edit_group_order="1"
11104 name="Eyebrow Size"
11105 show_simple="true"
11106 label_min="Thin Eyebrows"
11107 label_max="Bushy Eyebrows"
11108 value_min="0"
11109 value_max="1"
11110 value_default="0.5"
11111 camera_elevation=".1"
11112 camera_distance=".3">
11113 <param_driver>
11114 <driven
11115 id="1000" />
11116
11117 <driven
11118 id="1001" />
11119 </param_driver>
11120 </param>
11121
11122 <param
11123 id="750"
11124 group="0"
11125 wearable="hair"
11126 edit_group="hair_eyebrows"
11127 edit_group_order="2"
11128 name="Eyebrow Density"
11129 label_min="Sparse"
11130 label_max="Dense"
11131 value_min="0"
11132 value_max="1"
11133 value_default="0.7"
11134 camera_elevation=".1"
11135 camera_distance=".3">
11136 <param_driver>
11137 <driven
11138 id="1002" />
11139
11140 <driven
11141 id="1003" />
11142 </param_driver>
11143 </param>
11144
11145 <param
11146 id="166"
11147 sex="male"
11148 group="0"
11149 wearable="hair"
11150 edit_group="hair_facial"
11151 edit_group_order="2"
11152 name="Sideburns"
11153 show_simple="true"
11154 label_min="Short Sideburns"
11155 label_max="Mutton Chops"
11156 value_min="0"
11157 value_max="1"
11158 value_default="0.0"
11159 camera_elevation=".1"
11160 camera_distance=".3"
11161 camera_angle="30">
11162 <param_driver>
11163 <driven
11164 id="1004" />
11165
11166 <driven
11167 id="1005" />
11168 </param_driver>
11169 </param>
11170
11171 <param
11172 id="167"
11173 sex="male"
11174 group="0"
11175 wearable="hair"
11176 edit_group="hair_facial"
11177 edit_group_order="3"
11178 name="Moustache"
11179 show_simple="true"
11180 label_min="Chaplin"
11181 label_max="Handlebars"
11182 value_min="0"
11183 value_max="1"
11184 value_default="0.0"
11185 camera_elevation=".1"
11186 camera_distance=".3"
11187 camera_angle="30">
11188 <param_driver>
11189 <driven
11190 id="1006" />
11191
11192 <driven
11193 id="1007" />
11194 </param_driver>
11195 </param>
11196
11197 <param
11198 id="168"
11199 sex="male"
11200 group="0"
11201 wearable="hair"
11202 edit_group="hair_facial"
11203 edit_group_order="5"
11204 name="Soulpatch"
11205 show_simple="true"
11206 label_min="Less soul"
11207 label_max="More soul"
11208 value_min="0"
11209 value_max="1"
11210 value_default="0.0"
11211 camera_elevation="-.1"
11212 camera_distance=".3"
11213 camera_angle="0">
11214 <param_driver>
11215 <driven
11216 id="1008" />
11217
11218 <driven
11219 id="1009" />
11220 </param_driver>
11221 </param>
11222
11223 <param
11224 id="169"
11225 sex="male"
11226 group="0"
11227 wearable="hair"
11228 edit_group="hair_facial"
11229 edit_group_order="4"
11230 name="Chin Curtains"
11231 show_simple="true"
11232 label_min="Less Curtains"
11233 label_max="More Curtains"
11234 value_min="0"
11235 value_max="1"
11236 value_default="0.0"
11237 camera_elevation="-.1"
11238 camera_distance=".3"
11239 camera_angle="45">
11240 <param_driver>
11241 <driven
11242 id="1010" />
11243
11244 <driven
11245 id="1011" />
11246 </param_driver>
11247 </param>
11248
11249 <param
11250 id="606"
11251 group="0"
11252 wearable="jacket"
11253 edit_group="jacket"
11254 edit_group_order="1"
11255 name="Sleeve Length"
11256 label_min="Short"
11257 label_max="Long"
11258 value_min="0"
11259 value_max="1"
11260 value_default=".8"
11261 camera_distance="1.2"
11262 camera_angle="30"
11263 camera_elevation=".2">
11264 <param_driver>
11265 <driven
11266 id="1019" />
11267
11268 <driven
11269 id="1039" />
11270
11271 <driven
11272 id="1020" />
11273 </param_driver>
11274 </param>
11275
11276 <param
11277 id="607"
11278 group="0"
11279 wearable="jacket"
11280 edit_group="jacket"
11281 edit_group_order="3"
11282 name="Collar Front"
11283 label_min="Low"
11284 label_max="High"
11285 value_min="0"
11286 value_max="1"
11287 value_default=".8"
11288 camera_distance="1.2"
11289 camera_angle="15"
11290 camera_elevation=".2">
11291 <param_driver>
11292 <driven
11293 id="1021" />
11294
11295 <driven
11296 id="1040" />
11297
11298 <driven
11299 id="1022" />
11300 </param_driver>
11301 </param>
11302
11303 <param
11304 id="780"
11305 group="0"
11306 wearable="jacket"
11307 edit_group="jacket"
11308 edit_group_order="3.5"
11309 name="Collar Back"
11310 label_min="Low"
11311 label_max="High"
11312 value_min="0"
11313 value_max="1"
11314 value_default=".8"
11315 camera_distance="1.2"
11316 camera_angle="195"
11317 camera_elevation=".2">
11318 <param_driver>
11319 <driven
11320 id="1023" />
11321
11322 <driven
11323 id="1041" />
11324
11325 <driven
11326 id="1024" />
11327 </param_driver>
11328 </param>
11329
11330 <param
11331 id="603"
11332 group="0"
11333 wearable="undershirt"
11334 edit_group="undershirt"
11335 edit_group_order="1"
11336 name="Sleeve Length"
11337 label_min="Short"
11338 label_max="Long"
11339 value_min=".01"
11340 value_max="1"
11341 value_default=".4"
11342 camera_distance="1.2"
11343 camera_angle="30"
11344 camera_elevation=".2">
11345 <param_driver>
11346 <driven
11347 id="1042" />
11348
11349 <driven
11350 id="1043" />
11351 </param_driver>
11352 </param>
11353
11354 <param
11355 id="604"
11356 group="0"
11357 wearable="undershirt"
11358 edit_group="undershirt"
11359 edit_group_order="2"
11360 name="Bottom"
11361 label_min="Short"
11362 label_max="Long"
11363 value_min="0"
11364 value_max="1"
11365 value_default=".85"
11366 camera_distance="1.2"
11367 camera_angle="30"
11368 camera_elevation=".2">
11369 <param_driver>
11370 <driven
11371 id="1044" />
11372
11373 <driven
11374 id="1045" />
11375 </param_driver>
11376 </param>
11377
11378 <param
11379 id="605"
11380 group="0"
11381 wearable="undershirt"
11382 edit_group="undershirt"
11383 edit_group_order="3"
11384 name="Collar Front"
11385 label_min="Low"
11386 label_max="High"
11387 value_min="0"
11388 value_max="1"
11389 value_default=".84"
11390 camera_distance=".8"
11391 camera_angle="15"
11392 camera_elevation=".2">
11393 <param_driver>
11394 <driven
11395 id="1046" />
11396
11397 <driven
11398 id="1047" />
11399 </param_driver>
11400 </param>
11401
11402 <param
11403 id="779"
11404 group="0"
11405 wearable="undershirt"
11406 edit_group="undershirt"
11407 edit_group_order="4"
11408 name="Collar Back"
11409 label_min="Low"
11410 label_max="High"
11411 value_min="0"
11412 value_max="1"
11413 value_default=".84"
11414 camera_distance=".8"
11415 camera_angle="195"
11416 camera_elevation=".2">
11417 <param_driver>
11418 <driven
11419 id="1048" />
11420
11421 <driven
11422 id="1049" />
11423 </param_driver>
11424 </param>
11425
11426 <param
11427 id="617"
11428 group="0"
11429 wearable="socks"
11430 edit_group="socks"
11431 name="Socks Length"
11432 label_min="Short"
11433 label_max="Long"
11434 value_min="0"
11435 value_max="1"
11436 value_default="0.35"
11437 camera_distance=".95"
11438 camera_angle="30"
11439 camera_elevation="-.75">
11440 <param_driver>
11441 <driven
11442 id="1050" />
11443
11444 <driven
11445 id="1051" />
11446 </param_driver>
11447 </param>
11448
11449 <param
11450 id="616"
11451 group="0"
11452 wearable="shoes"
11453 edit_group="shoes"
11454 edit_group_order="1"
11455 name="Shoe Height"
11456 label_min="Short"
11457 label_max="Tall"
11458 value_min="0"
11459 value_max="1"
11460 value_default="0.1"
11461 camera_distance="1.2"
11462 camera_angle="30"
11463 camera_elevation="-.75">
11464 <param_driver>
11465 <driven
11466 id="1052" />
11467
11468 <driven
11469 id="1053" />
11470 </param_driver>
11471 </param>
11472
11473 <param
11474 id="619"
11475 group="0"
11476 wearable="underpants"
11477 edit_group="underpants"
11478 name="Pants Length"
11479 label_min="Short"
11480 label_max="Long"
11481 value_min="0"
11482 value_max="1"
11483 value_default=".3"
11484 camera_distance="1.2"
11485 camera_angle="30"
11486 camera_elevation="-.3">
11487 <param_driver>
11488 <driven
11489 id="1054" />
11490
11491 <driven
11492 id="1055" />
11493 </param_driver>
11494 </param>
11495
11496 <param
11497 id="624"
11498 group="0"
11499 wearable="underpants"
11500 edit_group="underpants"
11501 name="Pants Waist"
11502 label_min="Low"
11503 label_max="High"
11504 value_min="0"
11505 value_max="1"
11506 value_default=".8"
11507 camera_distance="1.2"
11508 camera_angle="30"
11509 camera_elevation="-.3">
11510 <param_driver>
11511 <driven
11512 id="1056" />
11513
11514 <driven
11515 id="1057" />
11516 </param_driver>
11517 </param>
11518
11519 <param
11520 id="93"
11521 group="0"
11522 wearable="gloves"
11523 edit_group="gloves"
11524 name="Glove Length"
11525 label_min="Short"
11526 label_max="Long"
11527 value_min=".01"
11528 value_max="1"
11529 value_default=".8"
11530 camera_distance="1.2"
11531 camera_angle="30"
11532 camera_elevation=".2">
11533 <param_driver>
11534 <driven
11535 id="1058" />
11536
11537 <driven
11538 id="1059" />
11539 </param_driver>
11540 </param>
11541
11542 <param
11543 id="844"
11544 group="0"
11545 wearable="gloves"
11546 edit_group="gloves"
11547 name="Glove Fingers"
11548 label_min="Fingerless"
11549 label_max="Fingers"
11550 value_min=".01"
11551 value_max="1"
11552 value_default="1"
11553 camera_distance="1.2"
11554 camera_angle="30"
11555 camera_elevation=".2">
11556 <param_driver>
11557 <driven
11558 id="1060" />
11559
11560 <driven
11561 id="1061" />
11562 </param_driver>
11563 </param>
11564
11565 <!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
11566 <param
11567 id="16"
11568 group="0"
11569 name="Pointy_Eyebrows"
11570 label="Eyebrow Points"
11571 wearable="hair"
11572 edit_group="hair_eyebrows"
11573 edit_group_order="4"
11574 label_min="Smooth"
11575 label_max="Pointy"
11576 value_min="-.5"
11577 value_max="3"
11578 camera_elevation=".1"
11579 camera_distance=".3">
11580 <param_driver>
11581 <driven
11582 id="870" />
11583 </param_driver>
11584 </param>
11585
11586 <!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
11587 <param
11588 id="757"
11589 group="0"
11590 name="Lower_Eyebrows"
11591 label="Eyebrow Height"
11592 show_simple="true"
11593 wearable="hair"
11594 edit_group="hair_eyebrows"
11595 edit_group_order="2.5"
11596 label_min="Higher"
11597 label_max="Lower"
11598 value_min="-4"
11599 value_max="2"
11600 value_default="-1"
11601 camera_elevation=".1"
11602 camera_distance=".3">
11603 <param_driver>
11604 <driven
11605 id="871" />
11606 </param_driver>
11607 </param>
11608
11609 <!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
11610 <param
11611 id="31"
11612 group="0"
11613 name="Arced_Eyebrows"
11614 label="Eyebrow Arc"
11615 wearable="hair"
11616 edit_group="hair_eyebrows"
11617 edit_group_order="3"
11618 label_min="Flat"
11619 label_max="Arced"
11620 value_min="0"
11621 value_max="2"
11622 value_default=".5"
11623 camera_elevation=".1"
11624 camera_distance=".3">
11625 <param_driver>
11626 <driven
11627 id="872" />
11628 </param_driver>
11629 </param>
11630
11631
11632 <param
11633 id="877"
11634 group="0"
11635 name="Jacket Wrinkles"
11636 label="Jacket Wrinkles"
11637 wearable="jacket"
11638 edit_group="jacket"
11639 edit_group_order="20"
11640 label_min="No Wrinkles"
11641 label_max="Wrinkles"
11642 value_min="0"
11643 value_max="1"
11644 value_default="0"
11645 camera_elevation=".1"
11646 camera_distance=".3">
11647 <param_driver>
11648 <driven
11649 id="875" />
11650
11651
11652 <driven
11653 id="876" />
11654 </param_driver>
11655 </param>
11656
11657 <param
11658 id="1071"
11659 group="2"
11660 wearable="tattoo"
11661 edit_group="colorpicker"
11662 name="tattoo_red"
11663 value_min="0"
11664 value_max="1"
11665 value_default="1">
11666 <param_driver>
11667 <driven
11668 id="1062"
11669 min1="0"
11670 max1="1"
11671 max2="1"
11672 min2="1" />
11673
11674 <driven
11675 id="1065"
11676 min1="0"
11677 max1="1"
11678 max2="1"
11679 min2="1" />
11680
11681 <driven
11682 id="1068"
11683 min1="0"
11684 max1="1"
11685 max2="1"
11686 min2="1" />
11687 </param_driver>
11688 </param>
11689
11690 <param
11691 id="1072"
11692 group="2"
11693 wearable="tattoo"
11694 edit_group="colorpicker"
11695 name="tattoo_green"
11696 value_min="0"
11697 value_max="1"
11698 value_default="1">
11699 <param_driver>
11700 <driven
11701 id="1063"
11702 min1="0"
11703 max1="1"
11704 max2="1"
11705 min2="1" />
11706
11707 <driven
11708 id="1066"
11709 min1="0"
11710 max1="1"
11711 max2="1"
11712 min2="1" />
11713
11714 <driven
11715 id="1069"
11716 min1="0"
11717 max1="1"
11718 max2="1"
11719 min2="1" />
11720 </param_driver>
11721 </param>
11722
11723 <param
11724 id="1073"
11725 group="2"
11726 wearable="tattoo"
11727 edit_group="colorpicker"
11728 name="tattoo_blue"
11729 value_min="0"
11730 value_max="1"
11731 value_default="1">
11732 <param_driver>
11733 <driven
11734 id="1064"
11735 min1="0"
11736 max1="1"
11737 max2="1"
11738 min2="1" />
11739
11740 <driven
11741 id="1067"
11742 min1="0"
11743 max1="1"
11744 max2="1"
11745 min2="1" />
11746
11747 <driven
11748 id="1070"
11749 min1="0"
11750 max1="1"
11751 max2="1"
11752 min2="1" />
11753
11754 </param_driver>
11755 </param>
11756
11757 <!-- ==PHYSICS PARAMETERS======================================= -->
11758
11759 <param
11760 id="1100"
11761 group="1"
11762 sex="female"
11763 wearable="physics"
11764 name="Breast_Physics_UpDown_Controller"
11765 label="Breast Physics UpDown Controller"
11766 value_min="-1"
11767 value_max="1"
11768 value_default="0">
11769 <param_driver>
11770 <driven
11771 id="1200" />
11772 </param_driver>
11773 </param>
11774
11775 <param
11776 id="1101"
11777 group="1"
11778 sex="female"
11779 wearable="physics"
11780 name="Breast_Physics_InOut_Controller"
11781 label="Breast Physics InOut Controller"
11782 value_min="-1"
11783 value_max="1"
11784 value_default="0">
11785 <param_driver>
11786 <driven
11787 id="1201" />
11788 </param_driver>
11789 </param>
11790
11791 <param
11792 id="1102"
11793 group="1"
11794 wearable="physics"
11795 name="Belly_Physics_UpDown_Controller"
11796 label="Belly Physics UpDown Controller"
11797 value_min="-1"
11798 value_max="1"
11799 value_default="0">
11800 <param_driver>
11801 <driven
11802 id="1202" />
11803 <driven
11804 id="1203" />
11805 <driven
11806 id="1204" />
11807 </param_driver>
11808 </param>
11809
11810 <param
11811 id="1103"
11812 group="1"
11813 wearable="shape"
11814 name="Butt_Physics_UpDown_Controller"
11815 label="Butt Physics UpDown Controller"
11816 value_min="-1"
11817 value_max="1"
11818 value_default="0">
11819 <param_driver>
11820 <driven
11821 id="1205" />
11822 </param_driver>
11823 </param>
11824
11825 <param
11826 id="1104"
11827 group="1"
11828 wearable="shape"
11829 name="Butt_Physics_LeftRight_Controller"
11830 label="Butt Physics LeftRight Controller"
11831 value_min="-1"
11832 value_max="1"
11833 value_default="0">
11834 <param_driver>
11835 <driven
11836 id="1206" />
11837 </param_driver>
11838 </param>
11839
11840 <param
11841 id="1105"
11842 group="1"
11843 wearable="shape"
11844 name="Breast_Physics_LeftRight_Controller"
11845 label="Breast Physics LeftRight Controller"
11846 value_min="-1"
11847 value_max="1"
11848 value_default="0">
11849 <param_driver>
11850 <driven
11851 id="1207" />
11852 </param_driver>
11853 </param>
11854
11855 <param
11856 id="10000"
11857 group="0"
11858 sex="female"
11859 name="Breast_Physics_Mass"
11860 label="Breast Physics Mass"
11861 wearable="physics"
11862 edit_group="physics_advanced"
11863 value_default=".1"
11864 value_min=".1"
11865 value_max="1">
11866 <param_driver />
11867 </param>
11868 <param
11869 id="10001"
11870 group="0"
11871 sex="female"
11872 name="Breast_Physics_Gravity"
11873 label="Breast Physics Gravity"
11874 wearable="physics"
11875 edit_group="physics_advanced"
11876 value_default="0"
11877 value_min="0"
11878 value_max="30">
11879 <param_driver />
11880 </param>
11881
11882 <param
11883 id="10002"
11884 group="0"
11885 sex="female"
11886 name="Breast_Physics_Drag"
11887 label="Breast Physics Drag"
11888 wearable="physics"
11889 edit_group="physics_advanced"
11890 value_default="1"
11891 value_min="0"
11892 value_max="10">
11893 <param_driver />
11894 </param>
11895
11896 <param
11897 id="10003"
11898 group="0"
11899 sex="female"
11900 name="Breast_Physics_UpDown_Max_Effect"
11901 label="Breast Physics UpDown Max Effect"
11902 wearable="physics"
11903 edit_group="physics_breasts_updown"
11904 value_default="0"
11905 value_min="0"
11906 value_max="3">
11907 <param_driver />
11908 </param>
11909 <param
11910 id="10004"
11911 group="0"
11912 sex="female"
11913 name="Breast_Physics_UpDown_Spring"
11914 label="Breast Physics UpDown Spring"
11915 wearable="physics"
11916 edit_group="physics_breasts_updown"
11917 value_default="10"
11918 value_min="0"
11919 value_max="100">
11920 <param_driver />
11921 </param>
11922 <param
11923 id="10005"
11924 group="0"
11925 sex="female"
11926 name="Breast_Physics_UpDown_Gain"
11927 label="Breast Physics UpDown Gain"
11928 wearable="physics"
11929 edit_group="physics_breasts_updown"
11930 value_default="10"
11931 value_min="1"
11932 value_max="100">
11933 <param_driver />
11934 </param>
11935 <param
11936 id="10006"
11937 group="0"
11938 sex="female"
11939 name="Breast_Physics_UpDown_Damping"
11940 label="Breast Physics UpDown Damping"
11941 wearable="physics"
11942 edit_group="physics_breasts_updown"
11943 value_default=".2"
11944 value_min="0"
11945 value_max="1">
11946 <param_driver />
11947 </param>
11948
11949 <param
11950 id="10007"
11951 group="0"
11952 sex="female"
11953 name="Breast_Physics_InOut_Max_Effect"
11954 label="Breast Physics InOut Max Effect"
11955 wearable="physics"
11956 edit_group="physics_breasts_inout"
11957 value_default="0"
11958 value_min="0"
11959 value_max="3">
11960 <param_driver />
11961 </param>
11962 <param
11963 id="10008"
11964 group="0"
11965 sex="female"
11966 name="Breast_Physics_InOut_Spring"
11967 label="Breast Physics InOut Spring"
11968 wearable="physics"
11969 edit_group="physics_breasts_inout"
11970 value_default="10"
11971 value_min="0"
11972 value_max="100">
11973 <param_driver />
11974 </param>
11975 <param
11976 id="10009"
11977 group="0"
11978 sex="female"
11979 name="Breast_Physics_InOut_Gain"
11980 label="Breast Physics InOut Gain"
11981 wearable="physics"
11982 edit_group="physics_breasts_inout"
11983 value_default="10"
11984 value_min="1"
11985 value_max="100">
11986 <param_driver />
11987 </param>
11988 <param
11989 id="10010"
11990 group="0"
11991 sex="female"
11992 name="Breast_Physics_InOut_Damping"
11993 label="Breast Physics InOut Damping"
11994 wearable="physics"
11995 edit_group="physics_breasts_inout"
11996 value_default=".2"
11997 value_min="0"
11998 value_max="1">
11999 <param_driver />
12000 </param>
12001
12002 <param
12003 id="10011"
12004 group="0"
12005 name="Belly_Physics_Mass"
12006 label="Belly Physics Mass"
12007 wearable="physics"
12008 edit_group="physics_advanced"
12009 value_default=".1"
12010 value_min=".1"
12011 value_max="1">
12012 <param_driver />
12013 </param>
12014 <param
12015 id="10012"
12016 group="0"
12017 name="Belly_Physics_Gravity"
12018 label="Belly Physics Gravity"
12019 wearable="physics"
12020 edit_group="physics_advanced"
12021 value_default="0"
12022 value_min="0"
12023 value_max="30">
12024 <param_driver />
12025 </param>
12026 <param
12027 id="10013"
12028 group="0"
12029 name="Belly_Physics_Drag"
12030 label="Belly Physics Drag"
12031 wearable="physics"
12032 edit_group="physics_advanced"
12033 value_default="1"
12034 value_min="0"
12035 value_max="10">
12036 <param_driver />
12037 </param>
12038 <param
12039 id="10014"
12040 group="0"
12041 name="Belly_Physics_UpDown_Max_Effect"
12042 label="Belly Physics UpDown Max Effect"
12043 wearable="physics"
12044 edit_group="physics_belly_updown"
12045 value_default="0"
12046 value_min="0"
12047 value_max="3">
12048 <param_driver />
12049 </param>
12050 <param
12051 id="10015"
12052 group="0"
12053 name="Belly_Physics_UpDown_Spring"
12054 label="Belly Physics UpDown Spring"
12055 wearable="physics"
12056 edit_group="physics_belly_updown"
12057 value_default="10"
12058 value_min="0"
12059 value_max="100">
12060 <param_driver />
12061 </param>
12062 <param
12063 id="10016"
12064 group="0"
12065 name="Belly_Physics_UpDown_Gain"
12066 label="Belly Physics UpDown Gain"
12067 wearable="physics"
12068 edit_group="physics_belly_updown"
12069 value_default="10"
12070 value_min="1"
12071 value_max="100">
12072 <param_driver />
12073 </param>
12074 <param
12075 id="10017"
12076 group="0"
12077 name="Belly_Physics_UpDown_Damping"
12078 label="Belly Physics UpDown Damping"
12079 wearable="physics"
12080 edit_group="physics_belly_updown"
12081 value_default=".2"
12082 value_min="0"
12083 value_max="1">
12084 <param_driver />
12085 </param>
12086
12087 <param
12088 id="10018"
12089 group="0"
12090 name="Butt_Physics_Mass"
12091 label="Butt Physics Mass"
12092 wearable="physics"
12093 edit_group="physics_advanced"
12094 value_default=".1"
12095 value_min=".1"
12096 value_max="1">
12097 <param_driver />
12098 </param>
12099 <param
12100 id="10019"
12101 group="0"
12102 name="Butt_Physics_Gravity"
12103 label="Butt Physics Gravity"
12104 wearable="physics"
12105 edit_group="physics_advanced"
12106 value_default="0"
12107 value_min="0"
12108 value_max="30">
12109 <param_driver />
12110 </param>
12111 <param
12112 id="10020"
12113 group="0"
12114 name="Butt_Physics_Drag"
12115 label="Butt Physics Drag"
12116 wearable="physics"
12117 edit_group="physics_advanced"
12118 value_default="1"
12119 value_min="0"
12120 value_max="10">
12121 <param_driver />
12122 </param>
12123
12124 <param
12125 id="10021"
12126 group="0"
12127 name="Butt_Physics_UpDown_Max_Effect"
12128 label="Butt Physics UpDown Max Effect"
12129 wearable="physics"
12130 edit_group="physics_butt_updown"
12131 value_default="0"
12132 value_min="0"
12133 value_max="3">
12134 <param_driver />
12135 </param>
12136 <param
12137 id="10022"
12138 group="0"
12139 name="Butt_Physics_UpDown_Spring"
12140 label="Butt Physics UpDown Spring"
12141 wearable="physics"
12142 edit_group="physics_butt_updown"
12143 value_default="10"
12144 value_min="0"
12145 value_max="100">
12146 <param_driver />
12147 </param>
12148 <param
12149 id="10023"
12150 group="0"
12151 name="Butt_Physics_UpDown_Gain"
12152 label="Butt Physics UpDown Gain"
12153 wearable="physics"
12154 edit_group="physics_butt_updown"
12155 value_default="10"
12156 value_min="1"
12157 value_max="100">
12158 <param_driver />
12159 </param>
12160 <param
12161 id="10024"
12162 group="0"
12163 name="Butt_Physics_UpDown_Damping"
12164 label="Butt Physics UpDown Damping"
12165 wearable="physics"
12166 edit_group="physics_butt_updown"
12167 value_default=".2"
12168 value_min="0"
12169 value_max="1">
12170 <param_driver />
12171 </param>
12172
12173 <param
12174 id="10025"
12175 group="0"
12176 name="Butt_Physics_LeftRight_Max_Effect"
12177 label="Butt Physics LeftRight Max Effect"
12178 wearable="physics"
12179 edit_group="physics_butt_leftright"
12180 value_default="0"
12181 value_min="0"
12182 value_max="3">
12183 <param_driver />
12184 </param>
12185 <param
12186 id="10026"
12187 group="0"
12188 name="Butt_Physics_LeftRight_Spring"
12189 label="Butt Physics LeftRight Spring"
12190 wearable="physics"
12191 edit_group="physics_butt_leftright"
12192 value_default="10"
12193 value_min="0"
12194 value_max="100">
12195 <param_driver />
12196 </param>
12197 <param
12198 id="10027"
12199 group="0"
12200 name="Butt_Physics_LeftRight_Gain"
12201 label="Butt Physics LeftRight Gain"
12202 wearable="physics"
12203 edit_group="physics_butt_leftright"
12204 value_default="10"
12205 value_min="1"
12206 value_max="100">
12207 <param_driver />
12208 </param>
12209 <param
12210 id="10028"
12211 group="0"
12212 name="Butt_Physics_LeftRight_Damping"
12213 label="Butt Physics LeftRight Damping"
12214 wearable="physics"
12215 edit_group="physics_butt_leftright"
12216 value_default=".2"
12217 value_min="0"
12218 value_max="1">
12219 <param_driver />
12220 </param>
12221
12222 <param
12223 id="10029"
12224 group="0"
12225 sex="female"
12226 name="Breast_Physics_LeftRight_Max_Effect"
12227 label="Breast Physics LeftRight Max Effect"
12228 wearable="physics"
12229 edit_group="physics_breasts_leftright"
12230 value_default="0"
12231 value_min="0"
12232 value_max="3">
12233 <param_driver />
12234 </param>
12235 <param
12236 id="10030"
12237 group="0"
12238 sex="female"
12239 name="Breast_Physics_LeftRight_Spring"
12240 label="Breast Physics LeftRight Spring"
12241 wearable="physics"
12242 edit_group="physics_breasts_leftright"
12243 value_default="10"
12244 value_min="0"
12245 value_max="100">
12246 <param_driver />
12247 </param>
12248 <param
12249 id="10031"
12250 group="0"
12251 sex="female"
12252 name="Breast_Physics_LeftRight_Gain"
12253 label="Breast Physics LeftRight Gain"
12254 wearable="physics"
12255 edit_group="physics_breasts_leftright"
12256 value_default="10"
12257 value_min="1"
12258 value_max="100">
12259 <param_driver />
12260 </param>
12261 <param
12262 id="10032"
12263 group="0"
12264 sex="female"
12265 name="Breast_Physics_LeftRight_Damping"
12266 label="Breast Physics LeftRight Damping"
12267 wearable="physics"
12268 edit_group="physics_breasts_leftright"
12269 value_default=".2"
12270 value_min="0"
12271 value_max="1">
12272 <param_driver />
12273 </param>
12274
12275 </driver_parameters>
12276
12277 <morph_masks>
12278 <mask
12279 morph_name="Displace_Hair_Facial"
12280 body_region="head"
12281 layer="facialhair" />
12282 <mask
12283 morph_name="Displace_Loose_Upperbody"
12284 body_region="upper_body"
12285 layer="upper_clothes" />
12286 <mask
12287 morph_name="Shirtsleeve_flair"
12288 body_region="upper_body"
12289 layer="upper_clothes" />
12290 <mask
12291 morph_name="Displace_Loose_Lowerbody"
12292 body_region="lower_body"
12293 layer="lower_pants" />
12294 <mask
12295 morph_name="Leg_Pantflair"
12296 body_region="lower_body"
12297 layer="lower_pants" />
12298 <mask
12299 morph_name="Low_Crotch"
12300 body_region="lower_body"
12301 layer="lower_pants" />
12302 <mask
12303 morph_name="Leg_Longcuffs"
12304 body_region="lower_body"
12305 layer="lower_pants" />
12306 </morph_masks>
12307</linden_avatar>
12308
diff --git a/bin/openmetaverse_data/blush_alpha.tga b/bin/openmetaverse_data/blush_alpha.tga
new file mode 100644
index 0000000..05be7e7
--- /dev/null
+++ b/bin/openmetaverse_data/blush_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/body_skingrain.tga b/bin/openmetaverse_data/body_skingrain.tga
new file mode 100644
index 0000000..7264baa
--- /dev/null
+++ b/bin/openmetaverse_data/body_skingrain.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bodyfreckles_alpha.tga b/bin/openmetaverse_data/bodyfreckles_alpha.tga
new file mode 100644
index 0000000..d30ab3d
--- /dev/null
+++ b/bin/openmetaverse_data/bodyfreckles_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_face_wrinkles.tga b/bin/openmetaverse_data/bump_face_wrinkles.tga
new file mode 100644
index 0000000..54bf7a5
--- /dev/null
+++ b/bin/openmetaverse_data/bump_face_wrinkles.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_head_base.tga b/bin/openmetaverse_data/bump_head_base.tga
new file mode 100644
index 0000000..fa35685
--- /dev/null
+++ b/bin/openmetaverse_data/bump_head_base.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_lowerbody_base.tga b/bin/openmetaverse_data/bump_lowerbody_base.tga
new file mode 100644
index 0000000..498ea3c
--- /dev/null
+++ b/bin/openmetaverse_data/bump_lowerbody_base.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_pants_wrinkles.tga b/bin/openmetaverse_data/bump_pants_wrinkles.tga
new file mode 100644
index 0000000..cca7241
--- /dev/null
+++ b/bin/openmetaverse_data/bump_pants_wrinkles.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_shirt_wrinkles.tga b/bin/openmetaverse_data/bump_shirt_wrinkles.tga
new file mode 100644
index 0000000..9e0d757
--- /dev/null
+++ b/bin/openmetaverse_data/bump_shirt_wrinkles.tga
Binary files differ
diff --git a/bin/openmetaverse_data/bump_upperbody_base.tga b/bin/openmetaverse_data/bump_upperbody_base.tga
new file mode 100644
index 0000000..e57d635
--- /dev/null
+++ b/bin/openmetaverse_data/bump_upperbody_base.tga
Binary files differ
diff --git a/bin/openmetaverse_data/eyebrows_alpha.tga b/bin/openmetaverse_data/eyebrows_alpha.tga
new file mode 100644
index 0000000..c363e48
--- /dev/null
+++ b/bin/openmetaverse_data/eyebrows_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/eyeliner_alpha.tga b/bin/openmetaverse_data/eyeliner_alpha.tga
new file mode 100644
index 0000000..1611eb3
--- /dev/null
+++ b/bin/openmetaverse_data/eyeliner_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/eyeshadow_inner_alpha.tga b/bin/openmetaverse_data/eyeshadow_inner_alpha.tga
new file mode 100644
index 0000000..37d7919
--- /dev/null
+++ b/bin/openmetaverse_data/eyeshadow_inner_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/eyeshadow_outer_alpha.tga b/bin/openmetaverse_data/eyeshadow_outer_alpha.tga
new file mode 100644
index 0000000..00eef9d
--- /dev/null
+++ b/bin/openmetaverse_data/eyeshadow_outer_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/eyewhite.tga b/bin/openmetaverse_data/eyewhite.tga
new file mode 100644
index 0000000..a720496
--- /dev/null
+++ b/bin/openmetaverse_data/eyewhite.tga
Binary files differ
diff --git a/bin/openmetaverse_data/facehair_chincurtains_alpha.tga b/bin/openmetaverse_data/facehair_chincurtains_alpha.tga
new file mode 100644
index 0000000..b103970
--- /dev/null
+++ b/bin/openmetaverse_data/facehair_chincurtains_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/facehair_moustache_alpha.tga b/bin/openmetaverse_data/facehair_moustache_alpha.tga
new file mode 100644
index 0000000..4068c4f
--- /dev/null
+++ b/bin/openmetaverse_data/facehair_moustache_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/facehair_sideburns_alpha.tga b/bin/openmetaverse_data/facehair_sideburns_alpha.tga
new file mode 100644
index 0000000..acddc2d
--- /dev/null
+++ b/bin/openmetaverse_data/facehair_sideburns_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/facehair_soulpatch_alpha.tga b/bin/openmetaverse_data/facehair_soulpatch_alpha.tga
new file mode 100644
index 0000000..687091a
--- /dev/null
+++ b/bin/openmetaverse_data/facehair_soulpatch_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/freckles_alpha.tga b/bin/openmetaverse_data/freckles_alpha.tga
new file mode 100644
index 0000000..a9a4ec0
--- /dev/null
+++ b/bin/openmetaverse_data/freckles_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/glove_length_alpha.tga b/bin/openmetaverse_data/glove_length_alpha.tga
new file mode 100644
index 0000000..db89ad5
--- /dev/null
+++ b/bin/openmetaverse_data/glove_length_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/gloves_fingers_alpha.tga b/bin/openmetaverse_data/gloves_fingers_alpha.tga
new file mode 100644
index 0000000..dba2eec
--- /dev/null
+++ b/bin/openmetaverse_data/gloves_fingers_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_alpha.tga b/bin/openmetaverse_data/head_alpha.tga
new file mode 100644
index 0000000..8164525
--- /dev/null
+++ b/bin/openmetaverse_data/head_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_color.tga b/bin/openmetaverse_data/head_color.tga
new file mode 100644
index 0000000..74b1b30
--- /dev/null
+++ b/bin/openmetaverse_data/head_color.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_hair.tga b/bin/openmetaverse_data/head_hair.tga
new file mode 100644
index 0000000..5321f35
--- /dev/null
+++ b/bin/openmetaverse_data/head_hair.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_highlights_alpha.tga b/bin/openmetaverse_data/head_highlights_alpha.tga
new file mode 100644
index 0000000..8dc5239
--- /dev/null
+++ b/bin/openmetaverse_data/head_highlights_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_shading_alpha.tga b/bin/openmetaverse_data/head_shading_alpha.tga
new file mode 100644
index 0000000..e8ea490
--- /dev/null
+++ b/bin/openmetaverse_data/head_shading_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/head_skingrain.tga b/bin/openmetaverse_data/head_skingrain.tga
new file mode 100644
index 0000000..b42dee0
--- /dev/null
+++ b/bin/openmetaverse_data/head_skingrain.tga
Binary files differ
diff --git a/bin/openmetaverse_data/jacket_length_lower_alpha.tga b/bin/openmetaverse_data/jacket_length_lower_alpha.tga
new file mode 100644
index 0000000..722bc19
--- /dev/null
+++ b/bin/openmetaverse_data/jacket_length_lower_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/jacket_length_upper_alpha.tga b/bin/openmetaverse_data/jacket_length_upper_alpha.tga
new file mode 100644
index 0000000..e9db7e7
--- /dev/null
+++ b/bin/openmetaverse_data/jacket_length_upper_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/jacket_open_lower_alpha.tga b/bin/openmetaverse_data/jacket_open_lower_alpha.tga
new file mode 100644
index 0000000..db0c2fb
--- /dev/null
+++ b/bin/openmetaverse_data/jacket_open_lower_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/jacket_open_upper_alpha.tga b/bin/openmetaverse_data/jacket_open_upper_alpha.tga
new file mode 100644
index 0000000..71b8a0b
--- /dev/null
+++ b/bin/openmetaverse_data/jacket_open_upper_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lipgloss_alpha.tga b/bin/openmetaverse_data/lipgloss_alpha.tga
new file mode 100644
index 0000000..78ceeca
--- /dev/null
+++ b/bin/openmetaverse_data/lipgloss_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lips_mask.tga b/bin/openmetaverse_data/lips_mask.tga
new file mode 100644
index 0000000..ae1401c
--- /dev/null
+++ b/bin/openmetaverse_data/lips_mask.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lipstick_alpha.tga b/bin/openmetaverse_data/lipstick_alpha.tga
new file mode 100644
index 0000000..2795f1b
--- /dev/null
+++ b/bin/openmetaverse_data/lipstick_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lowerbody_color.tga b/bin/openmetaverse_data/lowerbody_color.tga
new file mode 100644
index 0000000..a63aa12
--- /dev/null
+++ b/bin/openmetaverse_data/lowerbody_color.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lowerbody_highlights_alpha.tga b/bin/openmetaverse_data/lowerbody_highlights_alpha.tga
new file mode 100644
index 0000000..ae3413a
--- /dev/null
+++ b/bin/openmetaverse_data/lowerbody_highlights_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/lowerbody_shading_alpha.tga b/bin/openmetaverse_data/lowerbody_shading_alpha.tga
new file mode 100644
index 0000000..0242663
--- /dev/null
+++ b/bin/openmetaverse_data/lowerbody_shading_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/nailpolish_alpha.tga b/bin/openmetaverse_data/nailpolish_alpha.tga
new file mode 100644
index 0000000..91af762
--- /dev/null
+++ b/bin/openmetaverse_data/nailpolish_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/pants_length_alpha.tga b/bin/openmetaverse_data/pants_length_alpha.tga
new file mode 100644
index 0000000..3c4f21c
--- /dev/null
+++ b/bin/openmetaverse_data/pants_length_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/pants_waist_alpha.tga b/bin/openmetaverse_data/pants_waist_alpha.tga
new file mode 100644
index 0000000..35658c0
--- /dev/null
+++ b/bin/openmetaverse_data/pants_waist_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/rosyface_alpha.tga b/bin/openmetaverse_data/rosyface_alpha.tga
new file mode 100644
index 0000000..a0c8513
--- /dev/null
+++ b/bin/openmetaverse_data/rosyface_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/rouge_alpha.tga b/bin/openmetaverse_data/rouge_alpha.tga
new file mode 100644
index 0000000..a0c8513
--- /dev/null
+++ b/bin/openmetaverse_data/rouge_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/shirt_bottom_alpha.tga b/bin/openmetaverse_data/shirt_bottom_alpha.tga
new file mode 100644
index 0000000..7cce03d
--- /dev/null
+++ b/bin/openmetaverse_data/shirt_bottom_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/shirt_collar_alpha.tga b/bin/openmetaverse_data/shirt_collar_alpha.tga
new file mode 100644
index 0000000..f55f635
--- /dev/null
+++ b/bin/openmetaverse_data/shirt_collar_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/shirt_collar_back_alpha.tga b/bin/openmetaverse_data/shirt_collar_back_alpha.tga
new file mode 100644
index 0000000..43a6453
--- /dev/null
+++ b/bin/openmetaverse_data/shirt_collar_back_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/shirt_sleeve_alpha.tga b/bin/openmetaverse_data/shirt_sleeve_alpha.tga
new file mode 100644
index 0000000..e3b18f4
--- /dev/null
+++ b/bin/openmetaverse_data/shirt_sleeve_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/shoe_height_alpha.tga b/bin/openmetaverse_data/shoe_height_alpha.tga
new file mode 100644
index 0000000..d08dd75
--- /dev/null
+++ b/bin/openmetaverse_data/shoe_height_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/skirt_length_alpha.tga b/bin/openmetaverse_data/skirt_length_alpha.tga
new file mode 100644
index 0000000..c867994
--- /dev/null
+++ b/bin/openmetaverse_data/skirt_length_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/skirt_slit_back_alpha.tga b/bin/openmetaverse_data/skirt_slit_back_alpha.tga
new file mode 100644
index 0000000..0e49688
--- /dev/null
+++ b/bin/openmetaverse_data/skirt_slit_back_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/skirt_slit_front_alpha.tga b/bin/openmetaverse_data/skirt_slit_front_alpha.tga
new file mode 100644
index 0000000..888bbf7
--- /dev/null
+++ b/bin/openmetaverse_data/skirt_slit_front_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/skirt_slit_left_alpha.tga b/bin/openmetaverse_data/skirt_slit_left_alpha.tga
new file mode 100644
index 0000000..210feac
--- /dev/null
+++ b/bin/openmetaverse_data/skirt_slit_left_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/skirt_slit_right_alpha.tga b/bin/openmetaverse_data/skirt_slit_right_alpha.tga
new file mode 100644
index 0000000..ce11c64
--- /dev/null
+++ b/bin/openmetaverse_data/skirt_slit_right_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/underpants_trial_female.tga b/bin/openmetaverse_data/underpants_trial_female.tga
new file mode 100644
index 0000000..96bf732
--- /dev/null
+++ b/bin/openmetaverse_data/underpants_trial_female.tga
Binary files differ
diff --git a/bin/openmetaverse_data/underpants_trial_male.tga b/bin/openmetaverse_data/underpants_trial_male.tga
new file mode 100644
index 0000000..095695c
--- /dev/null
+++ b/bin/openmetaverse_data/underpants_trial_male.tga
Binary files differ
diff --git a/bin/openmetaverse_data/undershirt_trial_female.tga b/bin/openmetaverse_data/undershirt_trial_female.tga
new file mode 100644
index 0000000..e17a309
--- /dev/null
+++ b/bin/openmetaverse_data/undershirt_trial_female.tga
Binary files differ
diff --git a/bin/openmetaverse_data/upperbody_color.tga b/bin/openmetaverse_data/upperbody_color.tga
new file mode 100644
index 0000000..85fcc41
--- /dev/null
+++ b/bin/openmetaverse_data/upperbody_color.tga
Binary files differ
diff --git a/bin/openmetaverse_data/upperbody_highlights_alpha.tga b/bin/openmetaverse_data/upperbody_highlights_alpha.tga
new file mode 100644
index 0000000..2d8102b
--- /dev/null
+++ b/bin/openmetaverse_data/upperbody_highlights_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/upperbody_shading_alpha.tga b/bin/openmetaverse_data/upperbody_shading_alpha.tga
new file mode 100644
index 0000000..b420506
--- /dev/null
+++ b/bin/openmetaverse_data/upperbody_shading_alpha.tga
Binary files differ
diff --git a/bin/openmetaverse_data/upperbodyfreckles_alpha.tga b/bin/openmetaverse_data/upperbodyfreckles_alpha.tga
new file mode 100644
index 0000000..76c7ce8
--- /dev/null
+++ b/bin/openmetaverse_data/upperbodyfreckles_alpha.tga
Binary files differ
diff --git a/bin/pCampBot.exe.config b/bin/pCampBot.exe.config
index 9cfb7e9..9cfb7e9 100644..100755
--- a/bin/pCampBot.exe.config
+++ b/bin/pCampBot.exe.config