1
0
Fork 0

Merge branch 'next' into canvas-livery

This commit is contained in:
fly 2021-07-30 20:27:56 +00:00
commit dd1d8c4ad7
166 changed files with 615248 additions and 1136314 deletions

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="223-main.xml">
<texture-path>Textures/Delta</texture-path>
</PropertyList>

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="717-main.xml">
<texture-path>Textures/Delta</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

After

Width:  |  Height:  |  Size: 87 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="73J-main.xml">
<texture-path>Textures/CopaAirlines</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="73J-main.xml">
<texture-path>Textures/Delta</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="73J-main.xml">
<texture-path>Textures/UnitedAirlines</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="77F-main.xml">
<texture-path>Textures/AirBridgeCargo</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="77L-main.xml">
<texture-path>Textures/UnitedAirlines</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="A321-main.xml">
<texture-path>Textures/Delta</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="A321-main.xml">
<texture-path>Textures/EasyJet</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="359-main.xml">
<texture-path>Textures/Delta</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -28,6 +28,7 @@
551-600 Military large aircraft (tankers, transports)
601-700 Helicopters
701-800 Other
801-900 Maritime
-->
<PropertyList>
@ -181,4 +182,14 @@ AI model. We also want to load it in preference to the default glider because i
then be invisible to other MP players who are not in a UFO themselves. -->
<model n="712" type="string">Aircraft/ufo/Models/ufo.xml</model>
<model n="801" type="string">AI/Maritime/MP-Carriers/mp-nimitz-0.xml</model>
<model n="802" type="string">AI/Maritime/MP-Carriers/mp-vinson-0.xml</model>
<model n="803" type="string">AI/Maritime/MP-Carriers/mp-eisenhower-0.xml</model>
<model n="804" type="string">AI/Maritime/MP-Carriers/mp-truman-0.xml</model>
<model n="805" type="string">AI/Maritime/MP-Carriers/mp-clemenceau-0.xml</model>
<model n="806" type="string">AI/Maritime/MP-Carriers/mp-foch-0.xml</model>
<model n="807" type="string">AI/Maritime/MP-Carriers/mp-kuznetsov-0.xml</model>
<model n="808" type="string">AI/Maritime/MP-Carriers/mp-liaoning-0.xml</model>
<model n="809" type="string">AI/Maritime/MP-Carriers/mp-sanantonio-0.xml</model>
</PropertyList>

View file

@ -219,6 +219,8 @@
<alias>
<match>73</match>
<match>Boeing_737</match>
<match>7M8</match>
<match>7M9</match>
<alias>737</alias>
</alias>
<!-- Boeing 717 all versions -->

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Clemenceau fallback model. ID# 806
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Clemenceau(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/clemenceau-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Clemenceau",
props.globals.getNode(accept_callsign));
print("MP Clemenceau(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Clemenceau(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Clemenceau(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Eisenhower fallback model. ID# 803
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Eisenhower(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/eisenhower-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Eisenhower",
props.globals.getNode(accept_callsign));
print("MP Eisenhower(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Eisenhower(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Eisenhower(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Foch fallback model. ID# 807
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Foch(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/foch-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Foch",
props.globals.getNode(accept_callsign));
print("MP Foch(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Foch(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Foch(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Kuznetsov fallback model. ID# 808
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Kuznetsov(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/kuznetsov-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Kuznetsov",
props.globals.getNode(accept_callsign));
print("MP Kuznetsov(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Kuznetsov(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Kuznetsov(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Liaoning fallback model. ID# 809
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Liaoning(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/liaoning-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Liaoning",
props.globals.getNode(accept_callsign));
print("MP Liaoning(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Liaoning(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Liaoning(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Nimitz fallback model. ID# 801
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Nimitz(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/nimitz-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Nimitz",
props.globals.getNode(accept_callsign));
print("MP Nimitz(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 15); # delay to prevent recursion.
print("MP Nimitz(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Nimitz(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Sanantonio fallback model. ID# 810
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Sanantonio(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/sanantonio-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Sanantonio",
props.globals.getNode(accept_callsign));
print("MP Sanantonio(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Sanantonio(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Sanantonio(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Truman fallback model. ID# 804
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Truman(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/truman-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Truman",
props.globals.getNode(accept_callsign));
print("MP Truman(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Truman(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Truman(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

View file

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!--
Multiplayer carrier Vinson fallback model. ID# 805
This will connect the MP carrier to the AI carrier when the low detail model is loaded.
Later on if the high detail model is also loaded it will be still be good
because the logic is resilient enough not to trample over itself.
Copyright (C) 2021 : Richard Harrison rjh@zaretto.com
Copyright (C) 2007 - 2016 Anders Gidenstam (anders(at)gidenstam.org)
This file is released under the GPL license version 2 or later.
-->
<PropertyList>
<nasal>
<load>
<![CDATA[
##############################################################################
# This logic connects the carrier to the AI carrier
var rplayer = cmdarg();
print("MP Vinson(Fallback): LOAD " ~ rplayer.getPath());
# Load the main MPCarriers Nasal module if needed.
if (!contains(globals, "MPCarriers")) {
var base = "Aircraft/Generic/MPCarriers.nas";
io.load_nasal(resolvepath(base), "MPCarriers");
}
# Create manager class.
var manager = nil;
var accept_callsign = "/sim/mp-carriers/vinson-callsign";
var init = func {
# Initialize the callsign property if not done already.
props.globals.initNode(accept_callsign, "", "STRING");
manager = MPCarriers.Manager.new(rplayer,
"Vinson",
props.globals.getNode(accept_callsign));
print("MP Vinson(Fallback): " ~ rplayer.getPath() ~ " done.");
}
settimer(init, 3); # 3 second delay should be sufficient
print("MP Vinson(Fallback): " ~ rplayer.getPath() ~ " waiting.");
##############################################################################
]]>
</load>
<unload>
<![CDATA[
##############################################################################
print("MP Vinson(Fallback): unload", cmdarg().getPath());
if (manager != nil) manager.die();
##############################################################################
]]>
</unload>
</nasal>
</PropertyList>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

11637
AI/Traffic/E/EJU.xml Normal file

File diff suppressed because it is too large Load diff

View file

@ -1263,21 +1263,7 @@
<registration>N476MC</registration>
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Etihad.xml</model>
<livery>ETD</livery>
<airline>ETD</airline>
<home-port>OMAA</home-port>
<required-aircraft>ETD-74F</required-aircraft>
<actype>74F</actype>
<offset>0</offset>
<radius>32</radius>
<flighttype>cargo</flighttype>
<performance-class>jet_transport</performance-class>
<registration>N855GT</registration>
<heavy>true</heavy>
</aircraft>
<aircraft>
<aircraft>
<model>Aircraft/777/77F-Etihad.xml</model>
<livery>ETD</livery>
<airline>ETD</airline>

View file

@ -308,20 +308,6 @@
<registration>G-GDFY</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
<model>Aircraft/738/738-Jet2.xml</model>
<livery>EXS</livery>
<airline>EXS</airline>
<home-port>EGNM</home-port>
<required-aircraft>EXS-738</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>G-JZHA</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
<model>Aircraft/738/738-Jet2.xml</model>
<livery>EXS</livery>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -82,24 +82,10 @@
<radius>30</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>YI-AGR</registration>
<registration>YI-AQY</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
<model>Aircraft/738/738-IraqiAirways.xml</model>
<livery>IAW</livery>
<airline>IAW</airline>
<home-port>ORBI</home-port>
<required-aircraft>IAW-737</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>17</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>YI-AQA</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
<aircraft>
<model>Aircraft/738/738-IraqiAirways.xml</model>
<livery>IAW</livery>
<airline>IAW</airline>

View file

@ -12,7 +12,7 @@
<radius>17</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>TS-INA</registration>
<registration>TS-INC</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
@ -26,7 +26,7 @@
<radius>17</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>TS-INB</registration>
<registration>TS-IND</registration>
<heavy>false</heavy>
</aircraft>
<aircraft>
@ -96,7 +96,7 @@
<radius>17</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>TS-INA</registration>
<registration>TS-INR</registration>
<heavy>false</heavy>
</aircraft>
<flight>

View file

@ -124,7 +124,7 @@
<radius>17</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>LZ-FBC</registration>
<registration>LZ-FBE</registration>
<heavy>false</heavy>
</aircraft>
<flight>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRA</registration>
@ -25,7 +25,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRB</registration>
@ -39,7 +39,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRC</registration>
@ -53,7 +53,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRD</registration>
@ -67,7 +67,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRV</registration>
@ -81,7 +81,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRX</registration>
@ -95,7 +95,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRY</registration>
@ -109,7 +109,7 @@
<required-aircraft>737-TRA</required-aircraft>
<actype>737</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-XRZ</registration>
@ -123,7 +123,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHA</registration>
@ -137,7 +137,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHB</registration>
@ -151,7 +151,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHC</registration>
@ -165,7 +165,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHD</registration>
@ -179,7 +179,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHE</registration>
@ -193,7 +193,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHF</registration>
@ -207,7 +207,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHI</registration>
@ -221,7 +221,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHJ</registration>
@ -235,7 +235,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHK</registration>
@ -249,7 +249,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHL</registration>
@ -263,7 +263,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHM</registration>
@ -277,7 +277,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHN</registration>
@ -291,7 +291,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHO</registration>
@ -305,7 +305,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHP</registration>
@ -319,7 +319,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHQ</registration>
@ -333,7 +333,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHR</registration>
@ -347,7 +347,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHS</registration>
@ -361,7 +361,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHT</registration>
@ -375,7 +375,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHU</registration>
@ -389,7 +389,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHV</registration>
@ -403,7 +403,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHX</registration>
@ -417,7 +417,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-GZHY</registration>
@ -431,7 +431,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVA</registration>
@ -445,7 +445,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVB</registration>
@ -459,7 +459,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVC</registration>
@ -473,7 +473,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVD</registration>
@ -487,7 +487,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVE</registration>
@ -501,7 +501,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVF</registration>
@ -515,7 +515,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>F-HTVG</registration>
@ -529,7 +529,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSB</registration>
@ -543,7 +543,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSC</registration>
@ -557,7 +557,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSF</registration>
@ -571,7 +571,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSG</registration>
@ -585,7 +585,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSI</registration>
@ -599,7 +599,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSJ</registration>
@ -613,7 +613,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSM</registration>
@ -627,7 +627,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HSW</registration>
@ -641,7 +641,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXA</registration>
@ -655,7 +655,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXB</registration>
@ -669,7 +669,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXC</registration>
@ -683,7 +683,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXD</registration>
@ -697,7 +697,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXE</registration>
@ -711,7 +711,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXF</registration>
@ -725,7 +725,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXG</registration>
@ -739,7 +739,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXI</registration>
@ -753,7 +753,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXJ</registration>
@ -767,7 +767,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HXK</registration>
@ -781,7 +781,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZD</registration>
@ -795,7 +795,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZE</registration>
@ -809,7 +809,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZG</registration>
@ -823,7 +823,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZI</registration>
@ -837,7 +837,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZJ</registration>
@ -851,7 +851,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZL</registration>
@ -865,7 +865,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZN</registration>
@ -879,7 +879,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZO</registration>
@ -893,7 +893,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZV</registration>
@ -907,7 +907,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZW</registration>
@ -921,7 +921,7 @@
<required-aircraft>738-TRA</required-aircraft>
<actype>738</actype>
<offset>0</offset>
<radius>14</radius>
<radius>18</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-HZX</registration>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

51
AI/kuznetsov_demo.xml Normal file
View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<scenario>
<name>Carrier: Admiral Kuznetsov</name>
<description>This scenario spawns the Admiral Kuznetsov aircraft carrier in the Barents Sea off Murmansk.</description>
<author>Daniel Overbeck, Richard Harrison, Uxman (3d)</author>
<!-- 3d model from: https://sketchfab.com/3d-models/kuznetsov-aircraft-carrier-460d73a91efb49298c86ee347fae397c -->
<entry>
<type>carrier</type>
<name>Kuznetsov</name>
<pennant-number>063</pennant-number>
<TACAN-channel-ID>026Y</TACAN-channel-ID>
<description>Russian aircraft carrier Admiral Kuznetsov in the Barents Sea off Murmansk.</description>
<model>Models/Geometry/Kuznetsov/Kuznetsov.xml</model>
<latitude>69.4</latitude>
<longitude>33.7</longitude>
<deck-altitude>50</deck-altitude>
<speed>10</speed>
<heading>0</heading>
<rudder>0</rudder>
<turn-radius-ft>5000</turn-radius-ft>
<flols-pos>
<x-offset-m>65</x-offset-m>
<y-offset-m>-37</y-offset-m>
<z-offset-m>17</z-offset-m>
<heading-offset-deg>20</heading-offset-deg>
</flols-pos>
<parking-pos>
<name>cat-1</name>
<heading-offset-deg>5</heading-offset-deg>
<x-offset-m>96</x-offset-m>
<y-offset-m>-19</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
<parking-pos>
<name>cat-2</name>
<heading-offset-deg>5</heading-offset-deg>
<x-offset-m>0</x-offset-m>
<y-offset-m>-9.5</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
<parking-pos>
<name>cat-3</name>
<heading-offset-deg>-5</heading-offset-deg>
<x-offset-m>0</x-offset-m>
<y-offset-m>11</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
</entry>
</scenario>
</PropertyList>

51
AI/liaoning_demo.xml Normal file
View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<scenario>
<name>Carrier: Liaoning</name>
<description>This scenario spawns the Liaoning aircraft carrier in the East China Sea off Wenzhou.</description>
<author>Daniel Overbeck, Richard Harrison, Uxman (3d)</author>
<!-- 3d model from: https://sketchfab.com/3d-models/kuznetsov-aircraft-carrier-460d73a91efb49298c86ee347fae397c -->
<entry>
<type>carrier</type>
<name>Liaoning</name>
<pennant-number>16</pennant-number>
<TACAN-channel-ID>026Y</TACAN-channel-ID>
<description>Chinese aircraft carrier Liaoning in the East China Sea off Wenzhou.</description>
<model>Models/Geometry/Kuznetsov/Liaoning.xml</model>
<latitude>27</latitude>
<longitude>123</longitude>
<deck-altitude>50</deck-altitude>
<speed>10</speed>
<heading>0</heading>
<rudder>0</rudder>
<turn-radius-ft>5000</turn-radius-ft>
<flols-pos>
<x-offset-m>65</x-offset-m>
<y-offset-m>-37</y-offset-m>
<z-offset-m>17</z-offset-m>
<heading-offset-deg>20</heading-offset-deg>
</flols-pos>
<parking-pos>
<name>cat-1</name>
<heading-offset-deg>5</heading-offset-deg>
<x-offset-m>96</x-offset-m>
<y-offset-m>-19</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
<parking-pos>
<name>cat-2</name>
<heading-offset-deg>5</heading-offset-deg>
<x-offset-m>0</x-offset-m>
<y-offset-m>-9.5</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
<parking-pos>
<name>cat-3</name>
<heading-offset-deg>-5</heading-offset-deg>
<x-offset-m>0</x-offset-m>
<y-offset-m>11</y-offset-m>
<z-offset-m>15</z-offset-m>
</parking-pos>
</entry>
</scenario>
</PropertyList>

View file

@ -0,0 +1,618 @@
###############################################################################
##
## Nasal module for connecting a local AI carrier to a MP player.
##
## Copyright (C) 2007 - 2012 Anders Gidenstam (anders(at)gidenstam.org)
## Copyright (C) 2009 Vivian Meazza
## This file is licensed under the GPL license version 2 or later.
##
###############################################################################
# NOTE:
# This module is intended to be loaded under the name MPCarriers.
# To see what is happening with multiplayer/ai carriers, look in
# /ai/models/carrier[]/mp-control/.
#
# If this is true, we auto-enable ai scenarios and auto-attach ai carriers to
# mp carriers.
#
var g_auto_attach = props.globals.getNode("/sim/mp-carriers/auto-attach", 1);
printf("g_auto_attach.getValue()=%s", g_auto_attach.getValue());
# Constants
var lat = "position/latitude-deg";
var lon = "position/longitude-deg";
var alt = "position/altitude-ft";
var c_heading = "orientation/true-heading-deg";
var c_pitch = "orientation/pitch-deg";
var c_roll = "orientation/roll-deg";
var c_speed = "velocities/speed-kts";
var x = "position/global-x";
var y = "position/global-y";
var z = "position/global-z";
#var c_control_speed = "controls/base-speed-kts";
#var c_control_course = "controls/base-course-deg";
var c_control_speed = "controls/tgt-speed-kts";
var c_control_course = "controls/tgt-heading-degs";
var c_wave_off_lights = "controls/flols/wave-off-lights";
var c_control_mp_ctrl = "controls/mp-control";
var c_deck_elev = "controls/elevators";
var c_deck_lights = "controls/lighting/deck-lights";
var c_flood_lights = "controls/lighting/flood-lights-red-norm";
var c_turn_to_launch_hdg = "controls/turn-to-launch-hdg";
var c_turn_to_recvry_hdg = "controls/turn-to-recovery-hdg";
var c_turn_to_base_co = "controls/turn-to-base-course";
var mp_heading = "orientation/true-heading-deg";
var mp_pitch = "orientation/pitch-deg";
var mp_roll = "orientation/roll-deg";
# MP transmitted controls
var mp_speed = "surface-positions/flap-pos-norm";
var mp_rudder = "surface-positions/rudder-pos-norm";
var mp_network = "sim/multiplay/generic/string[0]";
var mp_message = "sim/multiplay/generic/string[2]";
var mp_tgt_hdg = "sim/multiplay/generic/float[0]";
var mp_tgt_spd = "sim/multiplay/generic/float[1]";
var mp_turn_radius = "sim/multiplay/generic/float[2]";
# Controller parameters.
var cross_course_gain = 0.2;
var cross_course_fadeout = 100.0;
var cross_course_limit = 20.0;
###############################################################################
# Manager class for one model instance.
var Manager = {};
##################################################
Manager.new = func (player = nil, carrier_name = nil, callsign = nil) {
# e.g. carrier_name = 'Clemenceau'.
printf("Manager.new(): player=%s carrier_name=%s callsign=%s",
player, carrier_name, callsign);
if (g_auto_attach.getValue()) {
# Look for matching ai scenario and enable it. We don't care if it is
# already enabled - FGAIManager::loadScenarioCommand() will know to do
# nothing.
printf("Checking ai scenarios...");
foreach (var n; props.globals.getNode("sim/ai/scenarios", 1).getChildren("scenario")) {
var n_carrier_name = n.getValue("carrier/name");
var n_scenario_id = n.getValue("id"); # e.g. clemenceau_demo.
if (n_carrier_name != nil) {
if (0) {
printf(" %s: id=%s n_carrier_name=%s",
n.getPath(),
n_scenario_id,
n_carrier_name
);
}
if (n_carrier_name == carrier_name) {
printf("calling load-scenario with id=%s", n_scenario_id);
var args = props.Node.new( { name: n_scenario_id});
var e = fgcommand("load-scenario", args);
printf("fgcommand('load-scenario') returned e=%s", e);
if (e) {
# We have loaded scenario.
gui.popupTip(sprintf("Have loaded AI senario: %s", n_scenario_id));
}
else {
# Error, or scenario was already loaded.
}
}
}
}
printf("Enabled scenarios are:");
foreach (var n; props.globals.getNode("sim/ai", 1).getChildren("scenario")) {
printf(" %s", n.getValue());
}
}
var obj = { parents : [Manager],
rplayer : player,
carrier_name : carrier_name,
carrier : nil,
accept_callsign : callsign,
callsign_listener : nil,
FREEZE_DIST : 400.0,
comms : nil,
message : nil,
loopid : 0 };
var carriers = props.globals.getNode("/ai/models").getChildren("carrier");
foreach(var c; carriers) {
if (c.getNode("name").getValue() == carrier_name) {
obj.carrier = c;
printf("Initializing carrier_name=%s player.getPath()=%s",
carrier_name, player.getPath());
obj.callsign_listener =
setlistener(callsign,
func { print("Callsign update");
obj.start(); });
MPCarriersNW.Manager_instances[player.getIndex()] = obj;
obj.start();
return obj;
}
}
printf("Failed to find carrier_name=%s. The relevant carrier AI scenario must be active", carrier_name);
return nil;
}
##################################################
Manager.is_valid = func {
return ((me.rplayer.getNode("valid") != nil) and
me.rplayer.getNode("valid").getValue() and
(me.rplayer.getNode("callsign") != nil));
}
##################################################
Manager.is_active = func {
var a = me.is_valid();
var b = (me.rplayer.getNode("callsign") != nil);
# FIXME: Sometimes the cmp() call here gets an invalid argument.
var c = (cmp(me.rplayer.getNode("callsign").getValue(), me.accept_callsign.getValue()) == 0);
if (g_auto_attach.getValue()) {
# Always attach, regardless of callsign.
c = 1;
}
return (a and b and c);
}
##################################################
Manager.set_property = func (path, value) {
if (!me.is_valid() or !me.is_active()) return;
me.carrier.getNode(path).setValue(value);
}
##################################################
Manager.update = func {
var aircraft_pos = geo.aircraft_position();
var carrier_pos = geo.Coord.new(aircraft_pos);
if (!me.is_valid()) {
# This carrier player is not valid anymore.
if (0) printf("calling me.die() because !me.is_valid()");
me.die();
return;
}
if (!me.is_active()) {
# This carrier player is not the chosen one. Go idle.
if (0) printf("calling me.stop(). me.is_valid()=%s me.rplayer.getNode('callsign').getValue()=%s me.accept_callsign.getValue()=%s",
me.is_valid(),
me.rplayer.getNode('callsign').getValue(),
me.accept_callsign.getValue()
);
me.stop();
return;
}
# LSO comms
var message = me.rplayer.getNode(mp_message).getValue();
if (message != ""){
if (message != me.message){
setprop("/sim/messages/approach", message);
}
me.message = message;
}
# carrier_pos.set_latlon(me.carrier.getNode(lat).getValue(),
# me.carrier.getNode(lon).getValue(),
# me.carrier.getNode(alt).getValue());
carrier_pos.set_xyz(me.carrier.getNode(x).getValue(),
me.carrier.getNode(y).getValue(),
me.carrier.getNode(z).getValue());
# Compute the position and orientation error.
var rplayer_pos = geo.Coord.new(carrier_pos);
# rplayer_pos.set_latlon(me.rplayer.getNode(lat).getValue(),
# me.rplayer.getNode(lon).getValue(),
# me.rplayer.getNode(alt).getValue());
rplayer_pos.set_xyz(me.rplayer.getNode(x).getValue(),
me.rplayer.getNode(y).getValue(),
me.rplayer.getNode(z).getValue());
var master_course = normalize_course(me.rplayer.getNode(mp_heading).getValue());
var master_speed = me.rplayer.getNode(mp_speed).getValue();
var bearing_to_master = normalize_course(carrier_pos.course_to(rplayer_pos));
var distance_to_master = carrier_pos.direct_distance_to(rplayer_pos);
var v = D2R * normalize_course(bearing_to_master - master_course);
var cross_track_error = distance_to_master * math.sin(v);
var along_track_error = distance_to_master * math.cos(v);
var master_tgt_hdg = as_num(me.rplayer.getNode(mp_tgt_hdg).getValue(),
me.rplayer.getNode(mp_heading).getValue());
var master_tgt_spd = as_num(me.rplayer.getNode(mp_tgt_spd).getValue(),
me.rplayer.getNode(mp_speed).getValue());
var master_turn_radius = as_num(me.rplayer.getNode(mp_turn_radius).getValue());
var diff = master_course - master_tgt_hdg;
if (diff > 180)
diff -= 360;
elsif (diff < -180)
diff += 360;
me.carrier.getNode("mp-control/ai-mp-course-delta", 1).setValue(diff);
if ( diff < -1.0 or diff > 1.0){
me.carrier.getNode("mp-control/ai-mp-course-delta-type", 1).setValue("major");
# major course alteration - we'll just use target heading from
# master until it's nearly complete
# print("major turn" , diff);
var set_course = master_tgt_hdg ;
var correction = 0;
if (diff < 0){
correction = -cross_track_error * M2FT;
# print("stbd turn ", correction);
} elsif (diff > 0){
correction = cross_track_error * M2FT;
# print("port turn ", correction);
} else {
correction = 0;
# print("no turn ", correction);
}
me.carrier.getNode("controls/turn-radius-ft", 1).setValue(master_turn_radius + correction);
} else {
# Use Controller.
me.carrier.getNode("mp-control/ai-mp-course-delta-type", 1).setValue("minor");
me.carrier.getNode("controls/turn-radius-ft", 1).setValue(master_turn_radius);
var set_course =
normalize_course(180.0/math.pi *
(math.abs(cross_track_error) < cross_course_fadeout ?
math.pow
(math.abs(cross_track_error/cross_course_fadeout),2) :
1.0) *
math.atan2(cross_course_gain * cross_track_error,
along_track_error) +
master_course);
# Limit the course to +/-cross_course_limit degrees off the master's course.
if (set_course - master_course > cross_course_limit) {
set_course = normalize_course(master_course + cross_course_limit);
} else if (set_course - master_course < -cross_course_limit) {
set_course = normalize_course(master_course - cross_course_limit);
}
}
var spd_diff = master_speed - master_tgt_spd;
me.carrier.getNode("mp-control/ai-mp-speed-delta", 1).setValue(spd_diff);
if ( spd_diff < -1 or spd_diff > 1){
# major speed alteration - we'll just use target speed from
# master until it's nearly complete
me.carrier.getNode("mp-control/ai-mp-speed-delta-type", 1).setValue("major");
var set_speed = master_tgt_spd +
0.01 * along_track_error;
if (set_speed > master_tgt_spd + 5.0) set_speed = master_tgt_spd + 5.0;
if (set_speed < master_tgt_spd - 5.0) set_speed = master_tgt_spd - 5.0;
} else {
me.carrier.getNode("mp-control/ai-mp-speed-delta-type", 1).setValue("minor");
var set_speed = master_speed +
0.01 * along_track_error;
if (set_speed > master_speed + 5.0) set_speed = master_speed + 5.0;
if (set_speed < master_speed - 5.0) set_speed = master_speed - 5.0;
}
# publish controller settings to /ai/models/carrier[]/mp-control/.
#
me.carrier.getNode("mp-control/bearing-to-master-rel-deg", 1).setValue(v);
me.carrier.getNode("mp-control/bearing-to-master-deg", 1).setValue(bearing_to_master);
me.carrier.getNode("mp-control/distance-to-master-m", 1).setValue(distance_to_master);
me.carrier.getNode("mp-control/cross-track-error-m", 1).setValue(cross_track_error);
me.carrier.getNode("mp-control/along-track-error-m", 1).setValue(along_track_error);
me.carrier.getNode("mp-control/freeze-distance", 1).setValue(me.FREEZE_DIST);
me.carrier.getNode("mp-control/master-speed-kts", 1).setValue(master_speed);
me.carrier.getNode("mp-control/master-course-deg", 1).setValue(master_course);
me.carrier.getNode("mp-control/set-speed-kts", 1).setValue(set_speed);
me.carrier.getNode("mp-control/set-course-deg", 1).setValue(set_course);
me.carrier.getNode("mp-control/tgt-hdg-deg", 1).setValue(sprintf ( "%03.1d", master_tgt_hdg));
me.carrier.getNode("mp-control/tgt-spd-kts", 1).setValue(master_tgt_spd);
me.carrier.getNode("mp-control/turn-radius-ft", 1).setValue(master_turn_radius);
# We latch ai and mp carrier positions if user aircraft is more than
# me.FREEZE_DIST away from ai carrier, or if we are in replay mode.
#
var distance_aircraft_carrier = aircraft_pos.direct_distance_to(carrier_pos);
var in_replay = props.globals.getValue("/sim/replay/replay-state");
var do_latch = (distance_aircraft_carrier > me.FREEZE_DIST or in_replay);
var distance_ai_to_mpcarrier = rplayer_pos.direct_distance_to(carrier_pos);
me.carrier.getNode("mp-control/aircraft-ai-distance", 1).setValue(distance_aircraft_carrier);
me.carrier.getNode("mp-control/ai-mp-latched", do_latch);
if (do_latch) {
# Latch the local AI carrier to the remote player's
# location only when the local player is far enough away not
# to suffer side effects.
me.carrier.getNode(lat).setValue(me.rplayer.getNode(lat).getValue());
me.carrier.getNode(lon).setValue(me.rplayer.getNode(lon).getValue());
me.carrier.getNode(alt).setValue(me.rplayer.getNode(alt).getValue());
me.carrier.getNode(c_heading).
setValue(master_course);
me.carrier.getNode(c_pitch).
setValue(me.rplayer.getNode(mp_pitch).getValue());
me.carrier.getNode(c_roll).
setValue(me.rplayer.getNode(mp_roll).getValue());
# Accelerate the AI carrier to the right speed.
me.carrier.getNode(c_control_speed).
setValue(master_speed);
} else {
# Player on deck. Use the speed controller.
me.carrier.getNode(c_control_speed).
setValue(set_speed);
}
# Always set these commands.
me.carrier.getNode(c_control_course).
setValue(set_course);
# Switch off AI control for the carrier if available.
if (me.carrier.getNode(c_control_mp_ctrl) != nil)
me.carrier.getNode(c_control_mp_ctrl).setBoolValue(1);
}
##################################################
Manager.stop = func {
me.loopid += 1;
printf("Manager.stop() me.carrier_name=%s me.rplayer.getPath()=%s",
me.carrier_name, me.rplayer.getPath());
# Reenable AI control.
if (me.carrier.getNode(c_control_mp_ctrl) != nil)
me.carrier.getNode(c_control_mp_ctrl).setBoolValue(0);
}
##################################################
Manager.die = func {
if (me.callsign_listener == nil) return;
delete(MPCarriersNW.Manager_instances, me.rplayer.getIndex());
me.loopid += 1;
# Delay the reactivation of AI control.
settimer(func {
if (me.carrier.getNode(c_control_mp_ctrl) != nil)
me.carrier.getNode(c_control_mp_ctrl).setBoolValue(0);
}, 5.0);
removelistener(me.callsign_listener);
me.callsign_listener = nil;
printf("Manager.die(): me.carrier_name=%s me.rplayer.getPath()=%s",
me.carrier_name, me.rplayer.getPath());
}
##################################################
Manager.start = func {
me.loopid += 1;
printf("Manager.start(): me.carrier_name=%s me.rplayer.getPath()=%s",
me.carrier_name, me.rplayer.getPath());
me._loop_(me.loopid);
}
##################################################
Manager._loop_ = func(id) {
id == me.loopid or return;
me.update();
settimer(func { me._loop_(id); }, 0);
}
###############################################################################
###############################################################################
#################################################################
var normalize_course = func(c) {
while (c < 0) c += 360;
while (c >= 360) c -= 360;
return c;
}
#################################################################
# Return a hash containing all nearby carrier players
# indexed on MP-carrier type
var find_carrier_players = func {
var res = {};
foreach (var c; keys(MPCarriersNW.Manager_instances)) {
if (MPCarriersNW.Manager_instances[c].is_valid()) {
var type = MPCarriersNW.Manager_instances[c].carrier_name;
var pilot = MPCarriersNW.Manager_instances[c].rplayer;
if (!contains(res, type)) {
res[type] = [pilot.getNode("callsign").getValue()];
} else {
append(res[type], pilot.getNode("callsign").getValue());
}
}
}
# debug.dump(res);
return res;
}
###############################################################################
# MPCarrier selection dialog.
var CARRIER_DLG = 0;
var carrier_dialog = {};
############################################################
carrier_dialog.init = func (x = nil, y = nil) {
me.x = x;
me.y = y;
me.bg = [0, 0, 0, 0.3]; # background color
me.fg = [[1.0, 1.0, 1.0, 1.0]];
#
# "private"
me.title = "MPCarrier";
me.basenode = props.globals.getNode("/sim/mp-carriers", 1);
me.dialog = nil;
me.namenode = props.Node.new({"dialog-name" : me.title });
me.listeners = [];
me.players = {};
me.carriers = { "Nimitz" : "nimitz-callsign",
"Eisenhower" : "eisenhower-callsign",
"Truman" : "truman-callsign",
"Foch" : "foch-callsign",
"Clemenceau" : "clemenceau-callsign",
"Vinson" : "vinson-callsign"
"Kuznetsov" : "kuznetsov-callsign",
"Liaoning" : "liaoning-callsign",
"Sanantonio" : "sanantonio-callsign"};
}
############################################################
carrier_dialog.create = func {
if (me.dialog != nil)
me.close();
me.dialog = gui.Widget.new();
gui.dialog[me.title] = me.dialog;
me.dialog.set("name", me.title);
if (me.x != nil)
me.dialog.set("x", me.x);
if (me.y != nil)
me.dialog.set("y", me.y);
me.dialog.set("layout", "vbox");
me.dialog.set("default-padding", 0);
var titlebar = me.dialog.addChild("group");
titlebar.set("layout", "hbox");
titlebar.addChild("empty").set("stretch", 1);
titlebar.addChild("text").set("label", "MPCarriers online");
var w = titlebar.addChild("button");
w.set("pref-width", 16);
w.set("pref-height", 16);
w.set("legend", "");
w.set("default", 0);
w.set("key", "esc");
w.setBinding("nasal", "MPCarriers.carrier_dialog.destroy(); ");
w.setBinding("dialog-close");
me.dialog.addChild("hrule");
var content = me.dialog.addChild("group");
content.set("layout", "vbox");
content.set("halign", "center");
content.set("default-padding", 5);
# Generate the dialog contents.
var players_old = me.players;
me.players = find_carrier_players();
foreach (var type; keys(me.carriers)) {
var selected = me.basenode.getNode(me.carriers[type], 1).getValue();
var tmpbase = me.basenode.getNode(type, 1);
if (contains(me.players, type)) {
var i = 0;
foreach (var p; me.players[type]) {
var tmp = tmpbase.getNode("b[" ~ i ~ "]", 1);
tmp.setBoolValue(streq(selected, p));
var w = content.addChild("checkbox");
w.node.setValues({"label" : p ~ " (" ~ type ~ ")",
"halign" : "left",
"property" : tmp.getPath()});
w.setBinding
("nasal",
"MPCarriers.carrier_dialog.select_action(" ~
"\"" ~ type ~ "\", " ~ i ~ ");");
i = i + 1;
}
if (size(me.players[type]) == 1
and (
!contains(players_old, type)
or size(players_old[type]) == 0
or g_auto_attach.getValue()
)) {
# Carrier has just appeared, and there is no other carrier of
# the same type, so attach our AI carrier to it.
printf("carrier_dialog.create(): auto-selecting type=%s", type);
me.select_action(type, 0);
}
}
}
me.dialog.addChild("hrule");
# Display the dialog.
fgcommand("dialog-new", me.dialog.prop());
fgcommand("dialog-show", me.namenode);
}
############################################################
carrier_dialog.close = func {
if (me.dialog != nil) {
me.x = me.dialog.prop().getNode("x", 1).getValue();
me.y = me.dialog.prop().getNode("y", 1).getValue();
}
fgcommand("dialog-close", me.namenode);
}
############################################################
carrier_dialog.destroy = func {
CARRIER_DLG = 0;
me.close();
foreach(var l; me.listeners)
removelistener(l);
delete(gui.dialog, "\"" ~ me.title ~ "\"");
}
############################################################
carrier_dialog.show = func {
# print("Showing MPCarriers dialog!");
if (!CARRIER_DLG) {
CARRIER_DLG = int(getprop("/sim/time/elapsed-sec"));
me.init();
me.create();
me._update_(CARRIER_DLG);
}
}
############################################################
carrier_dialog._redraw_ = func {
if (me.dialog != nil) {
me.close();
me.create();
}
}
############################################################
carrier_dialog._update_ = func (id) {
if (CARRIER_DLG != id) return;
me._redraw_();
settimer(func { me._update_(id); }, 4.1);
}
############################################################
carrier_dialog.select_action = func (type, n) {
var base = me.basenode.getNode(type);
var selected = me.basenode.getNode(me.carriers[type]).getValue();
var bs = base.getChildren();
# Assumption: There are two true b:s or none. The one not matching selected
# is the new selection.
var i = 0;
me.basenode.getNode(me.carriers[type], 1).setValue("");
foreach (var b; bs) {
if (!b.getValue() and (i == n)) {
b.setValue(1);
me.basenode.getNode(me.carriers[type]).setValue
(me.players[type][i]);
} else {
b.setValue(0);
}
i = i + 1;
}
me._redraw_();
}
###############################################################################
var as_num = func (val, default=0.0) {
return (typeof(val) == "scalar") ? val : default;
}
###############################################################################
# Overall initialization. Should only take place when the MPCarrier module is
# being loaded.
# Load the MPCarrier MP network.
if (!contains(globals, "MPCarriersNW")) {
var base = "Aircraft/MPCarrier/Systems/mp-network.nas";
io.load_nasal(resolvepath(base), "MPCarriersNW");
MPCarriersNW.mp_network_init(0);
}

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -15,7 +15,7 @@
viewBox="0 0 744.09448819 1052.3622047"
id="svg4136"
version="1.1"
inkscape:version="0.91 r13725"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="EIS-C182T.svg">
<defs
id="defs4138">
@ -39,16 +39,16 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="6.7031078"
inkscape:cx="111.80088"
inkscape:cy="968.64828"
inkscape:zoom="3.3515539"
inkscape:cx="24.554255"
inkscape:cy="351.5442"
inkscape:document-units="px"
inkscape:current-layer="EISGroup"
inkscape:current-layer="g5014"
showgrid="false"
inkscape:window-width="2495"
inkscape:window-height="1416"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-width="2488"
inkscape:window-height="1376"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="false"
inkscape:snap-object-midpoints="false"
@ -82,51 +82,50 @@
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.51325756;stroke-opacity:1"
ry="0" />
<text
sodipodi:linespacing="125%"
id="text4717"
y="305.3992"
x="13.168611"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="305.3992"
x="13.168611"
id="tspan4719"
sodipodi:role="line">0</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">0</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="112.65208"
y="305.96732"
id="text4725"
sodipodi:linespacing="125%"><tspan
id="text4725"><tspan
sodipodi:role="line"
id="tspan4727"
x="112.65208"
y="305.96732">2700</tspan></text>
y="305.96732"
style="font-size:15px;line-height:1.25">2700</tspan></text>
<text
inkscape:label="#text4729"
sodipodi:linespacing="125%"
id="EISRPMDisplay"
y="310.77417"
x="50.675224"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;font-family:FreeSans;-inkscape-font-specification:FreeSans"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans"
y="310.77417"
x="50.675224"
id="tspan4731"
sodipodi:role="line">2200</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4733"
y="281.35699"
x="57.474468"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.08005524px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="281.35699"
x="57.474468"
id="tspan4735"
sodipodi:role="line">RPM</tspan></text>
sodipodi:role="line"
style="font-size:15.08005524px;line-height:1.25">RPM</tspan></text>
<g
transform="translate(-0.54554609,-200.06553)"
id="g4866">
@ -150,102 +149,104 @@
<path
inkscape:connector-curvature="0"
id="path4799"
d="m 20.948572,531.22649 0,-11.60383"
d="M 20.948572,531.22649 V 519.62266"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 45.19784,531.30108 0,-11.60383"
d="M 45.19784,531.30108 V 519.69725"
id="path4813"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4815"
d="m 33.073207,531.30108 0,-11.60383"
d="M 33.073207,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 57.322475,531.30108 0,-11.60383"
d="M 57.322475,531.30108 V 519.69725"
id="path4819"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4821"
d="m 69.447103,531.30108 0,-11.60383"
d="M 69.447103,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 81.571737,531.30108 0,-11.60383"
d="M 81.571737,531.30108 V 519.69725"
id="path4823"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4825"
d="m 93.696375,531.52486 0,-11.60383"
d="M 93.696375,531.52486 V 519.92103"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 105.82101,531.22649 0,-11.60383"
d="M 105.82101,531.22649 V 519.62266"
id="path4827"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4829"
d="m 130.07028,531.30108 0,-11.60383"
d="M 130.07028,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6041"
d="m 117.94564,531.30108 0,-11.60383"
d="M 117.94564,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6043"
d="m 142.19491,531.30108 0,-13.92964"
d="M 142.19491,531.30108 V 517.37144"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.09564364px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.09564364px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 8.8239383,531.30108 0,-13.92964"
d="M 8.8239383,531.30108 V 517.37144"
id="path6045"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 0,-9.18946 z"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 V 539.54 Z"
id="EISFuelFlowPointer"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
inkscape:label="#path4864" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="30.433645"
y="528.42615"
id="text4846"
sodipodi:linespacing="125%"><tspan
id="text4846"><tspan
sodipodi:role="line"
x="30.433645"
y="528.42615"
id="tspan4850">FFLOW GPH</tspan></text>
id="tspan4850"
style="font-size:15px;line-height:1.25">FFLOW GPH</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="3.5804288"
y="569.60107"
id="text4854"><tspan
sodipodi:role="line"
id="tspan4856"
x="3.5804288"
y="569.60107">0</tspan></text>
y="569.60107"
style="font-size:15px;line-height:1.25">0</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="130.08891"
y="569.60101"
id="text4858"><tspan
sodipodi:role="line"
id="tspan4860"
x="130.08891"
y="569.60101">22</tspan></text>
y="569.60101"
style="font-size:15px;line-height:1.25">22</tspan></text>
</g>
<g
transform="translate(-0.54554609,-131.14227)"
@ -270,22 +271,22 @@
id="g4892">
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 8.0559648,519.47505 0,12.23313 134.8260452,0.0746 -0.0746,-12.03652"
d="m 8.0559648,519.47505 v 12.23313 l 134.8260452,0.0746 -0.0746,-12.03652"
id="path4894"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
<text
sodipodi:linespacing="125%"
id="text4916"
y="528.42615"
x="41.193565"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan4918"
y="528.42615"
x="41.193565"
sodipodi:role="line">OIL PRES</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">OIL PRES</tspan></text>
<rect
style="opacity:1;fill:#aa0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4932"
@ -298,7 +299,7 @@
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="EISOilPressurePointer"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 0,-9.18946 z"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 V 539.54 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
@ -326,30 +327,30 @@
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4942"
d="m 8.0559648,519.47505 0,12.23313 134.8260452,0.0746 -0.0746,-12.03652"
d="m 8.0559648,519.47505 v 12.23313 l 134.8260452,0.0746 -0.0746,-12.03652"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="41.193565"
y="528.42615"
id="text4944"
sodipodi:linespacing="125%"><tspan
id="text4944"><tspan
sodipodi:role="line"
x="41.193565"
y="528.42615"
id="tspan4946">OIL TEMP</tspan></text>
id="tspan4946"
style="font-size:15px;line-height:1.25">OIL TEMP</tspan></text>
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 0,-9.18946 z"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 V 539.54 Z"
id="EISOilTempPointer"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
inkscape:label="#path4864" />
</g>
<g
transform="translate(-0.54554609,-35.067436)"
transform="translate(-0.54554609,-4.8575682)"
id="g4952">
<g
transform="translate(0,21.780942)"
@ -357,93 +358,94 @@
id="g4956">
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 8.0559648,519.47505 0,12.23313 134.8260452,0.0746 -0.0746,-12.03652"
d="m 8.0559648,519.47505 v 12.23313 l 134.8260452,0.0746 -0.0746,-12.03652"
id="path4958"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 20.684108,531.22649 0,-11.60383"
d="M 20.684108,531.22649 V 519.62266"
id="path4960"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4962"
d="m 34.931231,531.30108 0,-11.60383"
d="M 34.931231,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 34.931231,531.30108 0,-11.60383"
d="M 34.931231,531.30108 V 519.69725"
id="path4964"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4966"
d="m 48.656208,531.30108 0,-11.60383"
d="M 48.656208,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 62.082816,531.30108 0,-11.60383"
d="M 62.082816,531.30108 V 519.69725"
id="path4968"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4970"
d="m 75.509424,531.30108 0,-11.60383"
d="M 75.509424,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 89.681955,531.52486 0,-11.60383"
d="M 89.681955,531.52486 V 519.92103"
id="path4972"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4974"
d="m 102.95938,531.22649 0,-11.60383"
d="M 102.95938,531.22649 V 519.62266"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 116.53517,531.30108 0,-11.60383"
d="M 116.53517,531.30108 V 519.69725"
id="path4976"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4978"
d="m 129.66341,531.30108 0,-11.60383"
d="M 129.66341,531.30108 V 519.69725"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
sodipodi:linespacing="125%"
id="text4980"
y="528.42615"
x="62.060768"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan4982"
y="528.42615"
x="62.060768"
sodipodi:role="line">EGT</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">EGT</tspan></text>
<path
inkscape:label="#path4864"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="EISEGTPointer"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 0,-9.18946 z"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 V 539.54 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
inkscape:label="#text4994"
id="EISEGTCylinder"
y="550.22003"
x="3.9031074"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="550.22003"
x="3.9031074"
id="tspan4996"
sodipodi:role="line">1</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">1</tspan></text>
</g>
<g
transform="translate(0,271.9634)"
transform="translate(0,298.25717)"
id="g5014">
<g
transform="translate(-0.54554609,-237.36166)"
@ -451,34 +453,34 @@
id="g5018">
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 8.0559648,519.47505 0,12.23313 134.8260452,0.0746 -0.0746,-12.03652"
d="m 8.0559648,519.47505 v 12.23313 l 134.8260452,0.0746 -0.0746,-12.03652"
id="path5020"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
id="path5028"
d="m 41.859206,542.01976 0,-22.4943"
d="m 41.859206,542.01976 v -22.4943"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.39230883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.37371683px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 75.518097,541.88715 0,-21.89756"
d="M 75.518097,541.88715 V 519.98959"
id="path5034"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.39230883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 8.2003174,542.28497 0,-22.4943"
d="m 8.2003174,542.28497 v -22.4943"
id="path5056"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5058"
d="m 142.83588,542.15236 0,-21.89756"
d="M 142.83588,542.15236 V 520.2548"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.37371683px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6033"
d="m 109.17699,541.88715 0,-21.89756"
d="M 109.17699,541.88715 V 519.98959"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.37371683px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
@ -489,23 +491,23 @@
id="rect5016"
style="opacity:1;fill:#00af00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text5042"
y="269.13437"
x="22.578058"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan5044"
y="269.13437"
x="22.578058"
sodipodi:role="line">FUEL QTY GAL</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">FUEL QTY GAL</tspan></text>
<text
id="text5046"
y="320.65424"
x="3.034883"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-size:15px"
style="font-size:15px;line-height:1.25"
y="320.65424"
x="3.034883"
id="tspan5048"
@ -514,9 +516,9 @@
id="text5050"
y="320.97668"
x="136.70422"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-size:15px"
style="font-size:15px;line-height:1.25"
y="320.97668"
x="136.70422"
id="tspan5052"
@ -544,11 +546,11 @@
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="RightFuelTriangle"
d="m 4.0259199,259.63213 -2.9100082,0 6.4348532,-12.49326 7.3051411,12.49326 -3.797618,0 z"
d="M 4.0259199,259.63213 H 1.1159117 l 6.4348532,-12.49326 7.3051411,12.49326 h -3.797618 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="3.8553977"
y="259.8103"
id="RightFuelLabel"
@ -556,15 +558,16 @@
sodipodi:role="line"
id="tspan5078"
x="3.8553977"
y="259.8103">R</tspan></text>
y="259.8103"
style="font-size:10px;line-height:1.25">R</tspan></text>
</g>
<text
id="text5066"
y="320.65424"
x="32.020535"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:FreeSans;-inkscape-font-specification:FreeSans"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans"
y="320.65424"
x="32.020535"
id="tspan5068"
@ -573,19 +576,20 @@
id="text5070"
y="320.65424"
x="99.73645"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="320.65424"
x="99.73645"
id="tspan5072"
sodipodi:role="line">30</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">30</tspan></text>
<g
inkscape:label="#g4277"
id="EISLeftFuelPointer"
transform="translate(0,48.037419)">
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.0259199,232.43184 -2.9100082,0 6.4348532,12.49326 7.3051411,-12.49326 -3.797618,0 z"
d="M 4.0259199,232.43184 H 1.1159117 l 6.4348532,12.49326 7.3051411,-12.49326 h -3.797618 z"
id="LeftFuelTriangle"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
@ -595,66 +599,72 @@
id="LeftFuelLabel"
y="239.81961"
x="3.8553977"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="239.81961"
x="3.8553977"
id="tspan5082"
sodipodi:role="line">L</tspan></text>
sodipodi:role="line"
style="font-size:10px;line-height:1.25">L</tspan></text>
</g>
<text
id="text5100"
y="341.14606"
x="26.265755"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="341.14606"
x="26.265755"
id="tspan5102"
sodipodi:role="line">ELECTRICAL</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">ELECTRICAL</tspan></text>
<path
inkscape:connector-curvature="0"
id="path5108"
d="m 120.34531,335.65557 16.45634,0.21098"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
d="m 120.34531,335.76106 h 16.45634"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 7.8936094,335.65557 24.34995,335.86655"
d="M 7.8936094,335.83098 H 24.34995"
id="path5110"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
sodipodi:linespacing="0%"
id="text5112"
y="359.64337"
x="13.590033"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="359.64337"
x="13.590033"
id="tspan5114"
sodipodi:role="line">M</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:0">M</tspan></text>
<text
id="text5116"
y="359.56085"
x="56.530724"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="359.56085"
x="56.530724"
id="tspan5118"
sodipodi:role="line">BUS</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">BUS</tspan></text>
<text
id="text5120"
y="359.64337"
x="119.29041"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="359.64337"
x="119.29041"
id="tspan5122"
sodipodi:role="line">E</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">E</tspan></text>
<flowRoot
style="fill-opacity:1;font-size:15px;opacity:1;fill-rule:nonzero;fill:#ffffff;stroke:#ffffff;stroke-opacity:1;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;-inkscape-font-specification:FreeSans;font-family:FreeSans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="flowRoot5124"
xml:space="preserve"><flowRegion
id="flowRegion5126"><rect
@ -663,110 +673,121 @@
height="44.305546"
width="250.43182"
id="rect5128" /></flowRegion><flowPara
id="flowPara5130" /></flowRoot> <text
id="flowPara5130"
style="font-size:15px;line-height:1.25"> </flowPara></flowRoot> <text
inkscape:label="#text5132"
id="EISMBusVolts"
y="382.3924"
x="9.3704567"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="382.3924"
x="9.3704567"
id="tspan5134"
sodipodi:role="line">32.0</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">32.0</tspan></text>
<text
id="text5136"
y="382.84338"
x="50.673546"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="382.84338"
x="50.673546"
id="tspan5138"
sodipodi:role="line">VOLTS</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">VOLTS</tspan></text>
<text
inkscape:label="#text5140"
id="EISEBusVolts"
y="381.33752"
x="112.32812"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="381.33752"
x="112.32812"
id="tspan5142"
sodipodi:role="line">32.0</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">32.0</tspan></text>
<text
id="text5144"
y="425.23657"
y="406.21555"
x="15.066884"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="425.23657"
y="406.21555"
x="15.066884"
id="tspan5146"
sodipodi:role="line">M</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">M</tspan></text>
<text
id="text5148"
y="425.23657"
y="406.21555"
x="55.660442"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="425.23657"
y="406.21555"
x="55.660442"
id="tspan5150"
sodipodi:role="line">BATT</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">BATT</tspan></text>
<text
id="text5152"
y="425.15405"
y="406.13303"
x="124.56488"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="425.15405"
y="406.13303"
x="124.56488"
id="tspan5154"
sodipodi:role="line">S</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">S</tspan></text>
<text
inkscape:label="#text5156"
id="EISMBattAmps"
y="450.11658"
y="431.09555"
x="5.1508813"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="450.11658"
y="431.09555"
x="5.1508813"
id="tspan5158"
sodipodi:role="line">+110</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">+110</tspan></text>
<text
id="text5160"
y="450.35657"
y="431.33554"
x="53.034382"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="450.35657"
y="431.33554"
x="53.034382"
id="tspan5162"
sodipodi:role="line">AMPS</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">AMPS</tspan></text>
<text
inkscape:label="#text5164"
id="EISSBattAmps"
y="450.11658"
y="431.09555"
x="109.16343"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;text-align:start;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
y="450.11658"
y="431.09555"
x="109.16343"
id="tspan5166"
sodipodi:role="line">+110</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">+110</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:FreeSans;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="66.133492"
y="320.65424"
id="text6035"><tspan
sodipodi:role="line"
id="tspan6037"
x="66.133492"
y="320.65424">20</tspan></text>
y="320.65424"
style="font-size:15px;line-height:1.25">20</tspan></text>
</g>
<line
style="stroke:#ffffff;stroke-width:1.34776199"
@ -779,8 +800,8 @@
transform="matrix(-0.5520104,0.3865218,-0.3865218,-0.5520104,75.44881,255.68121)"
id="g9546">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -33.689453,-92.560547 c -34.51463,12.562298 -59.17291,43.287972 -63.966797,79.703125 -4.79388,36.415126 11.073002,72.475717 41.160156,93.542969 C -26.408939,101.7528 12.903002,104.33058 45.482422,87.371094 78.061867,70.411598 98.5,36.729702 98.5,0 l -1,0 C 97.5,36.358763 77.271893,69.694208 45.021484,86.482422 12.7711,103.27062 -26.138558,100.71974 -55.921875,79.865234 -85.705192,59.010731 -101.41148,23.320788 -96.666016,-12.726562 c 4.745471,-36.047379 29.152298,-66.457149 63.31836,-78.892579 l -0.341797,-0.941406 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -33.689453,-92.560547 c -34.51463,12.562298 -59.17291,43.287972 -63.966797,79.703125 -4.79388,36.415126 11.073002,72.475717 41.160156,93.542969 C -26.408939,101.7528 12.903002,104.33058 45.482422,87.371094 78.061867,70.411598 98.5,36.729702 98.5,0 h -1 C 97.5,36.358763 77.271893,69.694208 45.021484,86.482422 12.7711,103.27062 -26.138558,100.71974 -55.921875,79.865234 -85.705192,59.010731 -101.41148,23.320788 -96.666016,-12.726562 c 4.745471,-36.047379 29.152298,-66.457149 63.31836,-78.892579 z"
id="path9548"
inkscape:connector-curvature="0" />
</g>
@ -788,8 +809,8 @@
transform="matrix(-0.5520104,0.3865218,-0.3865218,-0.5520104,75.44881,255.68121)"
id="g9550">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M -90.392578,-29.224609 C -108.32482,26.239503 -72.372731,84.764977 -14.792969,93.841797 42.786793,102.91862 95,58.290934 95,0 L 87,0 C 87,53.526654 39.326733,94.274399 -13.546875,85.939453 -66.420483,77.604507 -99.247837,24.167204 -82.78125,-26.763672 l -7.611328,-2.460937 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M -90.392578,-29.224609 C -108.32482,26.239503 -72.372731,84.764977 -14.792969,93.841797 42.786793,102.91862 95,58.290934 95,0 H 87 C 87,53.526654 39.326733,94.274399 -13.546875,85.939453 -66.420483,77.604507 -99.247837,24.167204 -82.78125,-26.763672 Z"
id="path9552"
inkscape:connector-curvature="0" />
</g>
@ -797,8 +818,8 @@
transform="matrix(0.64414767,-0.19796064,0.19796064,0.64414767,75.44881,255.68121)"
id="g9554">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 87,0 c 0,15.916056 -4.366223,31.525987 -12.623047,45.132812 l 6.839844,4.150391 C 90.232598,34.425622 95,17.379079 95,0 l -8,0 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 87,0 c 0,15.916056 -4.366223,31.525987 -12.623047,45.132812 l 6.839844,4.150391 C 90.232598,34.425622 95,17.379079 95,0 Z"
id="path9556"
inkscape:connector-curvature="0" />
</g>
@ -806,8 +827,8 @@
transform="matrix(0.65338613,0.16492772,-0.16492772,0.65338613,75.44881,255.68121)"
id="g9558">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 87,0 c 0,10.573871 -1.926895,21.058866 -5.6875,30.941406 l 7.476562,2.845703 C 92.895446,22.995894 95,11.546112 95,0 l -8,0 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 87,0 c 0,10.573871 -1.926895,21.058866 -5.6875,30.941406 l 7.476562,2.845703 C 92.895446,22.995894 95,11.546112 95,0 Z"
id="path9560"
inkscape:connector-curvature="0" />
</g>
@ -836,8 +857,8 @@
transform="matrix(-0.5520091,0.38652094,-0.38652094,-0.5520091,74.994764,128.88211)"
id="g4918">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -33.689453,-92.560547 c -34.51463,12.562298 -59.17291,43.287972 -63.966797,79.703125 -4.79388,36.415126 11.073002,72.475717 41.160156,93.542969 C -26.408939,101.7528 12.903002,104.33058 45.482422,87.371094 78.061867,70.411598 98.5,36.729702 98.5,0 l -1,0 C 97.5,36.358763 77.271893,69.694208 45.021484,86.482422 12.7711,103.27062 -26.138558,100.71974 -55.921875,79.865234 -85.705192,59.010731 -101.41148,23.320788 -96.666016,-12.726562 c 4.745471,-36.047379 29.152298,-66.457149 63.31836,-78.892579 l -0.341797,-0.941406 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -33.689453,-92.560547 c -34.51463,12.562298 -59.17291,43.287972 -63.966797,79.703125 -4.79388,36.415126 11.073002,72.475717 41.160156,93.542969 C -26.408939,101.7528 12.903002,104.33058 45.482422,87.371094 78.061867,70.411598 98.5,36.729702 98.5,0 h -1 C 97.5,36.358763 77.271893,69.694208 45.021484,86.482422 12.7711,103.27062 -26.138558,100.71974 -55.921875,79.865234 -85.705192,59.010731 -101.41148,23.320788 -96.666016,-12.726562 c 4.745471,-36.047379 29.152298,-66.457149 63.31836,-78.892579 z"
id="path4920"
inkscape:connector-curvature="0" />
</g>
@ -845,8 +866,8 @@
transform="matrix(-0.5520091,0.38652094,-0.38652094,-0.5520091,74.994764,128.88211)"
id="g4922">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -32.492188,-89.271484 c -33.281739,12.113562 -57.072661,41.756677 -61.695312,76.871093 -4.622648,35.114393 10.686864,69.904081 39.699219,90.21875 29.012355,20.31467 66.939771,22.800961 98.355469,6.447266 C 75.282906,67.911916 95,35.417687 95,0 L 87,0 C 87,32.450174 68.955306,62.186472 40.171875,77.169922 11.388468,92.153359 -23.318737,89.878299 -49.900391,71.265625 -76.482045,52.652951 -90.49118,20.816723 -86.255859,-11.355469 c 4.235324,-32.172219 26.006811,-59.299824 56.5,-70.398437 l -2.736329,-7.517578 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -32.492188,-89.271484 c -33.281739,12.113562 -57.072661,41.756677 -61.695312,76.871093 -4.622648,35.114393 10.686864,69.904081 39.699219,90.21875 29.012355,20.31467 66.939771,22.800961 98.355469,6.447266 C 75.282906,67.911916 95,35.417687 95,0 H 87 C 87,32.450174 68.955306,62.186472 40.171875,77.169922 11.388468,92.153359 -23.318737,89.878299 -49.900391,71.265625 -76.482045,52.652951 -90.49118,20.816723 -86.255859,-11.355469 c 4.235324,-32.172219 26.006811,-59.299824 56.5,-70.398437 z"
id="path4924"
inkscape:connector-curvature="0" />
</g>
@ -854,7 +875,7 @@
transform="matrix(-0.66186887,-0.12665736,0.12665736,-0.66186887,74.994764,128.88211)"
id="g4926">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 95,-0.06445312 87,0.06445312 C 87.649007,40.605232 56.3618,78.451234 16.414062,85.4375 l 1.378907,7.880859 C 61.833648,85.616299 95.715523,44.63136 95,-0.06445312 Z"
id="path4928"
inkscape:connector-curvature="0" />
@ -870,22 +891,21 @@
sodipodi:nodetypes="cccccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.07999992px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="71.796181"
y="153.18427"
id="text4979"
sodipodi:linespacing="125%"><tspan
id="text4979"><tspan
sodipodi:role="line"
id="tspan4981"
x="71.796181"
y="153.18427">MAN IN</tspan></text>
y="153.18427"
style="font-size:15.07999992px;line-height:1.25">MAN IN</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';text-align:center;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';text-align:center;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="71.825653"
y="177.99994"
id="EISManDisplay"
sodipodi:linespacing="125%"
inkscape:label="#text4729"><tspan
sodipodi:role="line"
id="tspan4985"
@ -893,27 +913,27 @@
y="177.99994"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">20.7</tspan></text>
<text
sodipodi:linespacing="125%"
id="text4991"
y="179.7572"
x="119.81293"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="179.7572"
x="119.81293"
id="tspan4993"
sodipodi:role="line">35</tspan></text>
sodipodi:role="line"
style="font-size:15px;line-height:1.25">35</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:FreeMono;-inkscape-font-specification:FreeMono;text-align:start;letter-spacing:-3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="15.085393"
y="179.7572"
id="text4995"
sodipodi:linespacing="125%"><tspan
id="text4995"><tspan
sodipodi:role="line"
id="tspan4997"
x="15.085393"
y="179.7572">10</tspan></text>
y="179.7572"
style="font-size:15px;line-height:1.25">10</tspan></text>
<path
sodipodi:nodetypes="cccccc"
inkscape:transform-center-y="14.830678"
@ -923,6 +943,57 @@
id="EISRPMPointer"
d="m 72.880804,254.60657 -45.643775,34.24255 5.097352,-7.68732 3.560667,1.23288 0.81527,4.41027 -9.283436,1.89708"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.85921997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<g
id="g4934-4"
transform="translate(-1.7743485,-42.731428)">
<rect
style="opacity:1;fill:#00af00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4936-3"
width="92.411247"
height="6.9623003"
x="49.91132"
y="544.22382" />
<g
id="g4940-3"
inkscape:label="#g4833"
transform="translate(0,21.780942)">
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4942-8"
d="m 8.0559648,519.47505 v 12.23313 l 134.8260452,0.0746 -0.0746,-12.03652"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:0%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="63.148544"
y="528.42615"
id="text4944-6"><tspan
sodipodi:role="line"
id="tspan1018"
x="63.148544"
y="528.42615">CHT</tspan></text>
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.5714659,539.5634 0.043695,9.19243 3.48115,3.34929 3.5075231,-3.37566 V 539.54 Z"
id="EISCHTPointer"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
inkscape:label="#path4864" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:150%;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="4.2751164"
y="550.25"
id="EISCHTCylinder"
inkscape:label="#text1022"><tspan
sodipodi:role="line"
id="tspan1020"
x="4.2751164"
y="550.25"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.9375px">1</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -28,13 +28,15 @@ var EIS =
obj.setController(fg1000.EISController.new(obj, svg));
obj.addTextElements(["ManDisplay", "RPMDisplay", "MBusVolts", "EBusVolts"]);
obj.addTextElements(["ManDisplay", "RPMDisplay", "MBusVolts", "EBusVolts", "MBattAmps", "SBattAmps"]);
obj._fuelFlowPointer = PFD.PointerElement.new(obj.pageName, svg, "FuelFlowPointer", 0.0, 22.0, 135);
obj._oilPressurePointer = PFD.PointerElement.new(obj.pageName, svg, "OilPressurePointer", 0.0, 115.0, 135);
obj._oilTempPointer = PFD.PointerElement.new(obj.pageName, svg, "OilTempPointer", 0.0, 245.0, 135);
obj._EGTPointer = PFD.PointerElement.new(obj.pageName, svg, "EGTPointer", 0.0, 1.0, 135);
obj._EGTCylinder = PFD.PointerElement.new(obj.pageName, svg, "EGTCylinder", 0.0, 1.0, 135);
obj._CHTPointer = PFD.PointerElement.new(obj.pageName, svg, "CHTPointer", 0.0, 400, 135);
obj._CHTCylinder = PFD.PointerElement.new(obj.pageName, svg, "CHTCylinder", 0.0, 400, 135);
obj._leftFuelPointer = PFD.PointerElement.new(obj.pageName, svg, "LeftFuelPointer", 0.0, 40.0, 135);
obj._rightFuelPointer = PFD.PointerElement.new(obj.pageName, svg, "RightFuelPointer", 0.0, 40.0, 135);
@ -49,12 +51,16 @@ var EIS =
me.setTextElement("ManDisplay", sprintf("%.1f", engineData.Man));
me.setTextElement("MBusVolts", sprintf("%.01f", engineData.MBusVolts));
me.setTextElement("EBusVolts", sprintf("%.01f", engineData.MBusVolts)); # TODO: Include Emergency Bus
me.setTextElement("MBattAmps", sprintf("%+.01f", engineData.MBattAmps));
me.setTextElement("SBattAmps", sprintf("%+.01f", engineData.MBattAmps)); # TODO: Include Emergency Bus
me._fuelFlowPointer.setValue(engineData.FuelFlowGPH);
me._oilPressurePointer.setValue(engineData.OilPressurePSI);
me._oilTempPointer.setValue(engineData.OilTemperatureF);
me._EGTPointer.setValue(engineData.EGTNorm);
me._EGTCylinder.setValue(engineData.EGTNorm);
me._CHTPointer.setValue(engineData.CHTDegF);
me._CHTCylinder.setValue(engineData.CHTDegF);
me._RPMPointer.setValue(engineData.RPM);
me._ManPointer.setValue(engineData.Man);

View file

@ -41,11 +41,13 @@ var EISController =
"RPM",
"Man",
"MBusVolts",
"MBattAmps",
"EngineHours",
"FuelFlowGPH",
"OilPressurePSI",
"OilTemperatureF",
"EGTNorm",
"CHTDegF",
"VacuumSuctionInHG"];
foreach (var val; elements) {

View file

@ -76,6 +76,7 @@
<pass n="10" include="common-scene.xml">
<name>far</name>
<clear-mask>color depth</clear-mask>
<z-near>100.0</z-near>
</pass>
<pass n="11" include="common-scene.xml">

View file

@ -2,7 +2,9 @@
<PropertyList>
<type>csm</type>
<implicit-attachment-mask/>
<effect-scheme>classic-shadow</effect-scheme>
<clear-mask>depth</clear-mask>
<!-- Only render objects with the CAST_SHADOW bit flag -->
<cull-mask>0x000004</cull-mask>
<render-at-night>false</render-at-night>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rgb16f</format>
<min-filter>linear</min-filter>
<mag-filter>linear</mag-filter>
</PropertyList>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>quad</type>
<effect>Effects/HDR/trivial</effect>
</PropertyList>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>quad</type>
<effect>Effects/HDR/horizontal-blur</effect>
</PropertyList>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>quad</type>
<effect>Effects/HDR/vertical-blur</effect>
</PropertyList>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>csm</type>
<implicit-attachment-mask/>
<effect-scheme>hdr-shadow</effect-scheme>
<clear-mask>depth</clear-mask>
<!-- Only render objects with the CAST_SHADOW bit flag -->
<cull-mask>0x4</cull-mask>
<render-at-night>false</render-at-night>
<attachment>
<buffer>sun-shadowmap-atlas</buffer>
<component>depth</component>
</attachment>
</PropertyList>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>scene</type>
<effect-scheme>hdr-envmap</effect-scheme>
<!-- Only render the skydome and terrain -->
<!-- TODO: Explicitly select the LOD level -->
<cull-mask>0x800</cull-mask>
<binding>
<unit>11</unit>
<buffer>sky-view</buffer>
</binding>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<type>quad</type>
<binding>
<unit>0</unit>
<buffer>envmap</buffer>
</binding>
</PropertyList>

989
Compositor/HDR/hdr.xml Normal file
View file

@ -0,0 +1,989 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>HDR</name>
<!-- XXX: These won't be necessary once we go core profile only -->
<use-osg-uniforms>true</use-osg-uniforms>
<use-vertex-attribute-aliasing>true</use-vertex-attribute-aliasing>
<!--
G-Buffer
.........................................................
: Buffer : Red : Green : Blue : Alpha :
:........:...........:...........:..........:...........:
: RT0 : albedo.r : albedo.g : albedo.b : AO/Cavity :
: RT1 : normal.x : normal.y :
: RT2 : Metalness : Roughness : Clearcoat :
: RT3 : Depth :
:........:...........:...........:..........:...........:
-->
<buffer>
<name>gbuffer0</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rgba8</format>
</buffer>
<buffer>
<name>gbuffer1</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rg16f</format>
</buffer>
<buffer>
<name>gbuffer2</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rgba8</format>
</buffer>
<buffer>
<name>depth</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>depth32f</format>
</buffer>
<!-- HDR lighting result -->
<buffer>
<name>hdr-result</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rgb16f</format>
</buffer>
<!-- Final LDR buffer -->
<buffer>
<name>final</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<format>rgb8</format>
</buffer>
<!-- Atmosphere LUTs -->
<buffer>
<name>sky-view</name>
<type>2d</type>
<width>256</width>
<height>128</height>
<format>rgb16f</format>
<min-filter>linear</min-filter>
<mag-filter>linear</mag-filter>
<wrap-s>repeat</wrap-s>
<wrap-t>clamp-to-edge</wrap-t>
</buffer>
<buffer>
<name>aerial-inscatter</name>
<type>2d</type>
<width>512</width>
<height>32</height>
<format>rgba16f</format>
<min-filter>linear</min-filter>
<mag-filter>linear</mag-filter>
<wrap-s>clamp-to-edge</wrap-s>
<wrap-t>clamp-to-edge</wrap-t>
</buffer>
<buffer>
<name>aerial-transmittance</name>
<type>2d</type>
<width>512</width>
<height>32</height>
<format>rgba16f</format>
<min-filter>linear</min-filter>
<mag-filter>linear</mag-filter>
<wrap-s>clamp-to-edge</wrap-s>
<wrap-t>clamp-to-edge</wrap-t>
</buffer>
<!-- Environment cubemap -->
<buffer>
<name>envmap</name>
<type>cubemap</type>
<width>128</width>
<height>128</height>
<format>rgb16f</format>
<min-filter>linear-mipmap-linear</min-filter>
<mag-filter>linear</mag-filter>
<wrap-s>clamp-to-edge</wrap-s>
<wrap-t>clamp-to-edge</wrap-t>
<mipmap-levels>5</mipmap-levels>
</buffer>
<!-- Shadow map atlas -->
<buffer>
<name>sun-shadowmap-atlas</name>
<type>2d</type>
<width>8192</width>
<height>8192</height>
<format>depth16</format>
<wrap-s>clamp-to-border</wrap-s>
<wrap-t>clamp-to-border</wrap-t>
<min-filter>linear</min-filter>
<mag-filter>linear</mag-filter>
<border-color type="vec4d">1.0 1.0 1.0 1.0</border-color>
<shadow-comparison>true</shadow-comparison>
</buffer>
<!-- Average luminance -->
<buffer>
<name>luminance</name>
<type>2d</type>
<width>1024</width>
<height>1024</height>
<format>r16f</format>
<min-filter>linear-mipmap-nearest</min-filter>
<mag-filter>nearest</mag-filter>
<mipmap-levels>10</mipmap-levels>
</buffer>
<buffer>
<name>prev-luminance</name>
<type>2d</type>
<width>1</width>
<height>1</height>
<format>r16f</format>
<min-filter>nearest</min-filter>
<mag-filter>nearest</mag-filter>
</buffer>
<buffer>
<name>adapted-luminance</name>
<type>2d</type>
<width>1</width>
<height>1</height>
<format>r16f</format>
<min-filter>nearest</min-filter>
<mag-filter>nearest</mag-filter>
</buffer>
<!-- SSAO -->
<buffer>
<name>ao0</name>
<type>2d</type>
<width>screen</width>
<height>screen</height>
<screen-width-scale>0.5</screen-width-scale>
<screen-height-scale>0.5</screen-height-scale>
<format>r8</format>
</buffer>
<!-- Bloom buffers -->
<buffer include="bloom-buffer.xml">
<name>bloom0</name>
<screen-width-scale>0.5</screen-width-scale>
<screen-height-scale>0.5</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom1</name>
<screen-width-scale>0.25</screen-width-scale>
<screen-height-scale>0.25</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom2</name>
<screen-width-scale>0.125</screen-width-scale>
<screen-height-scale>0.125</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom3</name>
<screen-width-scale>0.0625</screen-width-scale>
<screen-height-scale>0.0625</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom0-tmp</name>
<screen-width-scale>0.5</screen-width-scale>
<screen-height-scale>0.5</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom1-tmp</name>
<screen-width-scale>0.25</screen-width-scale>
<screen-height-scale>0.25</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom2-tmp</name>
<screen-width-scale>0.125</screen-width-scale>
<screen-height-scale>0.125</screen-height-scale>
</buffer>
<buffer include="bloom-buffer.xml">
<name>bloom3-tmp</name>
<screen-width-scale>0.0625</screen-width-scale>
<screen-height-scale>0.0625</screen-height-scale>
</buffer>
<!--=======================================================================-->
<!-- Sky-View -->
<pass>
<name>atmos-sky-view</name>
<type>quad</type>
<effect>Effects/HDR/atmos-sky-view</effect>
<attachment>
<component>color</component>
<buffer>sky-view</buffer>
</attachment>
</pass>
<!-- Aerial Perspective -->
<pass>
<name>atmos-aerial-perspective</name>
<type>quad</type>
<effect>Effects/HDR/atmos-aerial-perspective</effect>
<attachment>
<component>color0</component>
<buffer>aerial-inscatter</buffer>
</attachment>
<attachment>
<component>color1</component>
<buffer>aerial-transmittance</buffer>
</attachment>
</pass>
<!--
Environment capture passes
Render to a cubemap using forward rendering. Only render the skydome and
very bare terrain since we want to make as little draw calls as possible.
We also want to avoid doing an OSG cull traversal on many nodes as our
scene graph structure isn't too well optimized.
-->
<pass include="env-capture-pass.xml">
<name>env-capture0</name>
<cubemap-face>0</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>0</face>
<level>0</level>
</attachment>
</pass>
<pass include="env-capture-pass.xml">
<name>env-capture1</name>
<cubemap-face>1</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>1</face>
<level>0</level>
</attachment>
</pass>
<pass include="env-capture-pass.xml">
<name>env-capture2</name>
<cubemap-face>2</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>2</face>
<level>0</level>
</attachment>
</pass>
<pass include="env-capture-pass.xml">
<name>env-capture3</name>
<cubemap-face>3</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>3</face>
<level>0</level>
</attachment>
</pass>
<pass include="env-capture-pass.xml">
<name>env-capture4</name>
<cubemap-face>4</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>4</face>
<level>0</level>
</attachment>
</pass>
<pass include="env-capture-pass.xml">
<name>env-capture5</name>
<cubemap-face>5</cubemap-face>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>5</face>
<level>0</level>
</attachment>
</pass>
<!--
Pre-filter the environment map
We convolve the cubemap for five roughness values and store the results
on the mipmap levels of the cubemap. Later passes will choose which mipmap
level to use for reflections based on the roughness of the surface that's
being lighted/rendered.
Diffuse lighting is approximated by using the highest mipmap level
(roughness=1).
-->
<pass include="env-prefilter-pass.xml">
<name>env-prefilter1</name>
<effect>Effects/HDR/envmap-prefilter1</effect>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>0</face>
<level>1</level>
</attachment>
<attachment>
<component>color1</component>
<buffer>envmap</buffer>
<face>1</face>
<level>1</level>
</attachment>
<attachment>
<component>color2</component>
<buffer>envmap</buffer>
<face>2</face>
<level>1</level>
</attachment>
<attachment>
<component>color3</component>
<buffer>envmap</buffer>
<face>3</face>
<level>1</level>
</attachment>
<attachment>
<component>color4</component>
<buffer>envmap</buffer>
<face>4</face>
<level>1</level>
</attachment>
<attachment>
<component>color5</component>
<buffer>envmap</buffer>
<face>5</face>
<level>1</level>
</attachment>
</pass>
<pass include="env-prefilter-pass.xml">
<name>env-prefilter2</name>
<effect>Effects/HDR/envmap-prefilter2</effect>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>0</face>
<level>2</level>
</attachment>
<attachment>
<component>color1</component>
<buffer>envmap</buffer>
<face>1</face>
<level>2</level>
</attachment>
<attachment>
<component>color2</component>
<buffer>envmap</buffer>
<face>2</face>
<level>2</level>
</attachment>
<attachment>
<component>color3</component>
<buffer>envmap</buffer>
<face>3</face>
<level>2</level>
</attachment>
<attachment>
<component>color4</component>
<buffer>envmap</buffer>
<face>4</face>
<level>2</level>
</attachment>
<attachment>
<component>color5</component>
<buffer>envmap</buffer>
<face>5</face>
<level>2</level>
</attachment>
</pass>
<pass include="env-prefilter-pass.xml">
<name>env-prefilter3</name>
<effect>Effects/HDR/envmap-prefilter3</effect>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>0</face>
<level>3</level>
</attachment>
<attachment>
<component>color1</component>
<buffer>envmap</buffer>
<face>1</face>
<level>3</level>
</attachment>
<attachment>
<component>color2</component>
<buffer>envmap</buffer>
<face>2</face>
<level>3</level>
</attachment>
<attachment>
<component>color3</component>
<buffer>envmap</buffer>
<face>3</face>
<level>3</level>
</attachment>
<attachment>
<component>color4</component>
<buffer>envmap</buffer>
<face>4</face>
<level>3</level>
</attachment>
<attachment>
<component>color5</component>
<buffer>envmap</buffer>
<face>5</face>
<level>3</level>
</attachment>
</pass>
<pass include="env-prefilter-pass.xml">
<name>env-prefilter4</name>
<effect>Effects/HDR/envmap-prefilter4</effect>
<attachment>
<component>color0</component>
<buffer>envmap</buffer>
<face>0</face>
<level>4</level>
</attachment>
<attachment>
<component>color1</component>
<buffer>envmap</buffer>
<face>1</face>
<level>4</level>
</attachment>
<attachment>
<component>color2</component>
<buffer>envmap</buffer>
<face>2</face>
<level>4</level>
</attachment>
<attachment>
<component>color3</component>
<buffer>envmap</buffer>
<face>3</face>
<level>4</level>
</attachment>
<attachment>
<component>color4</component>
<buffer>envmap</buffer>
<face>4</face>
<level>4</level>
</attachment>
<attachment>
<component>color5</component>
<buffer>envmap</buffer>
<face>5</face>
<level>4</level>
</attachment>
</pass>
<!--
G-Buffer pass
This is the main forward pass. Here we skip the rendering of transparent
objects and other geometry that should be forward rendered later (like the
skydome, clouds, etc.)
-->
<pass>
<name>geometry</name>
<type>scene</type>
<effect-scheme>hdr-geometry</effect-scheme>
<clear-mask>depth</clear-mask>
<cull-mask>0xfffff7ff</cull-mask>
<attachment>
<component>color0</component>
<buffer>gbuffer0</buffer>
</attachment>
<attachment>
<component>color1</component>
<buffer>gbuffer1</buffer>
</attachment>
<attachment>
<component>color2</component>
<buffer>gbuffer2</buffer>
</attachment>
<attachment>
<component>depth</component>
<buffer>depth</buffer>
</attachment>
</pass>
<!-- Shadow mapping pre-passes -->
<pass include="csm-pass.xml">
<name>csm0</name>
<near-m>0.1</near-m>
<far-m>3.0</far-m>
<viewport>
<x>0.0</x>
<y>0.0</y>
<width>0.5</width>
<height>0.5</height>
</viewport>
</pass>
<pass include="csm-pass.xml">
<name>csm1</name>
<near-m>3.0</near-m>
<far-m>70.0</far-m>
<viewport>
<x>0.5</x>
<y>0.0</y>
<width>0.5</width>
<height>0.5</height>
</viewport>
</pass>
<pass include="csm-pass.xml">
<name>csm2</name>
<near-m>70.0</near-m>
<far-m>300.0</far-m>
<viewport>
<x>0.0</x>
<y>0.5</y>
<width>0.5</width>
<height>0.5</height>
</viewport>
</pass>
<pass include="csm-pass.xml">
<name>csm3</name>
<near-m>300.0</near-m>
<far-m>1000.0</far-m>
<viewport>
<x>0.5</x>
<y>0.5</y>
<width>0.5</width>
<height>0.5</height>
</viewport>
</pass>
<!-- SSAO (Screen Space Ambient Occlusion) -->
<pass>
<name>ao</name>
<type>quad</type>
<effect>Effects/HDR/ao</effect>
<binding>
<unit>0</unit>
<buffer>depth</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>gbuffer1</buffer>
</binding>
<attachment>
<component>color0</component>
<buffer>ao0</buffer>
</attachment>
</pass>
<!--
Main lighting pass
Combine the G-Buffer and other buffers to compute the final shading value
of the pixel in HDR.
-->
<pass>
<name>lighting</name>
<type>quad</type>
<effect>Effects/HDR/lighting</effect>
<use-shadow-pass>csm0</use-shadow-pass>
<use-shadow-pass>csm1</use-shadow-pass>
<use-shadow-pass>csm2</use-shadow-pass>
<use-shadow-pass>csm3</use-shadow-pass>
<binding>
<unit>0</unit>
<buffer>gbuffer0</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>gbuffer1</buffer>
</binding>
<binding>
<unit>2</unit>
<buffer>gbuffer2</buffer>
</binding>
<binding>
<unit>3</unit>
<buffer>depth</buffer>
</binding>
<binding>
<unit>8</unit>
<buffer>ao0</buffer>
</binding>
<binding>
<unit>9</unit>
<buffer>envmap</buffer>
</binding>
<binding>
<unit>10</unit>
<buffer>sun-shadowmap-atlas</buffer>
</binding>
<binding>
<unit>11</unit>
<buffer>aerial-inscatter</buffer>
</binding>
<binding>
<unit>12</unit>
<buffer>aerial-transmittance</buffer>
</binding>
<attachment>
<component>color0</component>
<buffer>hdr-result</buffer>
</attachment>
</pass>
<!--
Forward pass
Render all objects that couldn't be rendered on the G-Buffer, mainly
transparent objects. This is also done in HDR.
We reuse the depth buffer from the G-Buffer stage so we can take advantage
of early depth testing.
-->
<pass>
<name>forward</name>
<type>scene</type>
<effect-scheme>hdr-forward</effect-scheme>
<binding>
<unit>9</unit>
<buffer>envmap</buffer>
</binding>
<binding>
<unit>11</unit>
<buffer>sky-view</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>hdr-result</buffer>
</attachment>
<attachment>
<component>depth</component>
<buffer>depth</buffer>
</attachment>
</pass>
<!--
Average luminance calculation
1. Convert the RGB values to luminance values and store them on a fixed
size texture.
2. Generate mipmaps for this texture until we are left with a 1x1 texture
at the highest mipmap level. This downsampling process effectively
calculates the geometric mean of luminance.
3. Simulate eye adaptation by smoothing out the transition between
different exposures.
4. Update the previous frame average luminance value for next frame.
-->
<pass>
<name>luminance</name>
<type>quad</type>
<effect>Effects/HDR/luminance</effect>
<binding>
<unit>0</unit>
<buffer>hdr-result</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>luminance</buffer>
<mipmap-generation>true</mipmap-generation>
</attachment>
</pass>
<pass>
<name>adapt-luminance</name>
<type>quad</type>
<effect>Effects/HDR/adapt-luminance</effect>
<binding>
<unit>0</unit>
<buffer>prev-luminance</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>luminance</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>adapted-luminance</buffer>
</attachment>
</pass>
<pass>
<name>copy-prev-luminance</name>
<type>quad</type>
<effect>Effects/HDR/copy-prev-luminance</effect>
<binding>
<unit>0</unit>
<buffer>adapted-luminance</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>prev-luminance</buffer>
</attachment>
</pass>
<!--
Generate a threshold texture for bloom
The HDR lighting buffer is filtered so we are left with an image that only
contains the brightest spots. This image is then progressively
downscaled, blurred and upscaled until we are left with the final bloom
to be applied.
-->
<pass>
<name>bloom-threshold</name>
<type>quad</type>
<effect>Effects/HDR/bloom-threshold</effect>
<binding>
<unit>0</unit>
<buffer>hdr-result</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>adapted-luminance</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom0</buffer>
</attachment>
</pass>
<pass include="bloom-copy-pass.xml">
<name>bloom-copy1</name>
<binding>
<unit>0</unit>
<buffer>bloom0</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom1</buffer>
</attachment>
</pass>
<pass include="bloom-copy-pass.xml">
<name>bloom-copy2</name>
<binding>
<unit>0</unit>
<buffer>bloom1</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom2</buffer>
</attachment>
</pass>
<pass include="bloom-copy-pass.xml">
<name>bloom-copy3</name>
<binding>
<unit>0</unit>
<buffer>bloom2</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom3</buffer>
</attachment>
</pass>
<pass include="bloom-horizontal-blur-pass.xml">
<name>bloom-hblur3</name>
<binding>
<unit>0</unit>
<buffer>bloom3</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom3-tmp</buffer>
</attachment>
</pass>
<pass include="bloom-vertical-blur-pass.xml">
<name>bloom-vblur3</name>
<binding>
<unit>0</unit>
<buffer>bloom3-tmp</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom3</buffer>
</attachment>
</pass>
<pass include="bloom-horizontal-blur-pass.xml">
<name>bloom-hblur2</name>
<binding>
<unit>0</unit>
<buffer>bloom2</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>bloom3</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom2-tmp</buffer>
</attachment>
</pass>
<pass include="bloom-vertical-blur-pass.xml">
<name>bloom-vblur2</name>
<binding>
<unit>0</unit>
<buffer>bloom2-tmp</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom2</buffer>
</attachment>
</pass>
<pass include="bloom-horizontal-blur-pass.xml">
<name>bloom-hblur1</name>
<binding>
<unit>0</unit>
<buffer>bloom1</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>bloom2</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom1-tmp</buffer>
</attachment>
</pass>
<pass include="bloom-vertical-blur-pass.xml">
<name>bloom-vblur1</name>
<binding>
<unit>0</unit>
<buffer>bloom1-tmp</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom1</buffer>
</attachment>
</pass>
<pass include="bloom-horizontal-blur-pass.xml">
<name>bloom-hblur0</name>
<binding>
<unit>0</unit>
<buffer>bloom0</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>bloom1</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom0-tmp</buffer>
</attachment>
</pass>
<pass include="bloom-vertical-blur-pass.xml">
<name>bloom-vblur0</name>
<binding>
<unit>0</unit>
<buffer>bloom0-tmp</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>bloom0</buffer>
</attachment>
</pass>
<!--
Post-processing
Perform miscellaneous post-processing operations, namely tonemapping
and exposure compensation. This process converts the HDR buffer into an
LDR texture ready to be displayed on a screen.
-->
<pass>
<name>post</name>
<type>quad</type>
<effect>Effects/HDR/postprocess</effect>
<binding>
<unit>0</unit>
<buffer>hdr-result</buffer>
</binding>
<binding>
<unit>1</unit>
<buffer>adapted-luminance</buffer>
</binding>
<binding>
<unit>4</unit>
<buffer>bloom0</buffer>
</binding>
<attachment>
<component>color</component>
<buffer>final</buffer>
</attachment>
</pass>
<!--
Final display pass
Perform any post-processing that has to be done in LDR space.
-->
<pass>
<name>display</name>
<type>quad</type>
<effect>Effects/HDR/display</effect>
<binding>
<unit>0</unit>
<buffer>final</buffer>
</binding>
</pass>
<!-- DEBUG PASSES -->
<!--
<pass>
<name>debug-albedo</name>
<type>quad</type>
<effect>Effects/HDR/trivial</effect>
<clear-mask>depth</clear-mask>
<geometry>
<left>0.0</left>
<bottom>0.0</bottom>
<width>0.2</width>
<height>0.2</height>
</geometry>
<binding>
<unit>0</unit>
<buffer>gbuffer0</buffer>
</binding>
</pass>
<pass>
<name>debug-normals</name>
<type>quad</type>
<effect>Effects/HDR/trivial</effect>
<clear-mask>depth</clear-mask>
<geometry>
<left>0.8</left>
<bottom>0.0</bottom>
<width>0.2</width>
<height>0.2</height>
</geometry>
<binding>
<unit>0</unit>
<buffer>gbuffer1</buffer>
</binding>
</pass>
<pass>
<name>debug-materials</name>
<type>quad</type>
<effect>Effects/HDR/trivial</effect>
<clear-mask>depth</clear-mask>
<geometry>
<left>0.0</left>
<bottom>0.8</bottom>
<width>0.2</width>
<height>0.2</height>
</geometry>
<binding>
<unit>0</unit>
<buffer>gbuffer2</buffer>
</binding>
</pass>
<pass>
<name>debug-depth</name>
<type>quad</type>
<effect>Effects/HDR/trivial</effect>
<clear-mask>depth</clear-mask>
<geometry>
<left>0.8</left>
<bottom>0.8</bottom>
<width>0.2</width>
<height>0.2</height>
</geometry>
<binding>
<unit>0</unit>
<buffer>depth</buffer>
</binding>
</pass>
-->
</PropertyList>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/Fallback/hdr-geometry</name>
<technique n="110">
<scheme>hdr-geometry</scheme>
<pass>
<texture-unit>
<unit>0</unit>
<type><use>texture[0]/type</use></type>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
</texture-unit>
<cull-face>back</cull-face>
<program>
<vertex-shader>Shaders/HDR/geometry.vert</vertex-shader>
<fragment-shader>Shaders/HDR/geometry.frag</fragment-shader>
<fragment-shader>Shaders/HDR/gbuffer-include.frag</fragment-shader>
</program>
<uniform>
<name>color_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/Fallback/hdr-shadow</name>
<technique n="120">
<scheme>hdr-shadow</scheme>
<pass>
<texture-unit>
<unit>0</unit>
<type><use>texture[0]/type</use></type>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
</texture-unit>
<color-mask type="vec4d">0 0 0 0</color-mask>
<cull-face>back</cull-face>
<blend>
<active>false</active>
</blend>
<program>
<vertex-shader>Shaders/HDR/geometry-shadow.vert</vertex-shader>
<fragment-shader>Shaders/HDR/geometry-shadow.frag</fragment-shader>
</program>
<uniform>
<name>color_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/adapt-luminance</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/adapt-luminance.vert</vertex-shader>
<fragment-shader>Shaders/HDR/adapt-luminance.frag</fragment-shader>
</program>
<uniform>
<name>prev_lum_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>current_lum_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
</pass>
</technique>
</PropertyList>

23
Effects/HDR/ao.eff Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/ao</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/ao.frag</fragment-shader>
<fragment-shader>Shaders/HDR/gbuffer-include.frag</fragment-shader>
</program>
<uniform>
<name>depth_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>normal_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/atmos-aerial-perspective</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/atmos-aerial-perspective.frag</fragment-shader>
<fragment-shader>Shaders/HDR/atmosphere-include.frag</fragment-shader>
<fragment-shader>Shaders/HDR/gbuffer-include.frag</fragment-shader>
</program>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/atmos-sky-view</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/atmos-sky-view.frag</fragment-shader>
<fragment-shader>Shaders/HDR/atmosphere-include.frag</fragment-shader>
</program>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/bloom-threshold</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/bloom-threshold.frag</fragment-shader>
</program>
<uniform>
<name>hdr_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>lum_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
</pass>
</technique>
</PropertyList>

30
Effects/HDR/blur.eff Normal file
View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/blur</name>
<parameters>
<is-vertical>false</is-vertical>
</parameters>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/blur.frag</fragment-shader>
</program>
<uniform>
<name>tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>prev_pass_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
<uniform>
<name>vertical</name>
<type>bool</type>
<value type="bool"><use>is-vertical</use></value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/copy-prev-luminance</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/adapt-luminance.vert</vertex-shader>
<fragment-shader>Shaders/HDR/copy-prev-luminance.frag</fragment-shader>
</program>
<uniform>
<name>lum_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

17
Effects/HDR/display.eff Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/display</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/display.vert</vertex-shader>
<fragment-shader>Shaders/HDR/display.frag</fragment-shader>
</program>
<uniform>
<name>tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/envmap-prefilter</name>
<parameters>
<roughness type="float">0.0</roughness>
</parameters>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/envmap-prefilter.vert</vertex-shader>
<fragment-shader>Shaders/HDR/envmap-prefilter.frag</fragment-shader>
</program>
<uniform>
<name>envmap</name>
<type>sampler-cube</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>roughness</name>
<type>float</type>
<value><use>roughness</use></value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/envmap-prefilter1</name>
<inherits-from>Effects/HDR/envmap-prefilter</inherits-from>
<parameters>
<roughness type="float">0.25</roughness>
</parameters>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/envmap-prefilter2</name>
<inherits-from>Effects/HDR/envmap-prefilter</inherits-from>
<parameters>
<roughness type="float">0.5</roughness>
</parameters>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/envmap-prefilter3</name>
<inherits-from>Effects/HDR/envmap-prefilter</inherits-from>
<parameters>
<roughness type="float">0.75</roughness>
</parameters>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/envmap-prefilter4</name>
<inherits-from>Effects/HDR/envmap-prefilter</inherits-from>
<parameters>
<roughness type="float">1.0</roughness>
</parameters>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/horizontal-blur</name>
<inherits-from>Effects/HDR/blur</inherits-from>
<parameters>
<is-vertical>false</is-vertical>
</parameters>
</PropertyList>

82
Effects/HDR/lighting.eff Normal file
View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/lighting</name>
<parameters>
<texture n="7">
<image>Textures/PBR/dfg_lut.png</image>
<type>2d</type>
<filter>linear</filter>
<wrap-s>clamp-to-border</wrap-s>
<wrap-t>clamp-to-border</wrap-t>
<internal-format>normalized</internal-format>
</texture>
</parameters>
<technique n="1">
<pass>
<texture-unit>
<unit>7</unit>
<image><use>texture[7]/image</use></image>
<type><use>texture[7]/type</use></type>
<filter><use>texture[7]/filter</use></filter>
<wrap-s><use>texture[7]/wrap-s</use></wrap-s>
<wrap-t><use>texture[7]/wrap-t</use></wrap-t>
<internal-format><use>texture[7]/internal-format</use></internal-format>
</texture-unit>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/lighting.frag</fragment-shader>
<fragment-shader>Shaders/HDR/gbuffer-include.frag</fragment-shader>
</program>
<uniform>
<name>gbuffer0_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>gbuffer1_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
<uniform>
<name>gbuffer2_tex</name>
<type>sampler-2d</type>
<value type="int">2</value>
</uniform>
<uniform>
<name>depth_tex</name>
<type>sampler-2d</type>
<value type="int">3</value>
</uniform>
<uniform>
<name>dfg_lut</name>
<type>sampler-2d</type>
<value type="int">7</value>
</uniform>
<uniform>
<name>ao_tex</name>
<type>sampler-2d</type>
<value type="int">8</value>
</uniform>
<uniform>
<name>prefiltered_envmap</name>
<type>sampler-cube</type>
<value type="int">9</value>
</uniform>
<uniform>
<name>shadow_tex</name>
<type>sampler-2d-shadow</type>
<value type="int">10</value>
</uniform>
<uniform>
<name>aerial_inscatter_lut</name>
<type>sampler-2d</type>
<value type="int">11</value>
</uniform>
<uniform>
<name>aerial_transmittance_lut</name>
<type>sampler-2d</type>
<value type="int">12</value>
</uniform>
</pass>
</technique>
</PropertyList>

17
Effects/HDR/luminance.eff Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/luminance</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/luminance.frag</fragment-shader>
</program>
<uniform>
<name>hdr_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/postprocess</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/postprocess.frag</fragment-shader>
</program>
<uniform>
<name>hdr_tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>lum_tex</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
<uniform>
<name>bloom_tex</name>
<type>sampler-2d</type>
<value type="int">4</value>
</uniform>
</pass>
</technique>
</PropertyList>

17
Effects/HDR/trivial.eff Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/trivial</name>
<technique n="1">
<pass>
<program>
<vertex-shader>Shaders/HDR/trivial.vert</vertex-shader>
<fragment-shader>Shaders/HDR/trivial.frag</fragment-shader>
</program>
<uniform>
<name>tex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/HDR/vertical-blur</name>
<inherits-from>Effects/HDR/blur</inherits-from>
<parameters>
<is-vertical>true</is-vertical>
</parameters>
</PropertyList>

View file

@ -514,7 +514,15 @@
</pass>
</technique>
<!-- Don't use the usual scheme because model-combined requires technique
number 7. We need to place this technique before it. -->
<technique n="1">
<scheme>hdr-geometry</scheme>
</technique>
<!-- TODO: Actually implement a glass shader instead of just hiding it -->
<technique n="2">
<scheme>hdr-forward</scheme>
</technique>
</PropertyList>

View file

@ -6,4 +6,11 @@ and fallback to plain transparency when the model shader is disabled.
<PropertyList>
<name>Effects/model-combined-transparent</name>
<inherits-from>Effects/model-combined</inherits-from>
<technique n="1">
<scheme>hdr-geometry</scheme>
</technique>
<technique n="2">
<scheme>hdr-forward</scheme>
</technique>
</PropertyList>

Some files were not shown because too many files have changed in this diff Show more