· 9 years ago · Jan 13, 2017, 08:58 PM
1<Config DebugMode="false"
2 WireframeMode="false"
3 >
4 <BugFixes
5 DPIIndependentCursorSize="-1"
6 FixSunkenMud="true"
7 HandleCursorWithoutDirectX="false"
8 >
9 <WheelmassBug
10 SuspensionFix="true"
11 TireDeformationFix="true"
12 MudSinkingFix="true"
13 MaxDeformationPressure="25e6"
14 />
15 </BugFixes>
16 <Camera
17 CabinCameraMaxAngle="-1"
18 DetachCameraFromSteering="true"
19 NoCabinCameraReset="true"
20 NoAutoZoom="true"
21 NoAdvancedAutoZoom="true"
22 NoAutoZoomOnStations="true"
23 RightSideCameraKey="160"
24 UncapZoom="true"
25 UncapX360Zoom="false"
26 />
27 <ExternalMinimap
28 EnableMinimap="false"
29 MinimapPositionX="-1280"
30 MinimapPositionY="0"
31 MinimapWidth="1280"
32 MinimapHeight="1024"
33 MinimapMarkerSize="32"
34 />
35 <Gameplay
36 AlternateDifflockDamage="false"
37 AlwaysShowDevMenu="false"
38 AlwaysAllowSpawnLocators="false"
39 HardcoreAutoLogs="true"
40 LegacyCloaks="true"
41 LoadPointsPerObjective="20"
42 NoDamage="false"
43 UnlimitedFuel="false"
44 />
45 <Graphics
46 DisableDOF="true"
47 IncreaseTerrainLOD="false"
48 NoVisualDamage="false"
49 RenderDistanceIncrease="128"
50
51 AspectRatio="-1"
52 FOV="-1"
53 />
54 <HUD
55 HideHUD_SteamInfo="false"
56 HideHUD_3dUI="false"
57 />
58 <Misc
59 AllowCustomObjectsInMP="true"
60 DisableSuspensionDamage="false"
61 FasterFileAccess="true"
62 HavokBufferSize="5000000"
63 ShifterReleaseFix="true"
64 TrailerLoadFix="true"
65 />
66 <Modding
67 CustomizableTrailerBreakoffForce="true"
68 ExtraAddonProperties="true"
69 MapsCanOverrideCloakMesh="true"
70 OrientableShafts="true"
71 STPControlledConstraints="true"
72 SupportCustomShafts="true"
73 SupportSkidSteering="true"
74 SupportAdditionalConstraints="true"
75 SupportSilentLinkedSteering="true"
76 SuspensionTunableInWheelsSets="true"
77 UnclampedXML="true"
78 UnclampedManualLoads="true"
79 UnpresetWheels="true"
80 WheelsetsCanRequireAddons="true"
81 >
82 <ConstraintController IncreaseKey="97" DecreaseKey="99" ResetKey="101"/>
83 <ConstraintController IncreaseKey="100" DecreaseKey="102" ResetKey="101"/>
84 <ConstraintController IncreaseKey="103" DecreaseKey="105" ResetKey="101"/>
85 </Modding>
86 <NewGameOptions
87 AlternateTruckMenu="true"
88 AlternateMapMenu="true"
89 DisableCloaks="false"
90 ShowLockedTrucksAtSelectionScreen="false"
91 >
92 <TruckGroup Name="Tractors"
93 Keyword="Type K-700"
94 Keyword="K-710"
95 Keyword="K701"
96 />
97 <TruckGroup Name="Large vehicles"
98 Keyword="12x12"
99 Keyword="16x16"
100 Keyword="Maz 7410"
101 Keyword="Locomotive_M62"
102 />
103 <TruckGroup Name="4 Axle"
104 Keyword="8x8"
105 Keyword="T813"
106 Keyword="M1070"
107 Keyword="Type D-535"
108 Keyword="Type D-537"
109 Keyword="Type E-7310"
110 />
111 <TruckGroup Name="3 Axle"
112 Keyword="6x6"
113 Keyword="KPA3-214"
114 Keyword="Type B-131"
115 Keyword="Type C-255"
116 Keyword="Type C-4310 (White)"
117 Keyword="Type C-4310"
118 Keyword="Type C-4320"
119 Keyword="Type C-432010 (blue)"
120 Keyword="Type C-432010"
121 Keyword="Type C-65111"
122 Keyword="Type C-65115"
123 Keyword="Type C-6520"
124 Keyword="Type C-6522"
125 />
126 <TruckGroup Name="2 Axle"
127 Keyword="4x4"
128 Keyword="Type A-469"
129 Keyword="Type B-130"
130 Keyword="Type B-66"
131 Keyword="Type K-700"
132 />
133 <TruckGroup Name="Default trucks"
134 Keyword="Type A-469"
135 Keyword="Type B-130"
136 Keyword="Type B-131"
137 Keyword="Type B-66"
138 Keyword="Type C-255"
139 Keyword="Type C-4310 (White)"
140 Keyword="Type C-4310"
141 Keyword="Type C-4320"
142 Keyword="Type C-432010 (blue)"
143 Keyword="Type C-432010"
144 Keyword="Type C-65111"
145 Keyword="Type C-65115"
146 Keyword="Type C-6520"
147 Keyword="Type C-6522"
148 Keyword="Type D-535"
149 Keyword="Type D-537"
150 Keyword="Type E-7310"
151 Keyword="Type K-700"
152 />
153 <TruckGroup Name="1 Star"
154 Keyword="(*)"
155 />
156 <TruckGroup Name="2 Stars"
157 Keyword="(**)"
158 />
159 <TruckGroup Name="3 Stars"
160 Keyword="(***)"
161 />
162 <TruckGroup Name="4 Stars"
163 Keyword="(****)"
164 />
165 <TruckGroup Name="5+ Stars"
166 Keyword="(*****)"
167 Keyword="(******)"
168 Keyword="(*******)"
169 />
170
171 <MapGroup Name="Default maps"
172 Keyword="coast"
173 Keyword="flood"
174 Keyword="hill"
175 Keyword="plains"
176 Keyword="river"
177 Keyword="volcano"
178 />
179 </NewGameOptions>
180 <TimeCycle
181 FreezeTimeOfDayAt="-1"
182 GameDayDurationInRealSeconds="3600"
183 />
184 <Winch
185 BatteryPoweredWinch="false"
186 ReleaseWinchKey="88"
187 WinchRange="-1"
188 />
189 <OtherDlls
190 LoadDll="SpintiresPlusPlugin.dll"
191 LoadDll="Plugin2.dll"
192 d3d9DllOverride=""
193 />
194</Config>
195
196<!--
197DebugMode: creates an additional window and displays some mod-related information including per-tire ground pressure.
198 It is recommended to play the game in windowed mode when using this option.
199 TWoW means Total Weight on Wheel, it doe not include the wheel's own weight.
200
201WireframeMode: displays 3d objects in wireframe mode. Objects with less than 3 polygons are still displayed in textured mode
202 or you wouldn't see anything (the game you see is a texture drawn on 2 triangles in front of your screen).
203 When this is enabled use F3 to switch to wireframe mode, and F2 to switch back to normal view.
204
205///////////////////////////////////////////////////////
206//////////////////// BUGFIXES SECTION////////////////////
207///////////////////////////////////////////////////////
208DPIIndependentCursorSize: prevents mouse cursor from disappearing when setting windows DPI to more than 100%.
209 You MUST set DPIIndependentCursorSize to a power of 2 ( 8, 16, 32, 64, 128, or 256... pixels).
210 At 100% DPI the game uses a 32 x 32 pixel cursor.
211 0 or negative values disable the feature.
212 Other values will make the cursor invisible.
213
214FixSunkenMud: fixes a bug where the mud randomly becomes invisible and your vehicle appear to float over the ground. If your enable
215 wireframe mode you'll notice that the visual representation the mud is below the ground.
216 WARNING: if you have saved your game while the mud was below ground the bugfix cannot restore it.
217
218HandleCursorWithoutDirectX: Use Windows itself to display the cursor ingame instead of DirectX. Try this if your cursor still
219 disappears with DPIIndependentCursorSize. HandleCursorWithoutDirectX only has an effect when you play in fullscreen mode (in
220 windowed mode the game already uses Windows' basic functions to displays the cursor).
221
222///////////////////////////////////////////////////////
223////////////// WHEELMASS BUG SECTION //////////////////
224///////////////////////////////////////////////////////
225
226SuspensionFix: supports 2 new truck xml tokens: SuspensionStrength_Normalized and SuspensionDamping_Normalized.
227 If present they override SuspensionStrength and SuspensionDamping in a manner that makes suspension behavior
228 independent from wheel mass.
229 Typical order of magnitude: 5.0 for strength, 50 for damping.
230 To port an existing suspension use the formula: Normalized value=old value/(1/wheelmass + 1/parent frame mass)
231 If SuspensionFix is enabled but the truck does not have the *_Normalized tokens then your suspension still varies with wheelmass.
232 First component of the wheelmass bug fix.
233
234TireDeformationFix: make tire softness independent from wheel mass. Can also prevent light soft wheels under heavy load from
235 clipping through the ground.
236 Second component of the wheelmass bug fix.
237
238MudSinkingFix: completely changes the condition that determines whether you sink into the mud or not.
239 The old one made light wheels sink more than heavy ones, the new one is ground pressure based.
240 This affects how you sink under your own weight, not how fast your tires dig the ground when spinning/slipping.
241 Third component of the wheelmass bug fix.
242
243MaxDeformationPressure: defines what ground pressure would give the (presumed) highest possible mud deformation when using
244 the MudSinkingFix feature. Surface is not deformed if you apply less than MaxDeformationPressure/255 so you could also
245 see this as a difficulty setting.
246 Has no effect if MudSinkingFix is turned off.
247 Defaults to 25MPa (25e6)
248
249///////////////////////////////////////////////////////
250//////////////////// CAMERA SECTION////////////////////
251///////////////////////////////////////////////////////
252
253CabinCameraMaxAngle: how far you can turn the cabin camera left and right, by default the game allows for +/- 90 deg
254 Only applies to cabin camera for which IsHood="true" (if it's false you already have +/-180 angle)
255 Negative values disable the feature.
256
257DetachCameraFromSteering: prevents the camera from turning to point where your wheels are steering.
258
259NoCabinCameraReset: prevents cabin camera from automatically resetting forward when the truck is moving.
260
261NoAutoZoom: prevents automatic zoom reset after 64s.
262
263NoAdvancedAutoZoom: prevents autozooming when entering/leaving advanced mode
264
265NoAutoZoomOnStations: prevents automatic camera adjustments when stopping at a gas station, lumber yard, garage or objective.
266
267RightSideCameraKey: hold this key while pressing the 1 or 2 keys to see your truck from
268 the right side instead of the left.
269 You must enter the "decimal virtual key code" of the desired key.
270 Google "decimal virtual key code" if you don't know what it is. When you find a table where 88 corresponds to X and 160 to left shift you're at the right place.
271 Negative values disable the feature.
272
273UncapZoom: allows unlimited zooming/unzooming.
274 WARNING: zooming too much will make the camera flip and move away.
275
276UncapX360Zoom: identical to UncapZoom, but for $#!%@ X360 controller users.
277
278///////////////////////////////////////////////////////
279/////////////// EXTERNAL MINIMAP SECTION///////////////
280///////////////////////////////////////////////////////
281
282EnableMinimap: Enables a separate window that display a simple map of the current level along with nearby trucks.
283 This feature REQUIRES to have more monitors that what the game uses in fullscreen mode.
284
285MinimapPositionX, MinimapPositionY: coordinates of the minimap window on your desktop.
286 negative X are to the left of your main monitor.
287 Y=0 corresponds tot he top of your main monitor.
288
289MinimapWidth,MinimapHeight: size in pixels of the minimap window
290
291MinimapMarkerSize: size of the markers on the minimap.
292
293///////////////////////////////////////////////////////
294///////////////// GAMEPLAY SECTION ////////////////////
295///////////////////////////////////////////////////////
296
297AlternateDifflockDamage: use an alternate method to calculate difflock stress.
298 Slightly more realistic that the default one since it's based on the difference of angular speed of your wheels, and a lot less forgiving.
299
300AlwaysShowDevMenu: shows the developer's menu (with options to spawn, reload, refill, vehicles) in all game modes.
301
302AlwaysAllowSpawnLocators: allows using spawn locators outside the proving grounds
303
304LegacyCloaks: changes what parts of the F1 minimap are revealed what several cloaks overlap.
305 With default cloaks everything around a cloak is revealed when you remove it, even it part are within the radius of action
306 of another cloak.
307 With legacy cloaks you have to remove ALL cloaks covering a spot to see it on the minimap.
308
309HardcoreAutoLogs: allow automatically loading logs at lumber yards in hardcore mode.
310
311LoadPointsPerObjective: the number of loadpoints needed to complete an objective.
312 Valid range: 0-127. Values 128 to 255 should also be possible but will cause glitches in the map.
313 Values past 255 are not supported.
314 -1 disables the feature
315
316NoDamage: self explanatory.
317
318UnlimitedFuel: self explanatory.
319
320///////////////////////////////////////////////////////
321////////////////// GRAPHICS SECTION ///////////////////
322///////////////////////////////////////////////////////
323
324DisableDOF: disables the depth of field feature (DoF blurs what is very close and very far from the camera).
325
326IncreaseTerrainLOD: slightly increase terrain LOD, particularly visible inside rivers.
327 But uses a lot of CPU power.
328
329NoVisualDamage: prevents visual representation of damage such as bumps and cracks on the chassis of the truck.
330 Your damage bar will still fill up and effects such as sparks, oil leak, smoke still trigger when your truck is damaged enough.
331
332RenderDistanceIncrease: increase mud rendering distance by this amount, also affect some other objects, causes severe LOD popping.
333 Default value: 0, Max 255, 0 disables the feature, values past 18 are pretty much meaningless due to an additional engine limitation.
334 FYI the default rendering distance is 6 units, it becomes 6+RenderDistanceIncrease.
335
336Aspect ratio: the ratio of your screen's width divided by its height. You've got to enter values like 1.33333 or 1.25, not 4:3 or 5:4.
337 default value: -1. Negative values disable the feature.
338
339FOV: the width in degrees of the field of view of the camera.
340 Valid range 1-359, default value: -1. Negative values disable the feature
341
342///////////////////////////////////////////////////////
343//////////////////// HUD SECTION //////////////////////
344///////////////////////////////////////////////////////
345
346HideHUD_SteamInfo: removes your steam account and avatar from the HUD.
347 WARNING: it also hides speed and AngVel from the Dev tools.
348
349HideHUD_3dUI: removes compass, shifter, and truckdata from the HUD.
350
351///////////////////////////////////////////////////////
352//////////////////// MISC SECTION /////////////////////
353///////////////////////////////////////////////////////
354
355AllowCustomObjectsInMP: prevents the "Game files differ from original package..." error when playing MP maps witch custom objects.
356
357DisableSuspensionDamage: disables damage received when driving at medium speed over rough terrain
358 and disables speed damage (damage received when driving very fast over any terrain, even perfectly flat).
359
360FasterFileAccess: Reduces the time it takes the game to read files. Most visible consequence is faster menus (for those that need
361 to read many files), notably the garage menu, the truck selection, the map menu, and the new game menu.
362 This option should also reduce load times.
363 How it works? It tells PHYSFS not to check if each component if a path is a symbolic link.
364
365HavokBufferSize: The size in bytes of the buffer havok uses to store temporary data (such as collisions). Try increasing this if the game crashes
366 when spawning too many objects or when 2 vehicles approaches each other.
367 By default the game uses 500000.
368 0 disables the feature.
369
370ShifterReleaseFix: prevent the game from turning off cruise controls when you engage the auto gearbox.
371
372TrailerLoadFix: allows forcefully loading logs onto a trailer even if your truck is "incorrectly positioned".
373 The further you are from the correct position, the more likely you are to trigger an Havok explosion.
374
375///////////////////////////////////////////////////////
376////////////////// MODDING SECTION// //////////////////
377///////////////////////////////////////////////////////
378tldr: additional features that mods using SpintiresPlus may need/use.
379
380ConstraintController: see STPControlledConstraints
381
382CustomizableTrailerBreakoffForce: Allows the modders to define the force needed for their trailers to break off trucks.
383 Modders, please keep in mind that an unbreakable trailer link is unrealistic, but it can be though.
384 An example is available in the example section.
385
386ExtraAddonProperties: Allows addons to modify more properties of your turck:
387 Damage sensation (snorkels):
388 Damage sensation defined in addons overwrites the one defined in the truck, coordinates are relative to the truck's frame (not the addon's).
389 WARNING for modders: only one snorkel can be active per truck at a given time. If you mount 2 snorkel addons on a truck, only the damage sensation
390 from the first one is taken in account. Please make your snorkels mutually exclusive.
391
392 Engine torque (turbocharger, secondary engines...):
393 Torque modifiers are expressed as a multiplier to engine torque. You can have several addons that modify torque, they are
394 multiplicatively combined.
395 Since any_value/0.0 = infinity, multiplying your engine torque by 0 cannot be undone when removing the addon.
396 An example is available in the example section.
397
398 Gearbox (gearbox addons):
399 Gearbox addons work like snorkels, with the same restriction of being unable to have 2 gearbox addons installed at
400 the same time.
401
402MapsCanOverrideCloakMesh: map makers can now include an additional xml file with their maps to change how cloaks will look like
403 on their maps
404 An example is available in the example section.
405
406OrientableShafts: Allows forcing the endpoints of shafts (BoneStart and BoneEnd) to be along a specific axis relative to the truck
407 rathen than being along truck X.
408 In the base game, shaft endpoints are automatically rotated so that they face each other. This is disabled for shafts that use
409 a custom orientation.
410 An example is available in the example section.
411
412STPControlledConstraints: Adds a new form of controlled constraints that can be moved without going into the advanced menu.
413 Each STPControlledConstraint in the mod(s) specifies what ConstraintController drives it, and you, the reader
414 have to create <ConstraintController/> in SpintiresPlus_config.xml to assign keys to constraint controllers and
415 those keys will drive the associated articulation(s) on your truck.
416 Several constraints can use the same controller.
417 ConstraintController have 3 properties:
418 -IncreaseKey: they key used to move the articulation(s) in one direction.
419 -DecreaseKey: they key used to move the articulation(s) in the other direction.
420 -ResetKey: they key used to reset the articulation(s) to its/their default position.
421 The default 3 ConstraintController use numpad keys 1,4,7 to move in one direction and 3,6,9 for the other.
422 They all use numpad 5 to reset, but it is not required to use the same reset key for all.
423 Once again, you define keys by giving their virtual key code. Google "decimal virtual key code" if you don't
424 know what it is. When you find a table where 88 corresponds to X and 160 to left shift you're at the right place.
425 There is no limit to the number of constraint controllers you can define.
426 An example showing how to create an STPControlledConstraint is available in the example section, along with additional
427 information for modders.
428 For an example of ConstraintController, look up.
429
430 PS: constraint controllers have nothing to do with xbox controllers or gamepads.
431
432
433SupportCustomShafts: Allows specifying custom models fro driveshafts in the <Shaft> nodes.
434 An example is available in the example section.
435
436SupportSkidSteering: supports the SkidSteeringMode XML token in Truck/Wheels/Wheel, which allows for tank-like steering.
437 SkidSteeringMode has 2 possible values:
438 -ForwardReverse, which makes wheels/tracks on one side go forward, and those on the other side go backward when you steer.
439 -ForwardBrake is like ForwardReverse but wheels/tracks are braked instead of going backward.
440 Both modes only differ when steering in 1st gear or reverse. At higher gears, brakes are used to steer anyway.
441
442 Information for DRIVERS:
443 -ForwardReverse only engages reverse mode in 1st and reverse gears, when you are steering as sharp as possible. In all other cases (small
444 deviations at any speed, sharp turns at high speed...) only the brakes are used for steering.
445 -All wheels of a side are "locked" at the same speed, always. This will not cause difflock damage. Admittedly, my locking system still has room for improvement...
446 -Difflocking obviously disables steering.
447 -AWD mode has no effect.
448 -Skid steering vehicles can stall an any gear if they don't have enough power to pull your stuff.
449
450 Information for MODDERS:
451 -All wheels using SkidSteeringMode are powered.
452 -Skid steering wheels are put in 2 groups: left-side group or right-side goup depending on if they have RightSide="true".
453 -If a vehicle has at least one wheel using SkidSteeringMode, then wheels not using skid steering are NOT powered.
454 -All wheels on a side are locked at the same PERIPHERAL speed, meaning that wheels of different sizes rolling on the same track are supported.
455 -Your vehicle will not work if all skid steering wheels are on the same side.
456 -Skid steering requires using a gearbox in STP format, which basically means that:
457 -you supply maximum ENGINE torque instead of wheel torque in the <Motor> section
458 -you supply total transmission ratio for each gear in the <Gear> section. Give a positive ratio for reverse gear.
459 -obviously this is not compatible with the base game's gearbox, so all non-skid steering wheels are not powered.
460 -STP uses the an engine map inspired by a Caterpillar C15, that means:
461 50% to full torque from 0 to 1000 RPM
462 full torque from 1000 to 1500RPM
463 full to 0 torque from 1500 to 3500RPM.
464 -MaxDeltaAngVel is repurposed as a fuel consumption multiplier.
465 -it is strongly recommended to set SteeringAngle to 0 on all wheels using SkidSteeringMode, or your wheels will use both steering modes at once.
466 Tip : keep in mind that skid steering requires a lot of torque! If you run into cases where your vehicle refuses to steer at high gears even on flat hard ground, add torque.
467 An example is available in the example section.
468
469SuspensionTunableInWheelsSets: supports tuning suspension and hardpoint offsets from inside the WheelsSets section
470 Consult the Example section for a list of available tokens.
471
472SupportAdditionalConstraints: supports 2 new constraints between physical bodies: PointToPlane, PointToPath.
473 PointToPlane:
474 Point to plane allows all rotations and blocks one translation.
475 Picture yourself a ball on a table: it can roll in any direction, you can push it parallely to the table but you
476 cannot ram it through the table (and in this case, you cannot lift it either).
477 You define a PointToPlane constraint by giving a vector perpendicular to the table (AxisLocal) and one point that belongs to the table (PivotOffset)
478 PointToPlane does NOT support motors, but should be breakable or malleable (not tested).
479 PointToPlane will trigger the error "Unsupported constraint type '14'". Ignore it.
480
481 PointToPath:
482 Locks the position of the child object on a path and allows all rotations. Typically used to keep track segments on a path looping
483 around the wheels.
484 PointToPath does NOT support motors, but should be breakable or malleable (not tested).
485 PointToPath will trigger the error "Unsupported constraint type '3'". Ignore it.
486 PointToPath has 3 modes:
487 -PositionOnly where the child body's origin is locked onto the path
488 -AlignXToPath where additionally the child object's X vector is forced to be along the path
489 -FullyConstrained to path, like X aligned but the child's Z vector also points in a direction of your choosing.
490 Upon creation, ST+ will display the coordinates of the child body relative to its parent in the debug console. You can use that
491 to build up your path.
492
493 Chain:
494 Allows all rotations and blocks all translations between a long chain of bodies (20+). While you could achieve a similar result by putting ragdoll
495 constraints between each element of the chain, the point of the Chain constaint is increased stability (ie: less Havokslposions and twitching).
496 For technical reasons (ex: the chain requires many bodies, but typical constrains only have 2) the Chain is build as a parasite inside
497 the PointToPlane and PointToPath constraints. Chain-specific attributes all start with "Chain_" .
498 Basically you create your PointTo*** constraint as usual, then add Chain_Mode="StartChain" to make its (child) body the first of the chain.
499 Same thing for the next body, but you add Chain_Mode="ContinueChain" inside the constraint.
500 For the last body, add Chain_Mode="EndChain", but there is a catch: when ending a chain, the chain constraint get created instead of
501 the PointTo*** one, so you have the create the last PointTo*** constraint again (but without Chain_Mode this time).
502 You cannot add bodies to 2 chains at the same time, you must start one chain, fill it up, end it, and THEN you can start another.
503 One body cannot be put twice in chain (ie: no looping chains).
504 Chains do not support BreakOffThreshold and MalleableStrength (use Chain_Stiffness instead).
505
506 Tip 1: if you're making tracks, don't forget that you need to constraint at least every other (1 out of 2) track element if you
507 use point to plane, or likely all elements if you use point to path.
508 Tip 2: if you're making tracks, the use of _templates is HIGHLY recommended.
509 Examples are available in the example section.
510
511 Additionally each STP constraint allows to override the "quality" of its bodies. Quality reflects the amount of CPU time havok will spend
512 in trying to prevent those objects from clipping through others.
513 You override quality by defining SetChildQuality or SetParentQuality in a constraint. Use those if you can't prevent clipping by increasing
514 the size of your cdt mesh.
515 Valid values are 0 to 8, where 8 is the most CPU expensive. Telekinesys's recommendations are:
516 0: for fixed bodies.
517 1: for moving objects with infinite mass
518 2: for debris objects
519 3: for debris objects with simplified collisions with fixed/landscape objects. Spintires uses this by default.
520 4: for moving bodies, which should not leave the world, but you rather prefer those objects to tunnel through the world than dropping frames because the engine.
521 5: for objects which you cannot afford to tunnel through the world at all.
522 6: for very fast objects (bullets).
523 7: custom, don't use.
524 8: for rigid body character controllers.
525
526SupportSilentLinkedSteering: allows using IsLinkedSteering=true without revving up the engine when steering.
527 An example is available in the example section.
528
529UnclampedXML: prevents the "Clamping node XXX value YYY (min/max is ZZZ)" error and allows any value for those settings.
530
531UnclampedManualLoads: prevents the "Clamping node XXX value YYY (min/max is ZZZ)" error on the ManualLoads paremeter.
532 Seperated from UnclampedXML because UnclampedManualLoads does NOT work on the editor, but UnclampedXML does.
533
534UnpresetWheels: supports 5 new wheel xml tokens:
535 - Mass_Numeric is the wheel's mass in kg
536 - Friction_Numeric is its friction coefficient, typically in the 0.0 to 2.0 range.
537 - SubstanceFriction_Numeric same as Friction_Numeric, but used when in the mud. Chained wheels have it at 1.8.
538 - Softness_Numeric ranges from 0.0 to 1.0, where 1 means hard tires.
539 - Havok_AllowedPenetrationDepth determines how deep a wheel can clip through other objects for the sake of resolving "impossible" constraints.
540 It has nothing to do with mud/water.
541 This setting should only be used by people familiar with Havok's inner workings. The game defaults this to radius/2, Havok recommends 5-20%
542 of the smallest length of the object.
543 If present the _Numeric tokens override the mass/softness/friction presets.
544 Keep in mind that the softness preset also sets RadiusDelta (difference between wheel radius and collision cylinder radius)
545 which is not overwritten by this mod.
546 An example is available in the example section.
547
548WheelsetsCanRequireAddons: Hides some wheelsets in the garage menu if you don't have the addons they require.
549 Removing an addon that is required for your current wheelset changes your wheels to default wheelset.
550 You cannot put RequiredAddons for the default wheelset.
551 WARNING: when exporting your mode to the workshop, RequiredAddons are NOT automatically converted to modstring codes. You'll
552 have to do the replacement manually.
553 An example is available in the example section.
554
555///////////////////////////////////////////////////////
556///////////////// NEW GAME SECTION ////////////////////
557///////////////////////////////////////////////////////
558
559AlternateMapMenu: replaces the map selection menu by a scrollable, sortable, and searchable one. Like with the AlternateTruckMenu,
560 you have to define your own sorting categories if you want any sorting.
561 Map categories are defined like truck categories, just with "MapGroup" instead of "TruckGroup".
562 FasterFileAccess="true" is recommended when using this option.
563
564AlternateTruckMenu: Replaces the truck selection menu with one that is faster, allows searching, configuring addons/wheelsets, and
565 where trucks are sorted by categories. You must define your own categories if you want trucks to be sorted.
566 Enabling AlternateTruckMenu also enables AlternateMapMenu (I need it to reset addon selection when you change maps).
567 FasterFileAccess="true" is recommended when using this option.
568 Catergories are defined like this:
569 <NewGameOptions/>
570 ...
571 <TruckGroup Name="Tractors" //name of the 1st category
572 Keyword="Type K-700" //case sensitive keyword to match
573 Keyword="K-710"
574 Keyword="K701"
575 />
576 <TruckGroup Name="Large trucks" //name of the 2nd category
577 Keyword="12x12" //case sensitive keyword to match
578 Keyword="16x16"
579 Keyword="Maz 7410"
580 />
581 </NewGameOptions>
582 Truck names that match match at least one keyword are added to the category.
583 Trucks can appear in several categories.
584 There is no limit to the number of categories (except RAM amount :) ).
585 TIp: searching for "*" on the addon/trailer menu shows addons/trailers currently selected.
586
587DisableCloaks: self explanatory. Takes effect when starting a new map.
588
589ShowLockedTrucksAtSelectionScreen: Locked trucks also appear in the startup truck selection list and can be customized.
590 Warning: there is no way to tell if a truck is locked or not at this screen.
591
592MapGroup: see AlternateMapMenu
593
594TruckGroup: see AlternateTruckMenu
595
596///////////////////////////////////////////////////////
597///////////////// TIME CYCLE SECTION //////////////////
598///////////////////////////////////////////////////////
599
600FreezeTimeOfDayAt: locks time of day at a specific hour.
601 Valid range: 0-24. For example 14.5 would lock time at 2h30 PM.
602 Negative values disable the feature.
603
604GameDayDurationInRealSeconds: the duration of a game day in real life seconds. This does NOT affect fuel consumption even
605 if it is expressed in liters per real life minute.
606 The original game uses 1 day = 2700s.
607 Negative values or 0 disable the feature.
608
609///////////////////////////////////////////////////////
610///////////////// WINCH SECTION ////////////////////
611///////////////////////////////////////////////////////
612BatteryPoweredWinch: replaces Power Take Off winches with battery powered winches.
613 It allows winching when the engine is not running (even if your car went belly up).
614
615ReleaseWinchKey: press this key to release the winch if one is currently attached.
616 You must enter the decimal virtual key code of the desired key.
617 Google "decimal virtual key code" if you don't know what it is. When you find a table where 88 corresponds to X and 160 to left shift you're at the right place.
618 Negative values disable the feature.
619
620WinchRange: the length in meters of your winch cable. Due to engine limitations you cannot go past 40m.
621 Default value is 14m.
622 Any negative value disables the feature.
623
624///////////////////////////////////////////////////////
625////////////// 3RD PARTY DLL SECTION //////////////////
626///////////////////////////////////////////////////////
627LoadDll: allows loading other 3rd party dlls/plugins at startup
628 Those dll's DllMain() will be executed before the game's code executes (at this stage it is still encrypted by steam)
629 They may additionally export an __stdcall void OnD3DCreate9(void) function that will be called before the game creates its
630 direct3d context (hint: it's a good time to patch the game's code).
631
632d3d9DllOverride: full path to a dll to load instead of windows\system32\d3d9.dll .
633 Try it if you are using an overlay/graphic enhancer/other hacks that do not work as a plugin.
634
635//////////////////////////////////////////////////////////////////////////
636////////////// XML Examples (this section is for modders) ////////////////
637//////////////////////////////////////////////////////////////////////////
638
639All new XML tokens are mentioned in at least one example.
640They are marked with a "//". Same goes for repurposed tokens.
641If it's not in the examples, it does not exist.
642All new tokens can be used in _templates and are compatible with inheritance (_parent files).
643
644----
645SuspensionFix:
646 example in classes/trucks/kraz255.xml
647 section _templates/Wheel/RearWheel
648 <RearWheel
649 ConnectedToHandbrake="true"
650 DefaultWheelType="kraz_rear"
651 HardpointOffsetY="-0.244"
652 SuspensionMin="-0.4"
653 SuspensionStrength="0.02"
654 SuspensionStrength_Normalized="5" //Wheelmass independent suspension stiffness
655 SuspensionDamping_Normalized="50" //Wheelmass independent suspension damping
656 Torque="default"
657 />
658
659 Those tokens can also be added directly in Truck/Wheels/Wheel that way:
660 <Wheel _template="FrontWheel" HardpointX="3.8"
661 SuspensionStrength_Normalized="5" //Wheelmass independent suspension stiffness
662 SuspensionDamping_Normalized="50" //Wheelmass independent suspension damping
663 />
664----
665CustomizableTrailerBreakoffForce:
666 example in classes/trucks/trailer_tent.xml
667 section Truck/TruckData
668 <TruckData
669 TrailerCanDetach="true" --TrailerBreakOffThreshold is not read if the trailer can't detach
670 TrailerBreakOffThreshold="30000.0" //How hard you must crash your truck before the trailer detaches.
671 //The default value in the base game is 16000.
672 >
673 ...
674 </TruckData>
675----
676ExtraAddonProperties:
677 example in classes/trucks/kraz_protector.xml
678 <TruckAddon>
679 <TruckData>
680 ------------- damage sensation -----------
681 <Damage //New section, added for the sole purpose of containing sensation data.
682
683 //Those 2 will replace what is defined
684 SensationMin="(1.77; 3.00; -0.77)" //in truck.xml/Truck/TruckData/Damage/SensationMin or SensationMax
685 SensationMax="(2.72; 3.00; 0.77)" //You specify the absolute coordinates in the truck's referential
686 //of the water-damage sensing box.
687 />
688 --------------- Torque part --------------
689 <TruckMotorOverrides TorqueFactor="1.05" > //this addon will add 5% engine torque.
690
691 --------------- Gearbox part -------------
692 <ReverseGear
693 AngVel="0.2" //This addon will REPLACE the truck's gearbox
694 GearRatio="0.001" //Please provide both AngVel and GearRatio for compatibility with normal and
695 //skid steering vehicles.
696 //(if you don't, a default conversion factor of 157 will be used)
697 />
698 <HighGear AngVel="6.0" GearRatio="0.04" />
699 <Gear_1 AngVel="0.2" GearRatio="0.001" />
700 <Gear_2 AngVel="1" GearRatio="0.006"/>
701 <Gear_3 AngVel="2" GearRatio="0.013"/>
702
703 <Gear_5 AngVel="3" GearRatio="0.02"/> //Note that Gear_5 here will have NO EFFECT because Gear_4 is missing.
704 //Even if the base truck has a 5th gear.
705 </TruckMotorOverrides>
706 </TruckData>
707 ...
708 </TruckAddon>
709----
710OrientableShafts
711 example in classes/trucks/kraz_255.xml
712 section Truck/TruckData/
713
714 <Shafts>
715 ...
716 <Shaft
717 SocketPointA="Shaft4a"
718 SocketPointB="Shaft4b"
719 SocketAOrientation="(0;0;1)" //the shaft's endpoint on SocketPointA will point toward truck Z
720 SocketBOrientation="(0;1;0)" //the shaft's endpoint on SocketPointB will point toward truck Y
721 />
722 </Shafts>
723----
724SupportCustomShafts:
725 example in classes/trucks/kraz_255.xml
726 section Truck/TruckData/
727 <Shafts>
728 <Shaft SocketPointA="Shaft1a" SocketPointB="Shaft1b"
729 Mesh="env/My_shaft1" //custom shaft mesh
730 />
731 <Shaft SocketPointA="Shaft2a" SocketPointB="Shaft2b"
732 Mesh="env/My_shaft2" //another custom shaft mesh
733 />
734 <Shaft SocketPointA="Shaft3a" SocketPointB="Shaft3b"
735 Mesh="env/Invalid_mesh_*##%" //will use default shaft and log an error
736 />
737 <Shaft SocketPointA="Shaft4a" SocketPointB="Shaft4b" /> <-will use default shaft, no error displayed
738 </Shafts>
739----
740SuspensionTunableInWheelsSets:
741 example in classes/truck/kraz255.xml
742 section Truck/TruckData/WheelsSets
743 <WheelsSets>
744 <WheelsSet Title="TunedWheelSet">
745 <WheelType
746 Type="kraz_front_highway"
747 Wheels="0,1"
748
749 SuspensionStrength_Normalized="5.0" //Overwrites suspension stiffness and damping when
750 SuspensionDamping_Normalized="50.0" //using TunedWheelSet.
751 //This modification only applies to wheels 0 and 1 as defined in the Wheels token.
752
753 SuspensionMin_Offset="-.5" //This is ADDED to the default wheels' SuspensionMin
754
755 HardpointOffsetX="0" //X/Y/Z offsets are ADDED to offsets defined for the default
756 HardpointOffsetY="-.5" //wheels in Truck/Wheels/Wheel.
757 HardpointOffsetZ="-.5" //Z offset is also additively combined with Z offset from the wheel.xml.
758 />
759 <WheelType
760 Type="kraz_double_highway"
761 Wheels="2,3"
762
763 SuspensionStrength_Normalized=".05" //Same idea as above, but for wheels 2 and 3 this time...
764 SuspensionDamping_Normalized=".005" //
765 SuspensionMin_Offset="0" //
766 HardpointOffsetX="1.5" //
767 HardpointOffsetY="1" //
768 HardpointOffsetZ="0" //
769 />
770
771 Etc...
772
773 </WheelsSet>
774 </WheelsSets>
775----
776UnpresetWheels:
777 example in classes/wheels/kraz_front.xml
778 <TruckWheel
779 Friction="Offroad"
780 Friction_Numeric="2.0" //Gives excellent traction on road (ie: highway wheels)
781 SubstanceFriction_Numeric="0.1" //Gives very poor traction in the mud.
782 //Those 2 overwrite what Friction="Offroad" defined
783
784 Mass="Heavy"
785 Mass_Numeric="75.5" //Overwrites what Mass="Heavy" defined
786
787 Softness="Average"
788 Softness_Numeric="1.0" //Stiffest possible tire
789
790 Mesh="wheels/kraz_front"
791 Radius="0.6"
792 Tracks="offroad"
793 Width="0.52"
794
795 Havok_AllowedPenetrationDepth="0.06" //allow up to 6cm of clipping.
796 />
797----
798WheelsetsCanRequireAddons:
799 example in classes/truck/kraz255.xml
800 section Truck/TruckData/WheelsSets
801 <WheelsSets>
802 <WheelsSet
803 Title="highway_wheels"
804 RequiredAddons="kraz_protector,kraz_carriage" //The highway_wheels set will only appear in the garage menu if
805 //you have mounted kraz_protector and kraz_carriage on your truck.
806 //Note:" MyAddon" is a valid addon name that is different from "MyAddon"
807 >
808 <WheelType Type="kraz_front_highway" Wheels="0,1" />
809 <WheelType Type="kraz_double_highway" Wheels="2,3,4,5" />
810 </WheelsSet>
811 </WheelsSets>
812----
813SupportAdditionalConstraints
814 example in any classes/trucks/whatever.xml
815 section Truck/PhysicsModel (or actually any PhysicsModel section)
816
817 *** PointToPlane
818
819 <Constraint
820 ModelFrameParent="Chassis_cdt"
821 ModelFrameChild="TrackSegment_cdt"
822
823 Type="PointToPlane" //we want a PointToPlane constraint
824 AxisLocal="(0;0;1)" //we want to block translation along the chassis' z axis
825 PivotOffset="(0;0;-0.7)" //we want TrackSegment_cdt to stay at z=-0.7
826 />
827
828 *** PointToPath
829 <Constraint
830 ModelFrameParent="Chassis_cdt"
831 ModelFrameChild="TrackSegment_cdt"
832
833 Type="PointToPath" //we want a PointToPath constraint
834 Path_Mode="FullyConstrained" //PointToPath has 3 modes:
835 //1-PositionOnly: where it only makes sure the origin of the child body stays on the path.
836 //2-AlignXToPath: PositionOnly + the X vector of the child points along the path.
837 //3-FullyConstrained: AlignXToPath + the Z vector of the child points along NeverParallelDir
838
839 Loop="true" //specify that this path is looping, a line will link the first node
840 //and the last to close. DO NOT manually close the path
841 //by adding duplicate nodes (this is done automatically)
842
843 Node0="(-1.509;0.342;0)" //The coordinates of the first point of the path, relative to the parent's frame.
844 Node1="(1.572;0.301;0)" //Nodes are linked in a straight line from the previous node.
845 Node2="(1.701;0.155;0)" //There is NO LIMIT TO THE NUMBER OF NODES, the parser will just keep looking
846 Node3="(1.75;-0.09;0)" //for nodes until it doesn't find one.
847 Node4="(1.668;-0.299;0)" //PointToPath constrained bodies will start/spawn atttached to their closest position on
848 Node5="(0.681;-0.6;0)" //the path.(ie: no need to adjust the path's start position for every track segment)
849 Node6="(-1.136;-0.6;0)"
850 Node7="(-1.785;-0.183;0)"
851 Node8="(-1.757;0.174;0)"
852 Node8_Tolerance="0.1" //How far (in meters) we can deviate from the path between node 8 and the next (node 0).
853 //If NeverParallelDir is all 0 then the tolerance applies in any direction (ie: child elements must
854 //stay within a tube arround each path segment).
855 //If NeverParallelDir is set, then only deviations perpendicular to NeverParallelDir are allowed.
856 //For tracks, with NeverParallelDir along Z axis, child element will be able to deviate from path along
857 //X and Y (suspension dir...).
858 //The actual tolerance is linearily interpolated with the tolerance at the previous or next segment.
859
860 PivotOffset="(0;0;0)" //Convenience, same as adding those 3 values to each path node.
861 SmoothFactor="0.2" //Smooths the edges at each node. Valid range: 0 to 0.5. Smoothing creates a quadratic bezier curve
862 //starting at SmoothFactor ratio of the segment, and using one end as control point.
863
864 NeverParallelDir="(0;0;1)" //A vector that is never parallel to the path.
865 //This is used when Path_Mode="FullyConstrained" or when you use Node*_Tolerance.
866 //For tracks you typically want to use the truck's Z vector.
867 //Try to put a negative value if your tracks are upside down.
868
869 FrictionForceAlongPath="10" //Friction force, in Newtons, that resists movement along the path.
870 //This has nothing to do with a tank's grip on the ground.
871
872 SetChildQuality="4" //Raises the child body's quality. Depending on the size of your cdt it might be enough
873 //to prevent track segment from clipping through large rocks, other vehicles, woodpiles, etc...
874
875 SetParentQuality="3" //Same as SetChildQuality, but for the parent.
876 //Usually the chassis, being large and heavy it doesn't need a raise though.
877
878
879 />
880
881 *** Chain
882 <Constraint
883 ModelFrameParent="Chassis_cdt"
884 ModelFrameChild="TrackSegment1_cdt"
885
886 Type="PointToPlane"
887 AxisLocal="(0;0;1)" ------ until there we are just defining a typical PointToPlane constraint
888
889 Chain_Mode="StartChain" //create a new chain and add TrackSegment1_cdt as the first element
890 Chain_PreviousLinkToJointOffset="(-0.25;0;0)" //the distance between TrackSegment1_cdt's origin and the articulation between the
891 //next link and this one. Expressed in TrackSegment1_cdt's frame.
892 Chain_NextLinkToJointOffset="(0;0;0)" //the distance between the next link's origin and the articulation with this body.
893 //Expressed in next link's frame.
894
895 ------------------------- optonal parameters for advanced use only -------------------------
896 Chain_MaxErrorDistance="0.05" //If a body of a chain is further than that from where it should be, then havok will
897 //trigger a special anti-havoksplosion algorithm. Disabled by default. Expressed in meters.
898
899 Chain_CFM="0" //Not too sure about this one myself, so I'll just quote Telekinesys in this:
900 //"Constraint force mixing parameter. Value added to the diagonal of the constraint matrix.
901 //Should be zero or tiny, e.g. a fraction of HK_REAL_EPSILON. When this value is zero, then
902 //some chain configurations may result in a division by zero when solving."
903 //HK_REAL_EPSILON = 0.0000001192092896
904
905 Chain_Stiffness="0.1" //DO NOT use them unless you understand "Havok has a main solver, chains have their own solver,
906 Chain_Damping="0.1" //those are its tau and damping parameters".
907 />
908 <Constraint
909 ModelFrameParent="Chassis_cdt"
910 ModelFrameChild="TrackSegment2_cdt"
911
912 Type="PointToPlane"
913 AxisLocal="(0;0;1)" ------ until there we are just defining a typical PointToPlane constraint
914
915 Chain_Mode="ContinueChain" //adds TrackSegment2_cdt to the previous chain
916 Chain_PreviousLinkToJointOffset="(-0.25;0;0)" //
917 Chain_NextLinkToJointOffset="(0;0;0)" //
918 />
919 ... a couple ContinueChain later ...
920
921 <Constraint
922 ModelFrameParent="Chassis_cdt" -- in EndChain mode, ModelFrameParent is irrelevant, just make sure it exists to keep the game happy.
923 ModelFrameChild="TrackSegment99_cdt"
924
925 Type="PointToPlane" -- in EndChain mode, the base constraint's parameters are not even read
926
927 Chain_Mode="EndChain" //adds TrackSegment99_cdt to the previous chain, and terminate the chain
928 Chain_PreviousLinkToJointOffset="(-0.25;0;0)" //
929 Chain_NextLinkToJointOffset="(0;0;0)" //
930 />
931
932 <Constraint --and now you create the PointToPlane that wasn't created when we ended the chain above
933 ModelFrameParent="Chassis_cdt"
934 ModelFrameChild="TrackSegment99_cdt"
935
936 Type="PointToPlane"
937 AxisLocal="(0;0;1)"
938 />
939----
940SupportSilentLinkedSteering:
941 example in classes/trucks/kirovets700.xml
942 section Truck/ControlledConstraints
943 <ControlledConstraints>
944 <Constraint
945 Id="chassis_steer"
946 IsLinkedSteering="true"
947 TriggerEngineSound="false" //Driving this constraint will not cause engine sound
948 Name="ChassisSteer"
949 />
950 </ControlledConstraints>
951----
952SupportSkidSteering:
953 example in classes/trucks/uaz469.xml
954 section _templates/Wheel/UazWheel (also applies to Truck/Wheels/Wheel)
955 <UazWheel
956 DefaultWheelType="uaz"
957 HardpointOffsetY="-0.12"
958 SuspensionDamping="0.3"
959 SuspensionMin="-0.3"
960 SuspensionStrength="0.03"
961 SkidSteeringMode="ForwardBrake" //When turning left, left side wheels will brake,
962 //right side wheels will go forward.
963 //You can put "ForwardReverse" instead for classic tank steering.
964
965 SteeringAngle="0" <-Not needed, but recommended
966 />
967 ...
968 <Truck>
969 <TruckData>
970 <Motor
971 MaxDeltaAngVel="2.0" //twice the fuel consumption
972 Torque="1640" //the the max torque outside the engine
973 >
974 <ReverseGear AngVel="0.08" /> //total transmission ratios when this gear is selected
975 <HighGear AngVel="0.1" /> //wheel RPM = engine RPM * these numbers
976 <Gear AngVel="0.08" /> //If all goes well your wheels will spin at about
977 <Gear AngVel="0.09" /> //2100 RPM(219 angvel) * these numbers
978 <Gear AngVel="0.16" /> //
979 <Gear AngVel="0.25" /> //
980 </Motor>
981----
982MapsCanOverrideCloakMesh:
983 example in levels/level_coast.xml
984 <SpintiresPlusConfig
985 CloakMesh="trucks/kraz255" //next time you play coast, the cloaks will look like a rotating kraz
986 //chassis inside a black circle.
987 />
988----
989STPControlledConstraints:
990 example in trucks\ural_cart.xml
991 section TruckAddon/PhysicsModel/Body/Body
992
993 <Body Mass="400" ModelFrame="BoneRotationBase_cdt"> --this body is the base of the crane
994 <Constraint
995 AxisLocal="(0;1;0)"
996 MinLimit="-350"
997 MaxLimit="350"
998 Name="STPControlledConstraint" --This name tells ST+ that it must handle this constraint.
999 --ST+ will not drive constraints with other names.
1000 --Referencing this name elsewhere (ie: powered or controlled constrains) will not work
1001 --since ST+ will mangle it.
1002
1003 Type="Hinge" --Note that only Hinges and Prismatic constraints are supported.
1004 --UnlimitedHinges are NOT supported.
1005
1006 ControllerIndex="0" //What controller drives this constraint (0=first controller, 1=second, etc...)
1007 Speed="30" //At which speed we try to actuate this constaint, in deg/s for hinges or m/s for prismatics
1008 //Negative values are supported.
1009 //Keep in ming that the speed in game might be slower if your motor
1010 //is not strong enough.
1011
1012 ResetSpeed="60" //Like Speed, but for when we are recentering the constraint
1013 //(hint: you can use that to emulate BackSteerSpeed)
1014 //Also, negative ResetSpeed are a bad idea.
1015 ResetPosition="45" //To what position we should go when resetting, in degrees or meters.
1016 //Defaults to 0 if omitted.
1017
1018 ResetWithTruckMovement="false" //if true the constraint will move toward reset position when the truck is rolling.
1019 //if false, the constraint will only reset when you press the reset key.
1020 //Defaults to false if omitted.
1021 >
1022 <Motor Force="40000" Tau="0.04" Type="Position" />
1023 </Constraint>
1024 <Body Mass="20" ModelFrame="BoneChair_cdt">
1025 ...
1026-------------------------------------
1027SpintiresPlus relies on a modified version of AntTweakBar http://anttweakbar.sourceforge.net/doc/ used under zlib license.
1028
1029SpintiresPlus and its source code are released under the terms of the MIT license:
1030
1031Copyright (c) 2016 Localhost
1032
1033Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
1034associated documentation files (the "Software"), to deal in the Software without restriction,
1035including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
1036and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
1037subject to the following conditions:
1038
1039-The above copyright notice and this permission notice shall be included in all copies or substantial
1040 portions of the Software.
1041
1042THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
1043LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1044IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
1045WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
1046SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1047-->