First public release of SA-2.

This commit is contained in:
Nikolai V. Chr
2021-05-17 08:30:00 +02:00
parent 8a3a489312
commit 445ea2b554
46 changed files with 63336 additions and 179 deletions

View File

@@ -347,7 +347,7 @@
<label>
<name>Time to impact</name>
<x>150</x>
<y>100</y>
<y>150</y>
<width>200</width>
<height>25</height>
<prefix>1st Time to impact: </prefix>
@@ -363,7 +363,7 @@
<label>
<name>Time to impact</name>
<x>150</x>
<y>50</y>
<y>100</y>
<width>200</width>
<height>25</height>
<prefix>2nd Time to impact: </prefix>
@@ -379,7 +379,7 @@
<label>
<name>Time to impact</name>
<x>150</x>
<y>0</y>
<y>50</y>
<width>200</width>
<height>25</height>
<prefix>3rd Time to impact: </prefix>
@@ -395,7 +395,7 @@
<label>
<name>Time to impact</name>
<x>150</x>
<y>-50</y>
<y>0</y>
<width>200</width>
<height>25</height>
<prefix>4th Time to impact: </prefix>
@@ -411,7 +411,7 @@
<label>
<name>Time to impact</name>
<x>150</x>
<y>-100</y>
<y>-50</y>
<width>200</width>
<height>25</height>
<prefix>5th Time to impact: </prefix>
@@ -424,10 +424,26 @@
</input>
</label>
<label>
<name>Time to impact</name>
<x>150</x>
<y>-100</y>
<width>200</width>
<height>25</height>
<prefix>6th Time to impact: </prefix>
<postfix> sec</postfix>
<halign>left</halign>
<format>%2.1f</format>
<box>true</box>
<input>
<property>sam/impact5</property>
</input>
</label>
<label>
<name>Hit chance</name>
<x>150</x>
<y>75</y>
<y>125</y>
<width>200</width>
<height>25</height>
<prefix>1st Hit chance: </prefix>
@@ -443,7 +459,7 @@
<label>
<name>Hit chance</name>
<x>150</x>
<y>25</y>
<y>75</y>
<width>200</width>
<height>25</height>
<prefix>2nd Hit chance: </prefix>
@@ -459,7 +475,7 @@
<label>
<name>Hit chance</name>
<x>150</x>
<y>-25</y>
<y>25</y>
<width>200</width>
<height>25</height>
<prefix>3rd Hit chance: </prefix>
@@ -475,7 +491,7 @@
<label>
<name>Hit chance</name>
<x>150</x>
<y>-75</y>
<y>-25</y>
<width>200</width>
<height>25</height>
<prefix>4th Hit chance: </prefix>
@@ -491,7 +507,7 @@
<label>
<name>Hit chance</name>
<x>150</x>
<y>-125</y>
<y>-75</y>
<width>200</width>
<height>25</height>
<prefix>5th Hit chance: </prefix>
@@ -504,6 +520,22 @@
</input>
</label>
<label>
<name>Hit chance</name>
<x>150</x>
<y>-125</y>
<width>200</width>
<height>25</height>
<prefix>6th Hit chance: </prefix>
<postfix> %%</postfix>
<halign>left</halign>
<format>%d</format>
<box>true</box>
<input>
<property>sam/hit5</property>
</input>
</label>
<label>
<name>ETA</name>
<x>150</x>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-0</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-0</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-1</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-1</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-2</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-2</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-3</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-3</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-4</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-4</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,176 @@
<PropertyList>
<particlesystem>
<name>explosion</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-id-5</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>80</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>30</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>2</value>
</size>
</start>
<end>
<color>
<red><value> 0.8 </value></red>
<green><value> 0.5 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>55</value>
</size>
</end>
<life-sec>
<value>0.5</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>explosion-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/explode-smoke-id-5</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-180</theta-min-deg>
<theta-max-deg>180</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>500</value>
<spread>60</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>10</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.04 </value></alpha>
</color>
<size>
<value>60</value>
</size>
</end>
<life-sec>
<value>40</value>
</life-sec>
<mass-kg> 5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-0</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-0</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-1</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-1</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-2</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-2</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-3</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-3</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-4</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-4</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,187 @@
<PropertyList>
<particlesystem>
<name>smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-5</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>7</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>50</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 1 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.25 </value></red>
<green><value> 0.25 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>5</value>
</size>
</end>
<life-sec>
<value>60</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
<particlesystem>
<name>exhaust</name>
<texture>smoke.png</texture>
<emissive type="bool">true</emissive>
<lighting type="bool">false</lighting>
<condition>
<property>payload/armament/volga-m/flags/smoke-id-5</property>
</condition>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 0.7 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.7 </value></alpha>
</color>
<size>
<value>1.0</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.6 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</end>
<life-sec>
<value>0.15</value>
</life-sec>
<mass-kg> 0.001 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> false </gravity>
<wind typ="bool"> false </wind>
</program>
</particlesystem>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-0</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-0.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-0.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-1</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-1.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-1.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-2</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-2.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-2.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-3</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-3.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-3.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-4</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-4.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-4.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<PropertyList>
<name>aim-120</name>
<path>volga.ac</path>
<animation>
<type>select</type>
<object-name>volga</object-name>
<condition>
<property>payload/armament/volga-m/flags/msl-id-5</property>
</condition>
</animation>
<model>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/motor-smoke-5.xml</path>
<offsets>
<x-m>3.06</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<model>
<name>explosion</name>
<path>Aircraft/S-75/Models/Armament/Weapons/volga-m/explosion-5.xml</path>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</offsets>
</model>
<animation>
<object-name>volga</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

View File

@@ -0,0 +1,74 @@
<?xml version="1.0"?>
<PropertyList>
<particlesystem>
<name>bombhit-smoke</name>
<texture>smoke.png</texture>
<emissive>false</emissive>
<lighting>false</lighting>
<align>billboard</align>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>30</theta-min-deg>
<theta-max-deg>60</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg> 180</phi-max-deg>
<speed-mps>
<value>5</value>
<spread>5</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>-60</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>60</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>3</value>
<spread>5</spread>
</particles-per-sec>
</counter>
<particle>
<start>
<color>
<red><value>0.0</value></red>
<green><value>0.0</value></green>
<blue><value>0.0</value></blue>
<alpha><value>0.2</value></alpha>
</color>
<size>
<value>12.0</value>
</size>
</start>
<end>
<color>
<red><value>0.0</value></red>
<green><value>0.0</value></green>
<blue><value>0.0</value></blue>
<alpha><value>0.05</value></alpha>
</color>
<size>
<value>80.0</value>
</size>
</end>
<life-sec>
<value>120</value>
</life-sec>
<mass-kg>0.025</mass-kg>
<radius-m>0.40</radius-m>
</particle>
<program>
<fluid>air</fluid>
<gravity>true</gravity>
<wind>true</wind>
</program>
</particlesystem>
</PropertyList>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

View File

@@ -0,0 +1,103 @@
<?xml version="1.0"?>
<PropertyList>
<path>crater.ac</path>
<animation>
<type>scale</type>
<object-name>Sphere</object-name>
<x-offset>1.8</x-offset>
<y-offset>1.8</y-offset>
<z-offset>1.4</z-offset>
</animation>
<animation>
<object-name>Sphere</object-name>
<enable-hot type="bool">true</enable-hot>
</animation>
<particlesystem>
<name>explosion-smoke-longterm</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>0</theta-min-deg>
<theta-max-deg>20</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>30</value>
<spread>10</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>5</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>2</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.3 </value></alpha>
</color>
<size>
<value>6</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.05 </value></alpha>
</color>
<size>
<value>12</value>
</size>
</end>
<life-sec>
<value>90</value>
</life-sec>
<mass-kg> 4.0 </mass-kg>
<radius-m> 0.4 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,95 @@
<?xml version="1.0"?>
<PropertyList>
<path>crater.ac</path>
<animation>
<object-name>Sphere</object-name>
<enable-hot type="bool">true</enable-hot>
</animation>
<particlesystem>
<name>explosion-smoke-longterm</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>0</theta-min-deg>
<theta-max-deg>20</theta-max-deg>
<phi-min-deg>-180</phi-min-deg>
<phi-max-deg>180</phi-max-deg>
<speed-mps>
<value>30</value>
<spread>10</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>5</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>2</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.25 </value></blue>
<alpha><value> 0.3 </value></alpha>
</color>
<size>
<value>6</value>
</size>
</start>
<end>
<color>
<red><value> 0.4 </value></red>
<green><value> 0.4 </value></green>
<blue><value> 0.4 </value></blue>
<alpha><value> 0.05 </value></alpha>
</color>
<size>
<value>10</value>
</size>
</end>
<life-sec>
<value>50</value>
</life-sec>
<mass-kg> 5.0 </mass-kg>
<radius-m> 0.4 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,87 @@
<PropertyList>
<path>aim-emesary.ac</path>
<particlesystem>
<name>emesary-heavy-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 0.3 </value></red>
<green><value> 0.3 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>9</value>
</size>
</start>
<end>
<color>
<red><value> 0.2 </value></red>
<green><value> 0.2 </value></green>
<blue><value> 0.2 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>15</value>
</size>
</end>
<life-sec>
<value>50</value>
</life-sec>
<mass-kg> 0.5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

View File

@@ -0,0 +1,87 @@
<PropertyList>
<path>aim-emesary.ac</path>
<particlesystem>
<name>emesary-light-smoke</name>
<texture>smoke.png</texture>
<emissive type="bool">false</emissive>
<lighting type="bool">false</lighting>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-1.5</theta-min-deg>
<theta-max-deg>1.5</theta-max-deg>
<phi-min-deg>-1.5</phi-min-deg>
<phi-max-deg>1.5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>0</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>0</x-min-deg-sec>
<y-min-deg-sec>0</y-min-deg-sec>
<z-min-deg-sec>0</z-min-deg-sec>
<x-max-deg-sec>0</x-max-deg-sec>
<y-max-deg-sec>0</y-max-deg-sec>
<z-max-deg-sec>0</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>100</value>
<spread>0</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red><value> 1.0 </value></red>
<green><value> 1.0 </value></green>
<blue><value> 0.9 </value></blue>
<alpha><value> 0.5 </value></alpha>
</color>
<size>
<value>1.5</value>
</size>
</start>
<end>
<color>
<red><value> 0.9 </value></red>
<green><value> 0.9 </value></green>
<blue><value> 0.9 </value></blue>
<alpha><value> 0.1 </value></alpha>
</color>
<size>
<value>3</value>
</size>
</end>
<life-sec>
<value>50</value>
</life-sec>
<mass-kg> 0.5 </mass-kg>
<radius-m> 0.5 </radius-m>
</particle>
<program>
<fluid> air </fluid>
<gravity type="bool"> true </gravity>
<wind typ="bool"> true </wind>
</program>
</particlesystem>
</PropertyList>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<PropertyList>
<path>parachutist.ac</path>
<offsets>
<x-m> 0.5</x-m>
<y-m> 0.000</y-m>
<z-m> 1.50</z-m>
</offsets>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,144 @@
<?xml version="1.0"?>
<PropertyList>
<path>Models/Effects/procedural_light.ac</path>
<animation>
<type>scale</type>
<object-name>procedural_light</object-name>
<x-offset>1000</x-offset>
<y-offset>1000</y-offset>
<z-offset>1000</z-offset>
</animation>
<effect>
<inherits-from>Effects/procedural-light</inherits-from>
<object-name>procedural_light</object-name>
<parameters>
<light_color_base_r type="float">0.84</light_color_base_r>
<light_color_base_g type="float">0.55</light_color_base_g>
<light_color_base_b type="float">0.42</light_color_base_b>
<light_color_center_r type="float">1.0</light_color_center_r>
<light_color_center_g type="float">0.9</light_color_center_g>
<light_color_center_b type="float">0.7</light_color_center_b>
<intensity_scale type="float">1.0</intensity_scale>
<is_directional type="bool">false</is_directional>
<is_strobe type="bool">false</is_strobe>
<outer_gain type="float">1</outer_gain>
</parameters>
</effect>
<animation>
<type>dist-scale</type>
<object-name>procedural_light</object-name>
<interpolation>
<entry><ind>0</ind> <dep>0.0075</dep></entry>
<entry><ind>3750</ind> <dep>0.750</dep></entry>
<entry><ind>10000</ind><dep>1.000</dep></entry>
</interpolation>
</animation>
<particlesystem>
<name>flare-smoke</name>
<texture>smoke.png</texture>
<emissive>false</emissive>
<lighting>false</lighting>
<offsets>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
<pitch-deg>90</pitch-deg>
<roll-deg>90</roll-deg>
</offsets>
<attach>world</attach>
<placer>
<type>point</type>
</placer>
<shooter>
<theta-min-deg>-5</theta-min-deg>
<theta-max-deg>5</theta-max-deg>
<phi-min-deg>-5</phi-min-deg>
<phi-max-deg>5</phi-max-deg>
<speed-mps>
<value>0</value>
<spread>2</spread>
</speed-mps>
<rotation-speed>
<x-min-deg-sec>10</x-min-deg-sec>
<y-min-deg-sec>10</y-min-deg-sec>
<z-min-deg-sec>10</z-min-deg-sec>
<x-max-deg-sec>40</x-max-deg-sec>
<y-max-deg-sec>40</y-max-deg-sec>
<z-max-deg-sec>40</z-max-deg-sec>
</rotation-speed>
</shooter>
<counter>
<particles-per-sec>
<value>25</value>
<spread>5</spread>
</particles-per-sec>
</counter>
<align>billboard</align>
<particle>
<start>
<color>
<red>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</red>
<green>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</green>
<blue>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</blue>
<alpha>
<value>1</value>
</alpha>
</color>
<size>
<value>0.6</value>
</size>
</start>
<end>
<color>
<red>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</red>
<green>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</green>
<blue>
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
</blue>
<alpha>
<value>0.05</value>
</alpha>
</color>
<size>
<value>6.0</value>
</size>
</end>
<life-sec>
<value>2.75</value>
</life-sec>
<mass-kg>0.00001</mass-kg>
<radius-m>0.015</radius-m>
</particle>
<program>
<fluid>air</fluid>
<gravity type="bool">false</gravity>
<wind type="bool">true</wind>
</program>
</particlesystem>
</PropertyList>

File diff suppressed because it is too large Load Diff

View File

@@ -88,7 +88,7 @@ var warheads = {
"GBU-24": [19, 945.00,1,0],
"GBU-31": [20, 945.00,1,0],
"GBU-54": [21, 190.00,1,0],
"GBU-10": [22, 2000.00,1,0],
"GBU-10": [22, 945.00,1,0],
"GBU-16": [23, 450.00,1,0],
"HVAR": [24, 7.50,1,0],#P51
"KAB-500": [25, 564.38,1,0],

View File

@@ -40,57 +40,67 @@ var PositionUpdater = func () {
if (elev0 == nil) return;
var geodPos = aircraftToCart({x:0, y:40, z: 0});
var geodPos = aircraftToCart({x:-25, y:-50, z: 0});
var co = geo.Coord.new();
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
var elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sam/a", elev-elev0);
setprop("sim/multiplay/generic/float[11]", elev-elev0);
setprop("controls/armament/station[1]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sam/a", 0);
setprop("sim/multiplay/generic/float[11]", 0);
setprop("controls/armament/station[1]/offsets/z-m", 3.4);
}
geodPos = aircraftToCart({x:0, y:-40, z: 0});
geodPos = aircraftToCart({x:25, y:-50, z: 0});
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sam/b", elev-elev0);
setprop("sim/multiplay/generic/float[12]", elev-elev0);
setprop("controls/armament/station[2]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sam/b", 0);
setprop("sim/multiplay/generic/float[12]", 0);
setprop("controls/armament/station[2]/offsets/z-m", 3.4);
}
geodPos = aircraftToCart({x:-40, y:0, z: 0});
geodPos = aircraftToCart({x:50, y:0, z: 0});
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sam/c", elev-elev0);
setprop("sim/multiplay/generic/float[13]", elev-elev0);
setprop("controls/armament/station[3]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sam/c", 0);
setprop("sim/multiplay/generic/float[13]", 0);
setprop("controls/armament/station[3]/offsets/z-m", 3.4);
}
geodPos = aircraftToCart({x:40, y:0, z: 0});
geodPos = aircraftToCart({x:25, y:50, z: 0});
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sam/d", elev-elev0);
setprop("sim/multiplay/generic/float[14]", elev-elev0);
setprop("controls/armament/station[4]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sam/d", 0);
setprop("sim/multiplay/generic/float[14]", 0);
setprop("controls/armament/station[4]/offsets/z-m", 3.4);
}
geodPos = aircraftToCart({x:0, y:0, z: 0});
geodPos = aircraftToCart({x:-25, y:50, z: 0});
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sam/e", elev-elev0);
setprop("sim/multiplay/generic/float[15]", elev-elev0);
setprop("controls/armament/station[5]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sam/e", 0);
setprop("sim/multiplay/generic/float[15]", 0);
setprop("controls/armament/station[5]/offsets/z-m", 3.4);
}
geodPos = aircraftToCart({x:-50, y:0, z: 0});
co.set_xyz(geodPos.x, geodPos.y, geodPos.z);
elev = geo.elevation(co.lat(),co.lon());
if (elev != nil) {
setprop("sim/multiplay/generic/float[16]", elev-elev0);
setprop("controls/armament/station[6]/offsets/z-m", elev-elev0+3.4);
} else {
setprop("sim/multiplay/generic/float[16]", 0);
setprop("controls/armament/station[6]/offsets/z-m", 3.4);
}
};
PositionUpdater();

625
S-75/Nasal/fire-control.nas Normal file
View File

@@ -0,0 +1,625 @@
################### GLOBALS
var false = 0;
var true = 1;
var AIR = 0;
var MARINE = 1;
var SURFACE = 2;
var ORDNANCE = 3;
var radar_update_time = 2;
var launch_update_time = 0.3;
var reloading = 0;
var missile_delay_time = 0;#time when last track was initiated
var missile_release_time = 0;#time when last missile was fired
var ciws_delay_time = 0;#time when CIWS was last fired
var launch_in_progress = 0;# if a firing solution is currently being calculated
var reload_starting = 0;
var ACTIVE_MISSILE = 0;
var semi_active_track = nil;# with multiple missiles flying in semi-active-radar mode, this can change rather fast. Which means pilots wont get a steady tone, but disrupted tones. (tradeoff)
var mutexLock = thread.newlock();
################### SAM INFO
var setupTime = 300;#minimum 'launcher_tilt_time' secs no matter what, due to anim and stuff.
var reload_time = 400;
var launcher_final_tilt_deg = 35;
var launcher_start_tilt_deg = 35;
var launcher_tilt_time = 0;
var sam_align_to_target = 0;
var launcher_align_to_target = 1;
var align_speed_dps = 20;
var radar_elevation_above_terrain_m = 25;
var radar_lowest_pitch = -5;# 0.5 degs = roughly 925 feet at 20 nm, 25 feet at half a nm. # 0.35 = roughly 925 feet at 20 nm, 25 feet at half a nm.
#reaction tme for s-300p is 28 secs acording to http://www.astronautix.com/s/s-300p.html
# sounds a bit high for pmu, as its 4 secs for s-400
################### CIWS INFO
var ciws_installed = 0;
var ciws_domain_nm = 1.50; #range where it can kill
var ciws_chance = 0.20; #chance to get a kill at 0nm distance
var ciws_burst_rounds = 60;#how many rounds in a burst
var ciws_shell = 15;#from lookup table in damage.nas
var ROUNDS_init = 30;
var ROUNDS = ROUNDS_init;#CIWS bursts remaining
################### MISSILE INFO
var NUM_MISSILES = 5; # total carried minus 1
var missile_name = "Volga-M";
var missile_brevity = "5Ya23";
var missile_max_distance = 36; #max distance of target in nm when it will fire
var missile_min_distance = 3.5; #minimum distance in nm when it will fire
var lockon_time = 12; #time in seconds it takes to lock on and get a firing solution on a target
var fire_minimum_interval = 7;# time since last track was initiated till a new can be initiated
var same_target_max_missiles = 2;# max number of missiles in air against same target
var isInEngagementEnvelope = func (target_radial_airspeed, target_ground_distance, target_relative_altitude) {
return 1;
}
var midflight = nil;
##########################################################################
######################## Common SAM code ###########################
##########################################################################
################### VARIOUS
setprop("sim/multiplay/generic/float[5]", 0);# launcher vert rotation
setprop("sim/multiplay/generic/float[6]", 0);# launcher horiz rotation
var start_time = systime();
var opfor_switch = "enemies/opfor-switch";
setprop(opfor_switch,0);
var friend_switch = "enemies/friend-switch";
setprop(friend_switch,0);
################### IFF
var target = {
new: func (callsign) {
var m = { parents: [target] };
m.callsign = callsign;
m.in_air = 0;
m.tracking = 0;
m.missiles = [];
return m;
},
};
var base = props.globals.getNode("/");
base.getNode("instrumentation/transponder/id-code",1).setIntValue(-9999);
base.getNode("instrumentation/transponder/transmitted-id",1).setIntValue(-9999);# transponder off
###################################################################
var targetsV2 = nil;
var buildTargetList = func {
# rather crappy code, but is not ran so often, so dont really matter.
if (getprop(opfor_switch) == 0 and getprop(friend_switch) == 0) {
for(var i = 1; i<=12;i+=1) {
# add new callsign to list
var sign = getprop("enemies/e"~i);
var tgt = lookup(sign);
if (tgt == nil) {
targetsV2.append(target.new(sign));
print("added callsign: "~sign);
}
}
}
var removeList = [];
foreach(tgt ; targetsV2.vector) {
# schedule removed callsigns to be removed
if (getprop(opfor_switch) == 0 and getprop(friend_switch) == 0) {
if (tgt.callsign != getprop("enemies/e1") and tgt.callsign != getprop("enemies/e2") and tgt.callsign != getprop("enemies/e3") and tgt.callsign != getprop("enemies/e4") and tgt.callsign != getprop("enemies/e5") and tgt.callsign != getprop("enemies/e6") and tgt.callsign != getprop("enemies/e7") and tgt.callsign != getprop("enemies/e8") and tgt.callsign != getprop("enemies/e9") and tgt.callsign != getprop("enemies/e10") and tgt.callsign != getprop("enemies/e11") and tgt.callsign != getprop("enemies/e12")) {
append(removeList, tgt);
print("will remove callsign: "~tgt.callsign);
}
}
}
foreach(tgt ; removeList) {
# remove callsigns
call(func {targetsV2.remove(tgt);}, nil, var err = []);
}
};
var lookup = func (sign) {
foreach (tgt ; targetsV2.vector) {
if (tgt.callsign == sign) {
return tgt;
}
}
if ( getprop(opfor_switch) == 1 and (left(sign, 5) != "OPFOR" and left(sign,5) != "opfor")) {
print("creating new target in: " ~ sign);
tgt = target.new(sign);
targetsV2.append(tgt);
return tgt;
}
if ( getprop(friend_switch) == 1 and ( left(sign, 5) == "OPFOR" or left(sign,5) == "opfor" )) {
print("creating new target in: " ~ sign);
tgt = target.new(sign);
targetsV2.append(tgt);
return tgt;
}
return nil;
}
var PRIO_NORM = 0;
var PRIO_HIGH = 1;
var PRIO_LOW = 2;
var PRIO_FAST = 3;
var PRIO_SLOW = 4;
var PRIO_CLOSE = 5;
var PRIO_FAR = 6;
################### MAIN LOOP
var scan = func() {
setprop("sim/multiplay/visibility-range-nm", 250);
buildTargetList();
if ( getprop("/carrier/sunk") == 1 or getprop("/carrier/disabled") == 1) {
return;
}
if (systime() - start_time < setupTime ) {
printf("Seconds till activation: %.1f", setupTime - (systime() - start_time));
setprop("sam/timeleft", setupTime - (systime() - start_time));
setprop("sam/missiles",(NUM_MISSILES+1-ACTIVE_MISSILE));
setprop("sam/bursts", ROUNDS);
setprop("sam/info", "Preparing launch system");
settimer(scan,radar_update_time);
if (launcher_tilt_time > 0) {
setprop("sim/multiplay/generic/float[5]", launcher_final_tilt_deg*math.max(0,(systime() - start_time)-(setupTime-launcher_tilt_time))/launcher_tilt_time);#raise the tubes in last 15 secs of activation
} else {
setprop("sim/multiplay/generic/float[5]", launcher_final_tilt_deg);
}
setprop("sim/multiplay/generic/float[6]", 0);
setprop("sim/multiplay/generic/string[6]", "");
setprop("/sim/multiplay/generic/int[2]", 1);
return;
}
setprop("sim/multiplay/generic/float[5]", launcher_final_tilt_deg);
#### ITERATE THROUGH MP LIST ####
var radarOn = 0;
var my_pos = geo.aircraft_position();
var radarAlt = my_pos.alt()+radar_elevation_above_terrain_m;
my_pos.set_alt(radarAlt);
var mvec = props.globals.getNode("/ai/models").getChildren("multiplayer");
var tvec = props.globals.getNode("/ai/models").getChildren("tanker");
var avec = props.globals.getNode("/ai/models").getChildren("aircraft");
if (mvec!=nil and tvec != nil) {
mvec = mvec ~ tvec;
}
if (mvec!=nil and avec != nil) {
mvec = mvec ~ avec;
}
var prio_vector = [];#0:node,1:trigger,2:prio value
foreach(var mp; mvec){
if (mp.getNode("valid") == nil or mp.getNode("valid").getValue() != 1) continue;
var prio = fire_control(mp, my_pos);
append(prio_vector, prio);
if (prio[3] == 1) {
radarOn = 1;#this target is within envelope, we turn on radar.
}
}
prio_vector = sort(prio_vector, func (a,b) {if (a[2]>b[2]){return -1;} elsif (a[2]<b[2]) {return 1;} else {return 0;}});
foreach(var mp; prio_vector) {
#### DO WE HAVE FIRING SOLUTION... ####
# is plane in range, do we still have missiles, and is a missile already inbound, and has it been 4 seconds since the last missile launch?
var trigger = mp[1];
#print("dist to target = " ~ dist_to_target);
var lu = lookup(mp[0].getNode("callsign").getValue());
if ( launch_in_progress == 0 and trigger == true and lu != nil and lu.in_air < same_target_max_missiles and !lu.tracking and ACTIVE_MISSILE <= NUM_MISSILES and ( systime() - missile_delay_time > fire_minimum_interval ) ) { #
#### ... FOR THE MISSILE ####
#print("callsign " ~ cs ~ " found at " ~ dist_to_target);
missile_delay_time = systime();
mp[0].getNode("unique",1).setValue(rand());
armament.contact = radar_logic.Contact.new(mp[0], AIR);
launch_in_progress = 1;
missile_launch(mp[0], systime(), my_pos);
} elsif ( ciws_installed and trigger == -1 and ROUNDS > 0 and ( systime() - ciws_delay_time > 1.0 ) and lu != nil) {
#### ... FOR THE CIWS ####
var contact = radar_logic.Contact.new(mp[0], AIR);
var cord = contact.get_Coord();
var dist_nm = my_pos.direct_distance_to(cord)*M2NM;
var probabilityOfBurstKill = 0.50;
if (mp[0].getNode("velocities/true-airspeed-kt").getValue() > 50) {
probabilityOfBurstKill = extrapolate(dist_nm, 0, ciws_domain_nm, ciws_chance, 0);
}
var hits = math.max(0,int(extrapolate(rand(), 0, probabilityOfBurstKill, ciws_burst_rounds, 3)));#3 is a kill approx
var target_bearing = my_pos.course_to(cord);
setprop("sim/multiplay/generic/float[0]", -(target_bearing-getprop("orientation/heading-deg")));#CIWS horiz (inverted)
setprop("sim/multiplay/generic/float[1]", vector.Math.getPitch(my_pos, cord));#CIWS vert
setprop("sim/multiplay/generic/bool[0]",1);settimer(func {setprop("sim/multiplay/generic/bool[0]",0);}, 1);# for sound
if (hits > 0) {
var msg = notifications.ArmamentNotification.new("mhit", 4, -1*(ciws_shell+1));
msg.RelativeAltitude = 0;
msg.Bearing = 0;
msg.Distance = hits;
msg.RemoteCallsign = mp[0].getNode("callsign").getValue();
notifications.hitBridgedTransmitter.NotifyAll(msg);
damage.damageLog.push("CIWS fired | rounds remaining: " ~ ROUNDS ~ " | hit on: " ~ mp[0].getNode("callsign").getValue());
}
print("CIWS fired | bursts remaining: " ~ ROUNDS ~ " | "~hits~" hits on: " ~ mp[0].getNode("callsign").getValue() ~ " @ "~ sprintf("%.1f",dist_nm) ~" nm");
ciws_delay_time = systime();
ROUNDS = ROUNDS - 1;
setprop("sam/bursts", ROUNDS);
if (ROUNDS == 0) {
print("Launcher out of shell ammo.");
settimer(autoreload, reload_time);
reloading = 1;
reload_starting = systime();
}
}
if (lu != nil and lu.tracking) {
radarOn = 1;
}
}
setprop("/sim/multiplay/generic/int[2]",!radarOn);
if (launcher_align_to_target and ACTIVE_MISSILE > NUM_MISSILES and systime()-missile_release_time > 2) {
# rotate launcher back to forward:
var tgt_dir = 0;
var cur_dir = getprop("sim/multiplay/generic/float[6]");
var move_dir = geo.normdeg180(tgt_dir-cur_dir);
var max_dir = radar_update_time*align_speed_dps*0.25;
move_dir = math.clamp(move_dir, -max_dir, max_dir);
setprop("sim/multiplay/generic/float[6]", cur_dir+move_dir);
}
if (launch_in_progress == 0) {
if (reloading) {
setprop("sam/info", "Reloading");
setprop("sam/timeleft", reload_time - (systime() - reload_starting));
} else {
setprop("sam/info", "");
setprop("sam/timeleft", 0);
}
clearSingleLock();
thread.lock(mutexLock);
semi_active_track = nil;
thread.unlock(mutexLock);
} else {
setprop("sam/timeleft", 0);
}
if (getprop(getprop("payload/armament/MP-alt-ft")) == 0.0) {
# reset 'Follow view' to look at launcher
setprop(getprop("payload/armament/MP-lat"),getprop("position/latitude-deg"));
setprop(getprop("payload/armament/MP-lon"),getprop("position/longitude-deg"));
setprop(getprop("payload/armament/MP-alt-ft"),getprop("position/altitude-ft"));
}
setprop("sam/missiles",(NUM_MISSILES+1-ACTIVE_MISSILE));
settimer(scan,radar_update_time);
}
var clearSingleLock = func () {
thread.lock(mutexLock);
if (semi_active_track == nil) {
setprop("sim/multiplay/generic/string[6]", "");
} else {
setprop("sim/multiplay/generic/string[6]", left(md5(semi_active_track), 4));
}
thread.unlock(mutexLock);
}
################## FIRE CONTROL
################## ALL AI LOGIC RELATED TO FIGURING OUT IF A TARGET SHOULD BE SHOT AT SHOULD GO HERE.
var fire_control = func(mp, my_pos) {
# gather some data about the target
if ( mp.getNode("valid").getValue() == false ) { return [mp,false,0,0]; }
var ufo_pos = geo.Coord.new().set_latlon(mp.getNode("position/latitude-deg").getValue(),mp.getNode("position/longitude-deg").getValue(),(mp.getNode("position/altitude-ft").getValue() * FT2M));
var target_distance = my_pos.direct_distance_to(ufo_pos);
var target_altitude = mp.getNode("position/altitude-ft").getValue();
# is this plane a friend or foe?
var lu = lookup(mp.getNode("callsign").getValue());
if ( lu == nil ) { return [mp,false,0,0]; }
var target_airspeed = mp.getNode("velocities/true-airspeed-kt").getValue();
var target_ground_distance = my_pos.distance_to(ufo_pos);
var target_heading = mp.getNode("orientation/true-heading-deg").getValue();
var relative_bearing = math.abs(geo.normdeg180(ufo_pos.course_to(my_pos) - target_heading));
var target_relative_altitude = target_altitude - my_pos.alt()*M2FT;
var target_radial_airspeed = math.abs(math.abs(((relative_bearing / 90 ) - 1) * target_airspeed));#200kt against us = 200kt, 200kt at angle of us = 0kt, 200kt away from us = 200kt
var target_relative_pitch = vector.Math.getPitch(my_pos, ufo_pos);
# can the radar see it?
var data_link_match = false;
# foreach(var cx; gci.data_receive_callsigns) {
# if (cx[0] == callsign) {
# data_link_match = true;
# #print('tgt confirmed via datalink');
# }
# }
var visible = radar_logic.isNotBehindTerrain(mp);
if (ciws_installed and ROUNDS > 0 and target_distance*M2NM < ciws_domain_nm) {
#CIWS
var radarSeeTarget = 1;
if ( data_link_match == false ) {
if ( visible[0] == false ) {radarSeeTarget = 0 }
if ( target_relative_pitch < radar_lowest_pitch ) { radarSeeTarget = 0 } #
if ( target_distance*M2NM > 1.0 and visible[1] and math.abs(target_radial_airspeed) < 20 ) {radarSeeTarget = 0 } # i.e. notching with terrain behind
}
if (radarSeeTarget and rand() > target_distance*M2NM / ciws_domain_nm) {
var score = 0;
var priority = getprop("priority");
if (priority==PRIO_NORM) {
# nop
} elsif (priority==PRIO_HIGH) {
score = target_altitude;
} elsif (priority==PRIO_LOW) {
score = -target_altitude;
} elsif (priority==PRIO_FAST) {
score = target_radial_airspeed;
} elsif (priority==PRIO_SLOW) {
score = -target_radial_airspeed;
} elsif (priority==PRIO_CLOSE) {
score = -target_distance;
} elsif (priority==PRIO_FAR) {
score = target_distance;
}
return [mp,-1,score,1];
}
}
if ( data_link_match == false ) {
if (target_airspeed < 60) {return [mp,false,0,0];}
if ( visible[0] == false ) { return [mp,false,0,0]; }
if ( target_relative_pitch < radar_lowest_pitch ) { return [mp,false,0,0]; } #
if ( visible[1] and math.abs(target_radial_airspeed) < 20 ) { return [mp,false,0,0]; } # i.e. notching, landed aircraft
}
if ( target_distance * M2NM > missile_max_distance ) { return [mp,false,0,0]; }
# is the plane within the engagement envelope?
# the numbers after target_radial_airspeed are ( offset_of_engagement_envelope / speed_to_apply_that_offset )
# larger offset means it wont fire until the plane is closer.
# for visualization: https://www.desmos.com/calculator/gw570fa9km
if (!isInEngagementEnvelope(target_radial_airspeed, target_ground_distance, target_relative_altitude) ) { return [mp,false,0,0]; }
var the_dice = rand();
if ( the_dice > 0.20 ) {
var score = 0;
var priority = getprop("priority");
if (priority==PRIO_NORM) {
# nop
} elsif (priority==PRIO_HIGH) {
score = target_altitude;
} elsif (priority==PRIO_LOW) {
score = -target_altitude;
} elsif (priority==PRIO_FAST) {
score = target_radial_airspeed;
} elsif (priority==PRIO_SLOW) {
score = -target_radial_airspeed;
} elsif (priority==PRIO_CLOSE) {
score = -target_distance;
} elsif (priority==PRIO_FAR) {
score = target_distance;
}
return [mp,true,score,1];
} else {
return [mp,false,0,1];
}
}
################### MISSILE CONTROL
### missile reload
var reload = func(force = 1) {
#figure out how many to add
if (ACTIVE_MISSILE > NUM_MISSILES or force == 1) {
for ( var i = 0; i <= NUM_MISSILES; i = i + 1 ) {
if (armament.AIM.new(i,missile_name,missile_brevity, midflight) != -1) {
#if statement just in case reload was called before all missiles were fired. Cause avoid calling search() on same missile twice.
armament.AIM.active[i].start();
}
}
ACTIVE_MISSILE = 0;setprop("active", 0);
print("Launcher reloaded with "~(NUM_MISSILES+1)~" missiles.");
setprop("/sim/messages/copilot", "Launcher reloaded with "~(NUM_MISSILES+1)~" missiles.");
}
if (ROUNDS == 0 or force == 1) {
ROUNDS = ROUNDS_init;
print("Reloaded with "~(ROUNDS)~" bursts.");
}
setprop("sam/missiles",(NUM_MISSILES+1-ACTIVE_MISSILE));
setprop("sam/bursts", ROUNDS);
reloading = 0;
}
var autoreload = func() {
if (reloading) {
reloading = 0;
if (ACTIVE_MISSILE > NUM_MISSILES or ROUNDS == 0) {
reload(0);
print("Auto reloading completed.")
}
} else {
print("Auto reloading cancelled due to manual reload.")
}
}
### missile launch
var missile_launch = func(mp, launchtime, my_pos) {
if ( getprop("/carrier/sunk") == 1 or getprop("/carrier/disabled") == 1) {
var lu = lookup(mp.getNode("callsign").getValue());
if (lu != nil) {
lu.tracking = 0;
}
launch_in_progress = 0;
clearSingleLock();
return;
}
var ufo_pos = geo.Coord.new().set_latlon(mp.getNode("position/latitude-deg").getValue(),mp.getNode("position/longitude-deg").getValue(),(mp.getNode("position/altitude-ft").getValue() * 0.3048));
var target_bearing = my_pos.course_to(ufo_pos);
var info = mp.getNode("callsign").getValue();
var lu = lookup(mp.getNode("callsign").getValue());
if (getprop("sam/timeleft") != 0) {
launch_in_progress = 0;
if (lu != nil) {
lu.tracking = 0;
}
return;
} elsif ( armament.AIM.active[ACTIVE_MISSILE].status == 1 and systime() - launchtime > lockon_time and radar_logic.isNotBehindTerrain(mp)[0] == 1 ) {
var theMissile = armament.AIM.active[ACTIVE_MISSILE];
var brevity = theMissile.brevity;
#armament.defeatSpamFilter(brevity ~ " at: " ~ mp.getNode("callsign").getValue());
damage.damageLog.push(brevity ~ " at: " ~ mp.getNode("callsign").getValue());
if (launcher_align_to_target) {
setprop("sim/multiplay/generic/float[6]", target_bearing-getprop("orientation/heading-deg"));
theMissile.rail_head_deg = getprop("sim/multiplay/generic/float[6]");
}
if (sam_align_to_target) {
setprop("/orientation/heading-deg",target_bearing);
}
theMissile.release();
missile_release_time = systime();
ACTIVE_MISSILE = ACTIVE_MISSILE + 1;setprop("active", ACTIVE_MISSILE);
print("Fired "~missile_name~" #" ~ ACTIVE_MISSILE ~ " at: " ~ mp.getNode("callsign").getValue());
setprop("/sim/messages/copilot", "Launch at "~mp.getNode("callsign").getValue());
if (ACTIVE_MISSILE > NUM_MISSILES) {
setprop("/sim/messages/copilot", "Launcher out of ammo");
print("Launcher out of missile ammo.");
settimer(autoreload, reload_time);
reloading = 1;
reload_starting = systime();
}
if (lu != nil) {
append(lu.missiles, theMissile);
lu.in_air += 1;
lu.tracking = 0;
}
launch_in_progress = 0;
info = info~" (launched)";
setprop("sam/info", info);
setprop("sam/missiles",(NUM_MISSILES+1-ACTIVE_MISSILE));
clearSingleLock();
return;
} elsif ((systime() - launchtime) > (lockon_time*2) or radar_logic.isNotBehindTerrain(mp)[0] == 0) {
# launch cancelled so it dont forever goes in this loop and dont allow for other firings.
if (lu != nil) {
lu.tracking = 0;
}
setprop("/sim/messages/copilot", "SAM Canceled launch at "~mp.getNode("callsign").getValue());
launch_in_progress = 0;
info = info~" (cancelled)";
setprop("sam/info", info);
setprop("sam/missiles",(NUM_MISSILES+1-ACTIVE_MISSILE));
clearSingleLock();
return;
} else {
info = info~" (tracking)";
if (systime()-missile_release_time > 1.5) {
if (launcher_align_to_target) {
# now smoothly rotate launcher:
var tgt_dir = target_bearing-getprop("orientation/heading-deg");
var cur_dir = getprop("sim/multiplay/generic/float[6]");
var move_dir = geo.normdeg180(tgt_dir-cur_dir);
var max_dir = launch_update_time*align_speed_dps;
move_dir = math.clamp(move_dir, -max_dir, max_dir);
setprop("sim/multiplay/generic/float[6]", cur_dir+move_dir);
}
if (sam_align_to_target) {
var tgt_dir = target_bearing;
var cur_dir = getprop("orientation/heading-deg");
var move_dir = geo.normdeg180(tgt_dir-cur_dir);
var max_dir = launch_update_time*align_speed_dps;
move_dir = math.clamp(move_dir, -max_dir, max_dir);
setprop("orientation/heading-deg", cur_dir+move_dir);
}
}
setprop("sam/info", info);
if (mp.getNode("callsign") != nil and mp.getNode("callsign").getValue() != nil and mp.getNode("callsign").getValue() != "") {
setprop("sim/multiplay/generic/string[6]", left(md5(mp.getNode("callsign").getValue()), 4));
} else {
clearSingleLock();
}
if (lu != nil) {
lu.tracking = 1;
}
}
settimer( func { missile_launch(mp, launchtime, my_pos); },launch_update_time);
}
### missile set launched to false for target
var missile_listener = func {
foreach(var tgt ; targetsV2.vector) {
var missilesNew = [];
foreach(var missile ; tgt.missiles) {
if (missile != nil) {
if (missile.deleted) {
tgt.in_air -= 1;
} else {
append(missilesNew, missile);
}
}
}
tgt.missiles = missilesNew;
}
settimer(missile_listener, 2.5);
}
var extrapolate = func (x, x1, x2, y1, y2) {
return y1 + ((x - x1) / (x2 - x1)) * (y2 - y1);
}
################### MISC
var main_init_listener = setlistener("sim/signals/fdm-initialized", func {
print("fdm-initialized");
targetsV2 = std.Vector.new();# OO vector (to make removing item easier)
reload();
scan();
aircraft.data.save(0.5);# save the target list every 30 seconds
removelistener(main_init_listener);
setlistener(opfor_switch, func {
targetsV2 = std.Vector.new();# OO vector (to make removing item easier)
}, 0, 0);
setlistener(friend_switch, func {
targetsV2 = std.Vector.new();# OO vector (to make removing item easier)
}, 0, 0);
missile_listener();
setprop(getprop("payload/armament/MP-lat"),getprop("position/latitude-deg"));
setprop(getprop("payload/armament/MP-lon"),getprop("position/longitude-deg"));
setprop(getprop("payload/armament/MP-alt-ft"),getprop("position/altitude-ft"));
view.setViewByIndex(200);#follow view
}, 0, 0);
setlistener("sim/signals/reinit", func {
print("reinit");
start_time = systime();
});

File diff suppressed because it is too large Load Diff

423
S-75/Nasal/radar-logic.nas Normal file
View File

@@ -0,0 +1,423 @@
var clamp = func(v, min, max) { v < min ? min : v > max ? max : v }
var encode3bits = func(first, second, third) {
var integer = first;
integer = integer + 2 * second;
integer = integer + 4 * third;
return integer;
}
var versionString = getprop("sim/version/flightgear");
var version = split(".", versionString);
var major = num(version[0]);
var minor = num(version[1]);
var pica = num(version[2]);
var pickingMethod = 0;
if ((major == 2017 and minor == 2 and pica >= 1) or (major == 2017 and minor > 2) or major > 2017) {
pickingMethod = 1;
}
var FALSE = 0;
var TRUE = 1;
var AIR = 0;
var MARINE = 1;
var SURFACE = 2;
var ORDNANCE = 3;
var Contact = {
# For now only used in guided missiles, to make it compatible with Mirage 2000-5.
new: func(c, class) {
var obj = { parents : [Contact]};
#debug.benchmark("radar process1", func {
obj.rdrProp = c.getNode("radar");
obj.oriProp = c.getNode("orientation");
obj.velProp = c.getNode("velocities");
obj.posProp = c.getNode("position");
obj.heading = obj.oriProp.getNode("true-heading-deg");
#});
#debug.benchmark("radar process2", func {
obj.alt = obj.posProp.getNode("altitude-ft");
obj.lat = obj.posProp.getNode("latitude-deg");
obj.lon = obj.posProp.getNode("longitude-deg");
#});
#debug.benchmark("radar process3", func {
#As it is a geo.Coord object, we have to update lat/lon/alt ->and alt is in meters
obj.coord = geo.Coord.new();
obj.coord.set_latlon(obj.lat.getValue(), obj.lon.getValue(), obj.alt.getValue() * FT2M);
#});
#debug.benchmark("radar process4", func {
obj.pitch = obj.oriProp.getNode("pitch-deg");
obj.roll = obj.oriProp.getNode("roll-deg");
obj.speed = obj.velProp.getNode("true-airspeed-kt");
obj.vSpeed = obj.velProp.getNode("vertical-speed-fps");
obj.callsign = c.getNode("callsign", 1);
obj.shorter = c.getNode("model-shorter");
obj.orig_callsign = obj.callsign.getValue();
obj.name = c.getNode("name");
obj.sign = c.getNode("sign",1);
obj.valid = c.getNode("valid");
obj.painted = c.getNode("painted");
obj.unique = c.getNode("unique");
obj.validTree = 0;
#});
#debug.benchmark("radar process5", func {
#obj.transponderID = c.getNode("instrumentation/transponder/transmitted-id");
#});
#debug.benchmark("radar process6", func {
obj.acType = c.getNode("sim/model/ac-type");
obj.type = c.getName();
obj.index = c.getIndex();
obj.string = "ai/models/" ~ obj.type ~ "[" ~ obj.index ~ "]";
obj.shortString = obj.type ~ "[" ~ obj.index ~ "]";
#});
#debug.benchmark("radar process7", func {
obj.range = obj.rdrProp.getNode("range-nm");
obj.bearing = obj.rdrProp.getNode("bearing-deg");
obj.elevation = obj.rdrProp.getNode("elevation-deg");
obj.ubody = obj.rdrProp.getNode("velocities/uBody-fps");
obj.vbody = obj.rdrProp.getNode("velocities/vBody-fps");
obj.wbody = obj.rdrProp.getNode("velocities/wBody-fps");
#});
obj.deviation = nil;
obj.node = c;
obj.class = class;
obj.polar = [0,0];
obj.cartesian = [0,0];
return obj;
},
get_uBody: func {
var body = nil;
if (me.ubody != nil) {
body = me.ubody.getValue();
}
if(body == nil) {
body = me.get_Speed()*KT2FPS;
}
return body;
},
get_vBody: func {
var body = nil;
if (me.ubody != nil) {
body = me.vbody.getValue();
}
if(body == nil) {
body = 0;
}
return body;
},
get_wBody: func {
var body = nil;
if (me.ubody != nil) {
body = me.wbody.getValue();
}
if(body == nil) {
body = 0;
}
return body;
},
isValid: func () {
var valid = me.valid.getValue();
if (valid == nil) {
valid = FALSE;
}
if (me.callsign.getValue() != me.orig_callsign) {
valid = FALSE;
}
return valid;
},
isPainted: func () {
if (getprop("/carrier/sunk") == 1) {
return 0;
}
return isNotBehindTerrain(me.node)[0];
},
getUnique: func () {
if (me.unique == nil) {
me.unique = me.node.getNode("unique");
}
if (me.unique == nil) {
return nil;
}
var u = me.unique.getValue();
return u;
},
getElevation: func() {
var e = 0;
e = me.elevation.getValue();
if(e == nil or e == 0) {
# AI/MP has no radar properties
var self = geo.aircraft_position();
self.set_alt(self.alt()+fire_control.radar_elevation_above_terrain_m);
me.get_Coord();
var angleInv = clamp(self.distance_to(me.coord)/self.direct_distance_to(me.coord), -1, 1);
e = (self.alt()>me.coord.alt()?-1:1)*math.acos(angleInv)*R2D;
}
return e;
},
getNode: func () {
return me.node;
},
getFlareNode: func () {
return me.node.getNode("rotors/main/blade[3]/flap-deg");
},
getChaffNode: func () {
return me.node.getNode("rotors/main/blade[3]/position-deg");
},
setPolar: func(dist, angle) {
me.polar = [dist,angle];
},
setCartesian: func(x, y) {
me.cartesian = [x,y];
},
remove: func(){
if(me.validTree != 0){
me.validTree.setValue(0);
}
},
get_Coord: func(){
me.coord.set_latlon(me.lat.getValue(), me.lon.getValue(), me.alt.getValue() * FT2M);
var TgTCoord = geo.Coord.new(me.coord);
return TgTCoord;
},
get_Callsign: func(){
var n = me.callsign.getValue();
if(n != "" and n != nil) {
return n;
}
if (me.name == nil) {
me.name = me.getNode().getNode("name");
}
if (me.name == nil) {
n = "";
} else {
n = me.name.getValue();
}
if(n != "" and n != nil) {
return n;
}
n = me.sign.getValue();
if(n != "" and n != nil) {
return n;
}
return "UFO";
},
get_model: func(){
var n = "";
if (me.shorter == nil) {
me.shorter = me.node.getNode("model-shorter");
}
if (me.shorter != nil) {
n = me.shorter.getValue();
}
if(n != "" and n != nil) {
return n;
}
n = me.sign.getValue();
if(n != "" and n != nil) {
return n;
}
if (me.name == nil) {
me.name = me.getNode().getNode("name");
}
if (me.name == nil) {
n = "";
} else {
n = me.name.getValue();
}
if(n != "" and n != nil) {
return n;
}
return me.get_Callsign();
},
get_Speed: func(){
# return true airspeed
var n = me.speed.getValue();
return n;
},
get_Longitude: func(){
var n = me.lon.getValue();
return n;
},
get_Latitude: func(){
var n = me.lat.getValue();
return n;
},
get_Pitch: func(){
var n = me.pitch.getValue();
return n;
},
isVirtual: func(){
return 0;
},
get_Roll: func(){
var n = me.roll.getValue();
return n;
},
get_heading : func(){
var n = me.heading.getValue();
if(n == nil)
{
n = 0;
}
return n;
},
get_bearing: func(){
var n = 0;
n = me.bearing.getValue();
if(n == nil or n == 0) {
# AI/MP has no radar properties
n = me.get_bearing_from_Coord(geo.aircraft_position());
}
return n;
},
get_bearing_from_Coord: func(MyAircraftCoord){
me.get_Coord();
var myBearing = 0;
if(me.coord.is_defined()) {
myBearing = MyAircraftCoord.course_to(me.coord);
}
return myBearing;
},
get_reciprocal_bearing: func(){
return geo.normdeg(me.get_bearing() + 180);
},
get_deviation: func(true_heading_ref, coord){
me.deviation = - deviation_normdeg(true_heading_ref, me.get_bearing_from_Coord(coord));
return me.deviation;
},
get_altitude: func(){
#Return Alt in feet
return me.alt.getValue();
},
get_Elevation_from_Coord: func(MyAircraftCoord) {
me.get_Coord();
var value = (me.coord.alt() - MyAircraftCoord.alt()) / me.coord.direct_distance_to(MyAircraftCoord);
if (math.abs(value) > 1) {
# warning this else will fail if logged in as observer and see aircraft on other side of globe
return 0;
}
var myPitch = math.asin(value) * R2D;
return myPitch;
},
get_total_elevation_from_Coord: func(own_pitch, MyAircraftCoord){
var myTotalElevation = - deviation_normdeg(own_pitch, me.get_Elevation_from_Coord(MyAircraftCoord));
return myTotalElevation;
},
get_total_elevation: func(own_pitch) {
me.deviation = - deviation_normdeg(own_pitch, me.getElevation());
return me.deviation;
},
get_range: func() {
var r = 0;
if(me.range == nil or me.range.getValue() == nil or me.range.getValue() == 0) {
# AI/MP has no radar properties
me.get_Coord();
r = me.coord.direct_distance_to(geo.aircraft_position()) * M2NM;
} else {
r = me.range.getValue();
}
return r;
},
get_range_from_Coord: func(MyAircraftCoord) {
var myCoord = me.get_Coord();
var myDistance = 0;
if(myCoord.is_defined()) {
myDistance = MyAircraftCoord.direct_distance_to(myCoord) * M2NM;
}
return myDistance;
},
get_type: func () {
return me.class;
},
get_cartesian: func() {
return me.cartesian;
},
get_polar: func() {
return me.polar;
},
};
var isNotBehindTerrain = func( mp ) {
var pos = mp.getNode("position");
var alt = pos.getNode("altitude-ft").getValue();
var lat = pos.getNode("latitude-deg").getValue();
var lon = pos.getNode("longitude-deg").getValue();
if(alt == nil or lat == nil or lon == nil) {
return [0,0]; # invisible and not in front of terrain
}
var aircraftPos = geo.Coord.new().set_latlon(lat, lon, alt*FT2M);
var myPos = geo.aircraft_position();
myPos.set_alt(myPos.alt()+fire_control.radar_elevation_above_terrain_m);
var target_distance = myPos.direct_distance_to(aircraftPos);
call(func {
if (target_distance*0.001 > 3.57*(math.sqrt(myPos.alt())+math.sqrt(alt*FT2M))) {
# behind earth curvature
#print("behind earth curvature");
return [0,0]; # invisible and not in front of terrain
}
},nil,nil,var err =[]);
var xyz = {"x":myPos.x(), "y":myPos.y(), "z":myPos.z()};
var dir = {"x":aircraftPos.x()-myPos.x(), "y":aircraftPos.y()-myPos.y(), "z":aircraftPos.z()-myPos.z()};
# Check for terrain between own aircraft and other:
v = get_cart_ground_intersection(xyz, dir);
if (v == nil) {
return [1,0]; # visible and not in front of terrain
#printf("No terrain, planes has clear view of each other");
} else {
var terrain = geo.Coord.new();
terrain.set_latlon(v.lat, v.lon, v.elevation);
var maxDist = myPos.direct_distance_to(aircraftPos);
var terrainDist = myPos.direct_distance_to(terrain);
if (terrainDist < maxDist-1) {
#printf("terrain found between me and aircraft %.1f meter away.", terrainDist);
return [0,0]; # visible and not in front of terrain
} else {
#print("The planes has clear view of each other");
return [1,1]; # visible and in front of terrain
}
}
}

View File

@@ -3,9 +3,9 @@
<PropertyList>
<sim>
<author>pinto, Leto</author>
<author>pinto, Leto, J Maverick 16</author>
<description>S-75</description>
<long-description>S-75 (SA-2) is a Soviet-designed, high-altitude surface to air missile system.</long-description>
<long-description>S-75 Volga-M (SA-2) is a Soviet-designed, high-altitude surface to air missile system.</long-description>
<status>alpha</status>
<aircraft-version>0.1</aircraft-version>
@@ -104,6 +104,7 @@
<int n="0" type="int">0</int>
<int n="2" type="int">0</int>
<string n="6" type="string"></string><!-- string 6 used by radar lock RWR warning -->
<string n="7" type="string"></string><!-- datalink -->
</generic>
</multiplay>
@@ -112,7 +113,57 @@
<menu n="100">
<label>S-75</label>
<enabled type="bool">true</enabled>
<item>
<label>Reload</label>
<binding>
<command>nasal</command>
<script>
fire_control.reload();
</script>
</binding>
</item>
<item>
<label>Targets</label>
<name>enemies</name>
<binding>
<command>dialog-show</command>
<dialog-name>enemies</dialog-name>
</binding>
</item>
<item>
<label>Priority</label>
<name>enemies</name>
<binding>
<command>dialog-show</command>
<dialog-name>priority</dialog-name>
</binding>
</item>
<item>
<label>Relocate to cursor last click</label>
<binding>
<command>nasal</command>
<script>
setprop("position/latitude-deg",getprop("sim/input/click/latitude-deg"));
setprop("position/longitude-deg",getprop("sim/input/click/longitude-deg"));
setprop("position/altitude-ft",getprop("sim/input/click/elevation-ft"));
var h = geo.elevation(getprop("sim/input/click/latitude-deg"),getprop("sim/input/click/longitude-deg"));
if (h!=nil)
setprop("position/altitude-ft",h*M2FT+0.030);
fire_control.start_time = systime();
</script>
</binding>
</item>
<item>
<label>Print log to console</label>
<binding>
<command>nasal</command>
<script>
setprop("payload/armament/msg",0);
damage.printDamageLog();
setprop("payload/armament/msg",1);
</script>
</binding>
</item>
<item>
<label>Event Log</label>
<binding>
@@ -141,6 +192,53 @@
</aircraft-data>
</sim>
<controls>
<armament>
<station n="1">
<offsets>
<x-m type="double"> 25</x-m>
<y-m type="double"> -50</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
<station n="2">
<offsets>
<x-m type="double"> -25</x-m>
<y-m type="double"> -50</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
<station n="3">
<offsets>
<x-m type="double"> -50</x-m>
<y-m type="double"> 0</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
<station n="4">
<offsets>
<x-m type="double"> -25</x-m>
<y-m type="double"> 50</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
<station n="5">
<offsets>
<x-m type="double"> 25</x-m>
<y-m type="double"> 50</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
<station n="6">
<offsets>
<x-m type="double"> 50</x-m>
<y-m type="double"> 0</y-m>
<z-m type="double"> 3.4</z-m>
</offsets>
</station>
</armament>
</controls>
<payload>
<armament>
@@ -166,7 +264,48 @@
<MAW-active type="bool">false</MAW-active>
<spike type="bool">false</spike>
<!-- speed: Mach 4.5 length: 10.60m -->
<volga-m>
<type-id type="int">65</type-id>
<short-name type="string">5Ya23</short-name>
<long-name type="string">Volga-M</long-name>
<vol-search type="double">0.00</vol-search>
<vol-track type="double">0.00</vol-track>
<guidance type="string">semi-radar</guidance>
<navigation type="string">PN1010</navigation> <!-- horizontal APN, vertical aim 5 degrees above for 6 seconds -->
<max-fire-range-nm type="int">36</max-fire-range-nm> <!-- -->
<FCS-field-deg type="int">360</FCS-field-deg>
<seeker-field-deg type="int">360</seeker-field-deg>
<weight-warhead-lbs>414</weight-warhead-lbs> <!-- -->
<min-fire-range-nm type="double">3.5</min-fire-range-nm> <!-- authentic -->
<rail-length-m type="double">10.60</rail-length-m> <!-- authentic length-->
<stage-1-duration-sec type="double">4</stage-1-duration-sec>
<weight-launch-lbs>5340</weight-launch-lbs> <!-- -->
<drag-coeff type="double">0.20</drag-coeff> <!-- was 0.40 in older versions -->
<thrust-lbf-stage-1 type="double">110000</thrust-lbf-stage-1> <!-- source -->
<rail type="bool">true</rail> <!-- -->
<rail-point-forward type="bool">false</rail-point-forward>
<cross-section-sqft type="double">4.14243818</cross-section-sqft> <!-- authentic (0.7m diameter) -->
<class type="string">A</class>
<fire-msg>Bird away</fire-msg>
<telemetry type="bool">true</telemetry>
<proportionality-constant type="double">3</proportionality-constant>
<!-- -->
<max-g type="int">19</max-g> <!-- wikipedia -->
<thrust-lbf-stage-2 type="double"> 20000</thrust-lbf-stage-2> <!-- 6834 according to source, but is too low for 5Ya23 -->
<stage-2-duration-sec type="double">15</stage-2-duration-sec><!-- -->
<weight-fuel-lbm>2750</weight-fuel-lbm> <!-- -->
<arming-time-sec type="double">1</arming-time-sec>
<min-speed-for-guiding-mach type="double">0.65</min-speed-for-guiding-mach>
<self-destruct-time-sec type="double">60</self-destruct-time-sec>
<loft-altitude type="int">0</loft-altitude>
<max-report-distance type="double">200</max-report-distance> <!-- -->
<rail-pitch-deg type="double">35</rail-pitch-deg> <!-- matching mount -->
<ready-time type="int">1</ready-time>
<FCS-at-origin type="bool">false</FCS-at-origin>
<FCS-x type="double">0</FCS-x>
<FCS-y type="double">0</FCS-y>
<FCS-z type="double">25</FCS-z>
</volga-m>
</armament>
</payload>
@@ -200,18 +339,18 @@
</sam>
<enemies>
<e1 userarchive="y" type="string">Leto</e1>
<e2 userarchive="y" type="string">swamp</e2>
<e3 userarchive="y" type="string">pinto</e3>
<e4 userarchive="y" type="string">fb237</e4>
<e5 userarchive="y" type="string">Wilco-1</e5>
<e6 userarchive="y" type="string">Kokos</e6>
<e7 userarchive="y" type="string">J-Mav16</e7>
<e8 userarchive="y" type="string">S</e8>
<e9 userarchive="y" type="string">Raider1</e9>
<e10 userarchive="y" type="string">Slobb</e10>
<e11 userarchive="y" type="string">5H1N0B1</e11>
<e12 userarchive="y" type="string">SNOWY1</e12>
<e1 userarchive="y" type="string">target1</e1>
<e2 userarchive="y" type="string">target2</e2>
<e3 userarchive="y" type="string">target3</e3>
<e4 userarchive="y" type="string">target4</e4>
<e5 userarchive="y" type="string">target5</e5>
<e6 userarchive="y" type="string">target6</e6>
<e7 userarchive="y" type="string">target7</e7>
<e8 userarchive="y" type="string">target8</e8>
<e9 userarchive="y" type="string">target9</e9>
<e10 userarchive="y" type="string">targetA</e10>
<e11 userarchive="y" type="string">targetB</e11>
<e12 userarchive="y" type="string">targetC</e12>
</enemies>
<priority type="int">1</priority>

25
S-75/Sounds/sound.xml Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<fx>
<launch>
<name>missile</name>
<path>Aircraft/S-75/Sounds/launch.wav</path>
<mode>once</mode>
<condition>
<property>payload/armament/volga-m/sound-fire-on-off</property>
</condition>
<reference-dist>50</reference-dist>
<max-dist>15000</max-dist>
<position>
<x> 0.01 </x>
<y> 0.01 </y>
<z> 0.01 </z>
</position>
<volume>
<factor>1</factor>
<max>1</max>
</volume>
</launch>
</fx>
</PropertyList>

View File

@@ -0,0 +1,348 @@
<?xml version="1.0"?>
<PropertyList>
<name>enemies</name>
<modal>false</modal>
<layout>vbox</layout>
<draggable>true</draggable>
<resizable>true</resizable>
<width>250</width>
<height>550</height>
<group>
<layout>hbox</layout>
<empty><stretch>1</stretch></empty>
<text>
<label>Targets</label>
</text>
<empty><stretch>1</stretch></empty>
<button>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<legend></legend>
<default>1</default>
<keynum>27</keynum>
<border>2</border>
<binding>
<command>dialog-close</command>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
</group>
<text>
<label>Callsigns:</label>
<height>25</height>
</text>
<input>
<width>250</width>
<height>25</height>
<label>1</label>
<property>enemies/e1</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>2</label>
<property>enemies/e2</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>3</label>
<property>enemies/e3</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>4</label>
<property>enemies/e4</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>5</label>
<property>enemies/e5</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>6</label>
<property>enemies/e6</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>7</label>
<property>enemies/e7</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>8</label>
<property>enemies/e8</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>9</label>
<property>enemies/e9</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>10</label>
<property>enemies/e10</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>11</label>
<property>enemies/e11</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<input>
<width>250</width>
<height>25</height>
<label>12</label>
<property>enemies/e12</property>
<live>true</live>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<color>
<red>1</red>
<green>0.5</green>
<blue>0.5</blue>
</color>
<enable>
<not>
<property>enemies/opfor-switch</property>
</not>
<not>
<property>enemies/friend-switch</property>
</not>
</enable>
</input>
<checkbox>
<width>12</width>
<height>12</height>
<property>/enemies/opfor-switch</property>
<label>Target all non-OPFOR</label>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<width>12</width>
<height>12</height>
<property>/enemies/friend-switch</property>
<label>Target all OPFOR</label>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</PropertyList>

148
S-75/gui/dialogs/prio.xml Normal file
View File

@@ -0,0 +1,148 @@
<?xml version="1.0"?>
<PropertyList>
<name>priority</name>
<modal>false</modal>
<layout>vbox</layout>
<draggable>true</draggable>
<resizable>false</resizable>
<width>125</width>
<height>200</height>
<group>
<empty><stretch>1</stretch></empty>
<layout>hbox</layout>
<text>
<label>Priority</label>
</text>
<empty><stretch>1</stretch></empty>
<button>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<legend></legend>
<default>1</default>
<keynum>27</keynum>
<border>2</border>
<binding>
<command>dialog-close</command>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
</group>
<group>
<layout>table</layout>
<text>
<label>Random</label>
<halign>right</halign>
<row>0</row>
<col>0</col>
</text>
<radio>
<row>0</row>
<col>1</col>
<property>priority0</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",0);setprop("priority0",1);setprop("priority6",0);setprop("priority1",0);setprop("priority2",0);setprop("priority3",0);setprop("priority4",0);setprop("priority5",0);</script>
</binding>
</radio>
<text>
<label>Highest</label>
<halign>right</halign>
<row>1</row>
<col>0</col>
</text>
<radio>
<row>1</row>
<col>1</col>
<property>priority1</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",1);setprop("priority1",1);setprop("priority0",0);setprop("priority6",0);setprop("priority2",0);setprop("priority3",0);setprop("priority4",0);setprop("priority5",0);</script>
</binding>
</radio>
<text>
<label>Lowest</label>
<halign>right</halign>
<row>2</row>
<col>0</col>
</text>
<radio>
<row>2</row>
<col>1</col>
<property>priority2</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",2);setprop("priority2",1);setprop("priority0",0);setprop("priority1",0);setprop("priority6",0);setprop("priority3",0);setprop("priority4",0);setprop("priority5",0);</script>
</binding>
</radio>
<text>
<label>Fastest</label>
<halign>right</halign>
<row>3</row>
<col>0</col>
</text>
<radio>
<row>3</row>
<col>1</col>
<property>priority3</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",3);setprop("priority3",1);setprop("priority0",0);setprop("priority1",0);setprop("priority2",0);setprop("priority6",0);setprop("priority4",0);setprop("priority5",0);</script>
</binding>
</radio>
<text>
<label>Slowest</label>
<halign>right</halign>
<row>4</row>
<col>0</col>
</text>
<radio>
<row>4</row>
<col>1</col>
<property>priority4</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",4);setprop("priority4",1);setprop("priority0",0);setprop("priority1",0);setprop("priority2",0);setprop("priority3",0);setprop("priority6",0);setprop("priority5",0);</script>
</binding>
</radio>
<text>
<label>Closest</label>
<halign>right</halign>
<row>5</row>
<col>0</col>
</text>
<radio>
<row>5</row>
<col>1</col>
<property>priority5</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",5);setprop("priority5",1);setprop("priority0",0);setprop("priority1",0);setprop("priority2",0);setprop("priority3",0);setprop("priority4",0);setprop("priority6",0);</script>
</binding>
</radio>
<text>
<label>Farthest</label>
<halign>right</halign>
<row>6</row>
<col>0</col>
</text>
<radio>
<row>6</row>
<col>1</col>
<property>priority6</property>
<live>true</live>
<binding>
<command>nasal</command>
<script>setprop("priority",6);setprop("priority6",1);setprop("priority0",0);setprop("priority1",0);setprop("priority2",0);setprop("priority3",0);setprop("priority4",0);setprop("priority5",0);</script>
</binding>
</radio>
</group>
</PropertyList>