Initial upload of V2

pull/9/head
bm98 10 years ago
commit 32594cfca1

22
.gitattributes vendored

@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

36
.gitignore vendored

@ -0,0 +1,36 @@
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Icon must ends with two \r.
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

589
Form1.Designer.cs generated

@ -0,0 +1,589 @@
namespace SCJMapper_V2
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose( bool disposing )
{
timer1.Stop( );
// Unacquire all DirectInput objects.
foreach ( JoystickCls js in m_JS ) js.FinishDX( );
if ( disposing && ( components != null ) ) {
components.Dispose( );
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent( )
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.btDumpList = new System.Windows.Forms.Button();
this.btReset = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.rtb = new System.Windows.Forms.RichTextBox();
this.btGrab = new System.Windows.Forms.Button();
this.btDump = new System.Windows.Forms.Button();
this.panel3 = new System.Windows.Forms.Panel();
this.label56 = new System.Windows.Forms.Label();
this.label55 = new System.Windows.Forms.Label();
this.label57 = new System.Windows.Forms.Label();
this.label54 = new System.Windows.Forms.Label();
this.cbJs3 = new System.Windows.Forms.ComboBox();
this.cbJs2 = new System.Windows.Forms.ComboBox();
this.cbJs1 = new System.Windows.Forms.ComboBox();
this.panel2 = new System.Windows.Forms.Panel();
this.btFind = new System.Windows.Forms.Button();
this.label7 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.btClear = new System.Windows.Forms.Button();
this.lblLastJ = new System.Windows.Forms.Label();
this.lblAction = new System.Windows.Forms.Label();
this.btAssign = new System.Windows.Forms.Button();
this.treeView1 = new System.Windows.Forms.TreeView();
this.tc1 = new System.Windows.Forms.TabControl();
this.tabJS1 = new System.Windows.Forms.TabPage();
this.panel1 = new System.Windows.Forms.Panel();
this.label8 = new System.Windows.Forms.Label();
this.lblTitle = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.buttonExit = new System.Windows.Forms.Button();
this.OFD = new System.Windows.Forms.OpenFileDialog();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.cmCopyPaste = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsiCopy = new System.Windows.Forms.ToolStripMenuItem();
this.tsiPaste = new System.Windows.Forms.ToolStripMenuItem();
this.tsiPReplace = new System.Windows.Forms.ToolStripMenuItem();
this.tsiSelAll = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.tsiOpen = new System.Windows.Forms.ToolStripMenuItem();
this.tsiSaveAs = new System.Windows.Forms.ToolStripMenuItem();
this.SFD = new System.Windows.Forms.SaveFileDialog();
this.IL = new System.Windows.Forms.ImageList(this.components);
this.UC_JoyPanel = new SCJMapper_V2.UC_JoyPanel();
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.tc1.SuspendLayout();
this.tabJS1.SuspendLayout();
this.panel1.SuspendLayout();
this.cmCopyPaste.SuspendLayout();
this.SuspendLayout();
//
// btDumpList
//
this.btDumpList.Location = new System.Drawing.Point(398, 636);
this.btDumpList.Name = "btDumpList";
this.btDumpList.Size = new System.Drawing.Size(94, 26);
this.btDumpList.TabIndex = 24;
this.btDumpList.Text = "Dump List-->";
this.btDumpList.UseVisualStyleBackColor = true;
this.btDumpList.Click += new System.EventHandler(this.btDumpList_Click);
//
// btReset
//
this.btReset.Location = new System.Drawing.Point(397, 679);
this.btReset.Name = "btReset";
this.btReset.Size = new System.Drawing.Size(94, 24);
this.btReset.TabIndex = 23;
this.btReset.Text = "Reset";
this.btReset.Click += new System.EventHandler(this.btReset_Click);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(797, 685);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(214, 13);
this.label3.TabIndex = 22;
this.label3.Text = "Right click above to open the context menu";
//
// rtb
//
this.rtb.AcceptsTab = true;
this.rtb.BackColor = System.Drawing.Color.Ivory;
this.rtb.ContextMenuStrip = this.cmCopyPaste;
this.rtb.DetectUrls = false;
this.rtb.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtb.Location = new System.Drawing.Point(682, 74);
this.rtb.Name = "rtb";
this.rtb.Size = new System.Drawing.Size(439, 608);
this.rtb.TabIndex = 21;
this.rtb.Text = "";
this.rtb.WordWrap = false;
//
// btGrab
//
this.btGrab.Location = new System.Drawing.Point(579, 604);
this.btGrab.Name = "btGrab";
this.btGrab.Size = new System.Drawing.Size(94, 26);
this.btGrab.TabIndex = 19;
this.btGrab.Text = "<-- Grab XML";
this.btGrab.UseVisualStyleBackColor = true;
this.btGrab.Click += new System.EventHandler(this.btGrab_Click);
//
// btDump
//
this.btDump.Location = new System.Drawing.Point(398, 604);
this.btDump.Name = "btDump";
this.btDump.Size = new System.Drawing.Size(94, 26);
this.btDump.TabIndex = 20;
this.btDump.Text = "Dump XML-->";
this.btDump.UseVisualStyleBackColor = true;
this.btDump.Click += new System.EventHandler(this.btDump_Click);
//
// panel3
//
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Controls.Add(this.label56);
this.panel3.Controls.Add(this.label55);
this.panel3.Controls.Add(this.label57);
this.panel3.Controls.Add(this.label54);
this.panel3.Controls.Add(this.cbJs3);
this.panel3.Controls.Add(this.cbJs2);
this.panel3.Controls.Add(this.cbJs1);
this.panel3.Location = new System.Drawing.Point(387, 355);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(289, 134);
this.panel3.TabIndex = 18;
//
// label56
//
this.label56.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label56.Location = new System.Drawing.Point(7, 101);
this.label56.Name = "label56";
this.label56.Size = new System.Drawing.Size(39, 20);
this.label56.TabIndex = 2;
this.label56.Text = "js3";
//
// label55
//
this.label55.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label55.Location = new System.Drawing.Point(7, 74);
this.label55.Name = "label55";
this.label55.Size = new System.Drawing.Size(39, 20);
this.label55.TabIndex = 2;
this.label55.Text = "js2";
//
// label57
//
this.label57.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label57.Location = new System.Drawing.Point(7, 9);
this.label57.Name = "label57";
this.label57.Size = new System.Drawing.Size(267, 20);
this.label57.TabIndex = 2;
this.label57.Text = "SC-Device to Joystick Mapping";
//
// label54
//
this.label54.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label54.Location = new System.Drawing.Point(7, 47);
this.label54.Name = "label54";
this.label54.Size = new System.Drawing.Size(39, 20);
this.label54.TabIndex = 2;
this.label54.Text = "js1";
//
// cbJs3
//
this.cbJs3.DisplayMember = "js1";
this.cbJs3.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs3.FormattingEnabled = true;
this.cbJs3.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs3.Location = new System.Drawing.Point(52, 98);
this.cbJs3.MaxDropDownItems = 4;
this.cbJs3.Name = "cbJs3";
this.cbJs3.Size = new System.Drawing.Size(233, 25);
this.cbJs3.TabIndex = 0;
//
// cbJs2
//
this.cbJs2.DisplayMember = "js1";
this.cbJs2.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs2.FormattingEnabled = true;
this.cbJs2.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs2.Location = new System.Drawing.Point(52, 71);
this.cbJs2.MaxDropDownItems = 4;
this.cbJs2.Name = "cbJs2";
this.cbJs2.Size = new System.Drawing.Size(233, 25);
this.cbJs2.TabIndex = 0;
//
// cbJs1
//
this.cbJs1.DisplayMember = "js1";
this.cbJs1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs1.FormattingEnabled = true;
this.cbJs1.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs1.Location = new System.Drawing.Point(52, 44);
this.cbJs1.MaxDropDownItems = 4;
this.cbJs1.Name = "cbJs1";
this.cbJs1.Size = new System.Drawing.Size(233, 25);
this.cbJs1.TabIndex = 0;
//
// panel2
//
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Controls.Add(this.btFind);
this.panel2.Controls.Add(this.label7);
this.panel2.Controls.Add(this.label6);
this.panel2.Controls.Add(this.btClear);
this.panel2.Controls.Add(this.lblLastJ);
this.panel2.Controls.Add(this.lblAction);
this.panel2.Controls.Add(this.btAssign);
this.panel2.Location = new System.Drawing.Point(387, 495);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(289, 103);
this.panel2.TabIndex = 17;
//
// btFind
//
this.btFind.Location = new System.Drawing.Point(190, 37);
this.btFind.Name = "btFind";
this.btFind.Size = new System.Drawing.Size(84, 20);
this.btFind.TabIndex = 12;
this.btFind.Text = "Find 1st.";
this.btFind.UseVisualStyleBackColor = true;
this.btFind.Click += new System.EventHandler(this.btFind_Click);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(7, 37);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(25, 13);
this.label7.TabIndex = 3;
this.label7.Text = "Ctrl.";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(7, 17);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(31, 13);
this.label6.TabIndex = 3;
this.label6.Text = "Cmd.";
//
// btClear
//
this.btClear.Location = new System.Drawing.Point(190, 67);
this.btClear.Name = "btClear";
this.btClear.Size = new System.Drawing.Size(94, 25);
this.btClear.TabIndex = 2;
this.btClear.Text = "Clear";
this.btClear.UseVisualStyleBackColor = true;
this.btClear.Click += new System.EventHandler(this.btClear_Click);
//
// lblLastJ
//
this.lblLastJ.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblLastJ.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblLastJ.Location = new System.Drawing.Point(52, 37);
this.lblLastJ.Name = "lblLastJ";
this.lblLastJ.Size = new System.Drawing.Size(135, 20);
this.lblLastJ.TabIndex = 1;
this.lblLastJ.Text = "...";
//
// lblAction
//
this.lblAction.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblAction.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblAction.Location = new System.Drawing.Point(52, 17);
this.lblAction.Name = "lblAction";
this.lblAction.Size = new System.Drawing.Size(222, 20);
this.lblAction.TabIndex = 1;
this.lblAction.Text = "...";
//
// btAssign
//
this.btAssign.Location = new System.Drawing.Point(10, 67);
this.btAssign.Name = "btAssign";
this.btAssign.Size = new System.Drawing.Size(94, 25);
this.btAssign.TabIndex = 0;
this.btAssign.Text = "Assign";
this.btAssign.UseVisualStyleBackColor = true;
this.btAssign.Click += new System.EventHandler(this.btAssign_Click);
//
// treeView1
//
this.treeView1.HotTracking = true;
this.treeView1.ImageKey = "Map";
this.treeView1.ImageList = this.IL;
this.treeView1.Location = new System.Drawing.Point(12, 74);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageKey = "Selected";
this.treeView1.Size = new System.Drawing.Size(369, 629);
this.treeView1.TabIndex = 16;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
//
// tc1
//
this.tc1.Controls.Add(this.tabJS1);
this.tc1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
this.tc1.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tc1.HotTrack = true;
this.tc1.ItemSize = new System.Drawing.Size(62, 22);
this.tc1.Location = new System.Drawing.Point(387, 74);
this.tc1.Multiline = true;
this.tc1.Name = "tc1";
this.tc1.SelectedIndex = 0;
this.tc1.Size = new System.Drawing.Size(289, 275);
this.tc1.TabIndex = 15;
this.tc1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tc1_DrawItem);
//
// tabJS1
//
this.tabJS1.Controls.Add(this.UC_JoyPanel);
this.tabJS1.Location = new System.Drawing.Point(4, 26);
this.tabJS1.Name = "tabJS1";
this.tabJS1.Padding = new System.Windows.Forms.Padding(3);
this.tabJS1.Size = new System.Drawing.Size(281, 245);
this.tabJS1.TabIndex = 0;
this.tabJS1.Text = "Joystick 1";
//
// panel1
//
this.panel1.Controls.Add(this.label8);
this.panel1.Controls.Add(this.lblTitle);
this.panel1.Controls.Add(this.label4);
this.panel1.Location = new System.Drawing.Point(2, 2);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1109, 66);
this.panel1.TabIndex = 14;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(353, 42);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(54, 13);
this.label8.TabIndex = 2;
this.label8.Text = "by Cassini";
//
// lblTitle
//
this.lblTitle.AutoSize = true;
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTitle.Location = new System.Drawing.Point(226, 8);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(185, 25);
this.lblTitle.TabIndex = 1;
this.lblTitle.Text = "SC Joystick Mapper";
//
// label4
//
this.label4.Image = ((System.Drawing.Image)(resources.GetObject("label4.Image")));
this.label4.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.label4.Location = new System.Drawing.Point(0, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(220, 66);
this.label4.TabIndex = 0;
//
// buttonExit
//
this.buttonExit.Location = new System.Drawing.Point(577, 679);
this.buttonExit.Name = "buttonExit";
this.buttonExit.Size = new System.Drawing.Size(94, 24);
this.buttonExit.TabIndex = 13;
this.buttonExit.Text = "Exit";
this.buttonExit.Click += new System.EventHandler(this.buttonExit_Click);
//
// OFD
//
this.OFD.DefaultExt = "xml";
this.OFD.FileName = "Open Map File";
this.OFD.Filter = "Mapping files|*.xml|All files|*.*";
this.OFD.ReadOnlyChecked = true;
this.OFD.SupportMultiDottedExtensions = true;
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// cmCopyPaste
//
this.cmCopyPaste.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsiCopy,
this.tsiPaste,
this.tsiPReplace,
this.tsiSelAll,
this.toolStripSeparator1,
this.tsiOpen,
this.tsiSaveAs});
this.cmCopyPaste.Name = "cmCopyPaste";
this.cmCopyPaste.Size = new System.Drawing.Size(170, 142);
//
// tsiCopy
//
this.tsiCopy.Name = "tsiCopy";
this.tsiCopy.Size = new System.Drawing.Size(169, 22);
this.tsiCopy.Text = "Copy";
this.tsiCopy.Click += new System.EventHandler(this.tsiCopy_Click);
//
// tsiPaste
//
this.tsiPaste.Name = "tsiPaste";
this.tsiPaste.Size = new System.Drawing.Size(169, 22);
this.tsiPaste.Text = "Paste";
this.tsiPaste.Click += new System.EventHandler(this.tsiPaste_Click);
//
// tsiPReplace
//
this.tsiPReplace.Name = "tsiPReplace";
this.tsiPReplace.Size = new System.Drawing.Size(169, 22);
this.tsiPReplace.Text = "Paste (Replace all)";
this.tsiPReplace.Click += new System.EventHandler(this.tsiPReplace_Click);
//
// tsiSelAll
//
this.tsiSelAll.Name = "tsiSelAll";
this.tsiSelAll.Size = new System.Drawing.Size(169, 22);
this.tsiSelAll.Text = "Select All";
this.tsiSelAll.Click += new System.EventHandler(this.tsiSelAll_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(166, 6);
//
// tsiOpen
//
this.tsiOpen.Name = "tsiOpen";
this.tsiOpen.Size = new System.Drawing.Size(169, 22);
this.tsiOpen.Text = "Open...";
this.tsiOpen.Click += new System.EventHandler(this.tsiOpen_Click);
//
// tsiSaveAs
//
this.tsiSaveAs.Name = "tsiSaveAs";
this.tsiSaveAs.Size = new System.Drawing.Size(169, 22);
this.tsiSaveAs.Text = "Save as...";
this.tsiSaveAs.Click += new System.EventHandler(this.tsiSaveAs_Click);
//
// SFD
//
this.SFD.DefaultExt = "xml";
this.SFD.Filter = "Mapping files|*.xml|Text files|*.txt|All files|*.*";
this.SFD.SupportMultiDottedExtensions = true;
//
// IL
//
this.IL.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("IL.ImageStream")));
this.IL.TransparentColor = System.Drawing.Color.Transparent;
this.IL.Images.SetKeyName(0, "Map");
this.IL.Images.SetKeyName(1, "Selected");
this.IL.Images.SetKeyName(2, "J");
this.IL.Images.SetKeyName(3, "K");
this.IL.Images.SetKeyName(4, "X");
this.IL.Images.SetKeyName(5, "P");
this.IL.Images.SetKeyName(6, "Z");
//
// UC_JoyPanel
//
this.UC_JoyPanel.Location = new System.Drawing.Point(0, 6);
this.UC_JoyPanel.Name = "UC_JoyPanel";
this.UC_JoyPanel.Size = new System.Drawing.Size(278, 234);
this.UC_JoyPanel.TabIndex = 0;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1132, 715);
this.Controls.Add(this.btDumpList);
this.Controls.Add(this.btReset);
this.Controls.Add(this.label3);
this.Controls.Add(this.rtb);
this.Controls.Add(this.btGrab);
this.Controls.Add(this.btDump);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.treeView1);
this.Controls.Add(this.tc1);
this.Controls.Add(this.panel1);
this.Controls.Add(this.buttonExit);
this.Name = "MainForm";
this.Text = "SC Joystick Mapper";
this.Load += new System.EventHandler(this.MainForm_Load);
this.panel3.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.tc1.ResumeLayout(false);
this.tabJS1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.cmCopyPaste.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btDumpList;
private System.Windows.Forms.Button btReset;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.RichTextBox rtb;
private System.Windows.Forms.Button btGrab;
private System.Windows.Forms.Button btDump;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Label label56;
private System.Windows.Forms.Label label55;
private System.Windows.Forms.Label label57;
private System.Windows.Forms.Label label54;
private System.Windows.Forms.ComboBox cbJs3;
private System.Windows.Forms.ComboBox cbJs2;
private System.Windows.Forms.ComboBox cbJs1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button btFind;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button btClear;
private System.Windows.Forms.Label lblLastJ;
private System.Windows.Forms.Label lblAction;
private System.Windows.Forms.Button btAssign;
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.TabControl tc1;
private System.Windows.Forms.TabPage tabJS1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label lblTitle;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button buttonExit;
private System.Windows.Forms.OpenFileDialog OFD;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.ContextMenuStrip cmCopyPaste;
private System.Windows.Forms.ToolStripMenuItem tsiCopy;
private System.Windows.Forms.ToolStripMenuItem tsiPaste;
private System.Windows.Forms.ToolStripMenuItem tsiPReplace;
private System.Windows.Forms.ToolStripMenuItem tsiSelAll;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem tsiOpen;
private System.Windows.Forms.ToolStripMenuItem tsiSaveAs;
private System.Windows.Forms.SaveFileDialog SFD;
private System.Windows.Forms.ImageList IL;
private UC_JoyPanel UC_JoyPanel;
}
}

@ -0,0 +1,367 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using SharpDX;
using SharpDX.DirectInput;
using System.IO;
namespace SCJMapper_V2
{
public partial class MainForm : Form
{
///<remarks>
/// Holds the DXInput Joystick List
///</remarks>
private List<JoystickCls> m_JS = new List<JoystickCls>( );
///<remarks>
/// Holds the ActionTree that manages the TreeView and the action lists
///</remarks>
private ActionTree m_AT = null;
#region Main Form Handling
public MainForm( )
{
try {
// Load the icon from our resources
System.Resources.ResourceManager resources = new System.Resources.ResourceManager( this.GetType( ) );
this.Icon = ( ( System.Drawing.Icon )( resources.GetObject( "$this.Icon" ) ) );
}
catch {
; // well...
}
InitializeComponent( );
// some applic initialization
rtb.SelectionTabs = new int[] { 10, 20, 30, 40, 50, 60 }; // short tabs
String version = Application.ProductVersion; // get the version information
lblTitle.Text += " - V " + version.Substring( 0, version.IndexOf( ".", version.IndexOf( "." ) + 1 ) ); // get the first two elements
}
/// <summary>
/// Handle the load event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_Load( object sender, System.EventArgs e )
{
if ( !InitDirectInput( ) )
Close( );
timer1.Start( ); // this one polls the joysticks to show the props
}
/// <summary>
/// Handles the Exit button
/// </summary>
private void buttonExit_Click( object sender, System.EventArgs e )
{
Close( );
}
/// <summary>
/// Fancy tab coloring with ownerdraw to paint the callout buttons
/// </summary>
private void tc1_DrawItem( object sender, System.Windows.Forms.DrawItemEventArgs e )
{
try {
//This line of code will help you to change the apperance like size,name,style.
Font f;
//For background color
Brush backBrush = new System.Drawing.SolidBrush( MyColors.JColor[e.Index] );
//For forground color
Brush foreBrush = new SolidBrush( System.Drawing.Color.Black );
//This construct will hell you to deside which tab page have current focus
//to change the style.
if ( e.Index == this.tc1.SelectedIndex ) {
//This line of code will help you to change the apperance like size,name,style.
f = new Font( e.Font, FontStyle.Bold | FontStyle.Bold );
f = new Font( e.Font, FontStyle.Bold );
Rectangle tabRect = tc1.Bounds;
Region tabRegion = new Region( tabRect );
Rectangle TabItemRect = new Rectangle( 0, 0, 0, 0 );
for ( int nTanIndex = 0; nTanIndex < tc1.TabCount; nTanIndex++ ) {
TabItemRect = Rectangle.Union( TabItemRect, tc1.GetTabRect( nTanIndex ) );
}
tabRegion.Exclude( TabItemRect );
e.Graphics.FillRegion( backBrush, tabRegion );
}
else {
f = e.Font;
foreBrush = new SolidBrush( e.ForeColor );
}
//To set the alignment of the caption.
string tabName = this.tc1.TabPages[e.Index].Text;
StringFormat sf = new StringFormat( );
sf.Alignment = StringAlignment.Center;
//Thsi will help you to fill the interior portion of
//selected tabpage.
e.Graphics.FillRectangle( backBrush, e.Bounds );
Rectangle r = e.Bounds;
r = new Rectangle( r.X, r.Y + 3, r.Width, r.Height - 3 );
e.Graphics.DrawString( tabName, f, foreBrush, r, sf );
sf.Dispose( );
if ( e.Index == this.tc1.SelectedIndex ) {
f.Dispose( );
backBrush.Dispose( );
}
else {
backBrush.Dispose( );
foreBrush.Dispose( );
}
}
catch ( Exception Ex ) {
MessageBox.Show( Ex.Message.ToString( ), "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Information );
}
}
#endregion
/// <summary>
/// Resets the Action Tree
/// </summary>
private void InitActionTree( )
{
// build TreeView and the ActionMaps
m_AT = new ActionTree( );
m_AT.Ctrl = treeView1; // the ActionTree owns the TreeView control
m_AT.LoadTree( ); // Init
// default JS to Joystick mapping - can be changed and reloaded from XML
if ( tc1.TabCount > 0 ) { cbJs1.SelectedIndex = 0; m_AT.ActionMaps.js1 = cbJs1.Text; }
if ( tc1.TabCount > 1 ) { cbJs2.SelectedIndex = 1; m_AT.ActionMaps.js2 = cbJs2.Text; }
if ( tc1.TabCount > 2 ) { cbJs3.SelectedIndex = 2; m_AT.ActionMaps.js3 = cbJs3.Text; }
}
/// <summary>
/// Aquire the DInput joystick devices
/// </summary>
/// <returns></returns>
public bool InitDirectInput( )
{
// Enumerate joysticks in the system.
int tabs = 0;
cbJs1.Items.Clear( ); cbJs2.Items.Clear( ); cbJs3.Items.Clear( ); // JS dropdowns init
// Initialize DirectInput
var directInput = new DirectInput( );
// scan the Input for attached devices
foreach ( DeviceInstance instance in directInput.GetDevices( DeviceClass.GameControl, DeviceEnumerationFlags.AttachedOnly ) ) {
// Create the device interface
Joystick jsDevice = new Joystick( directInput, instance.InstanceGuid );
JoystickCls js = null;
// we have the first tab made as reference so TabPage[0] already exists
if ( tabs == 0 ) {
// first panel - The Tab content exists already
js = new JoystickCls( jsDevice, this, UC_JoyPanel ); // does all device related activities for that particular item
}
else {
// setup the further tab contents along the reference one in TabPage[0] (the control named UC_JoyPanel)
tc1.TabPages.Add("Joystick " + (tabs+1).ToString());
UC_JoyPanel uUC_JoyPanelNew = new UC_JoyPanel( );
tc1.TabPages[tabs].Controls.Add( uUC_JoyPanelNew );
uUC_JoyPanelNew.Size = UC_JoyPanel.Size;
uUC_JoyPanelNew.Location = UC_JoyPanel.Location;
js = new JoystickCls( jsDevice, this, uUC_JoyPanelNew ); // does all device related activities for that particular item
}
m_JS.Add( js ); // add to joystick list
tc1.TabPages[tabs].Tag = js.DevName; // used to find the tab via JS mapping
tc1.TabPages[tabs].BackColor = MyColors.JColor[tabs]; // each tab has its own color
cbJs1.Items.Add( js.DevName ); cbJs2.Items.Add( js.DevName ); cbJs3.Items.Add( js.DevName ); // populate DropDowns with the JS name
// next tab
tabs++;
if ( tabs == 8 ) break; // cannot load more JSticks than predefined Tabs
}
/*
// TEST CREATE ALL 8 TABS
for ( int i=(tabs+1); i < 9; i++ ) {
tc1.TabPages.Add( "Joystick " + i.ToString( ) );
}
*/
if ( tabs == 0 ) {
MessageBox.Show( "Unable to create a joystick device. Program will exit.", "No joystick found" );
return false;
}
InitActionTree( );
return true;
}
/// <summary>
/// Create the jsN Joystick string from mapping (or from the JS index above item 3)
/// </summary>
/// <returns></returns>
private String JSStr( )
{
if ( (String)tc1.SelectedTab.Tag == ( string )cbJs1.SelectedItem ) return JoystickCls.JSTag( 1 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs2.SelectedItem ) return JoystickCls.JSTag( 2 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs3.SelectedItem ) return JoystickCls.JSTag( 3 );
return JoystickCls.JSTag( tc1.SelectedIndex+1 ); // return the Joystick number
}
#region Event Handling
private void timer1_Tick( object sender, System.EventArgs e )
{
foreach ( JoystickCls jsc in m_JS ) { jsc.GetData( ); } // poll the devices
lblLastJ.Text = JSStr( ) + m_JS[tc1.SelectedIndex].GetLastChange( ); // show last handled JS control
}
private void treeView1_AfterSelect( object sender, TreeViewEventArgs e )
{
if ( e.Node.Level == 1 ) {
// actions cannot have a blank - if there is one it's mapped
if ( e.Node.Text.IndexOf( " ", 0 ) > 0 ) {
lblAction.Text = e.Node.Text.Substring( 0, e.Node.Text.IndexOf( " ", 0 ) ); // get only the action part as Cmd.
}
else {
lblAction.Text = e.Node.Text;
}
}
}
private void btAssign_Click( object sender, EventArgs e )
{
m_AT.UpdateSelectedItem( lblLastJ.Text );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
private void btClear_Click( object sender, EventArgs e )
{
m_AT.UpdateSelectedItem( "" );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
private void btDump_Click( object sender, EventArgs e )
{
rtb.Text = String.Format( "<!-- {0} - SC Joystick Mapping -->\n{1}", DateTime.Now, m_AT.ActionMaps.toXML( ) );
btDump.BackColor = btClear.BackColor; btDump.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
btGrab.BackColor = btClear.BackColor; btGrab.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
}
private void btDumpList_Click( object sender, EventArgs e )
{
rtb.Text = String.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActions( ) );
}
private void btGrab_Click( object sender, EventArgs e )
{
m_AT.ActionMaps.fromXML( rtb.Text );
m_AT.ReloadCtrl( );
// JS mapping for the first 3 items can be changed and reloaded from XML
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js1 ) ) {
int i = cbJs1.FindString( m_AT.ActionMaps.js1 );
if ( i >= 0 ) cbJs1.SelectedIndex = i;
}
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js2 ) ) {
int i = cbJs2.FindString( m_AT.ActionMaps.js2 );
if ( i >= 0 ) cbJs2.SelectedIndex = i;
}
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js3 ) ) {
int i = cbJs3.FindString( m_AT.ActionMaps.js3 );
if ( i >= 0 ) cbJs3.SelectedIndex = i;
}
btDump.BackColor = btClear.BackColor; btDump.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
btGrab.BackColor = btClear.BackColor; btGrab.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
}
private void tsiCopy_Click( object sender, EventArgs e )
{
rtb.Focus( );
if ( rtb.SelectionLength > 0 ) rtb.Copy( );
}
private void tsiPaste_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.Paste( DataFormats.GetFormat( DataFormats.UnicodeText ) );
btGrab.BackColor = MyColors.DirtyColor;
}
private void tsiSelAll_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.SelectAll( );
}
private void tsiPReplace_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.SelectAll( );
rtb.Paste( DataFormats.GetFormat( DataFormats.UnicodeText ) );
btGrab.BackColor = MyColors.DirtyColor;
}
private void btReset_Click( object sender, EventArgs e )
{
InitActionTree( ); // start over
}
private void tsiOpen_Click( object sender, EventArgs e )
{
if ( OFD.ShowDialog( this ) == System.Windows.Forms.DialogResult.OK ) {
using ( StreamReader istr = new StreamReader( OFD.OpenFile( ) ) ) {
rtb.Text = istr.ReadToEnd( ); // load the complete XML from the file into the textbox
btGrab.BackColor = MyColors.DirtyColor;
}
}
}
private void tsiSaveAs_Click( object sender, EventArgs e )
{
if ( SFD.ShowDialog( this ) == System.Windows.Forms.DialogResult.OK ) {
using ( StreamWriter istr = new StreamWriter( SFD.OpenFile( ) ) ) {
istr.Write( rtb.Text ); // just dump the whole XML text
}
}
}
private void btFind_Click( object sender, EventArgs e )
{
m_AT.FindCtrl( lblLastJ.Text ); // find the action for a Control (joystick input)
}
#endregion
}
}

@ -0,0 +1,467 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmCopyPaste.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>602, 17</value>
</metadata>
<metadata name="IL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>800, 17</value>
</metadata>
<data name="IL.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
DgAAAk1TRnQBSQFMAgEBBwEAATABBQEwAQUBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yYAAXQFRgHyFQAB/wH0
CwABBxUAAUYHJQHyFAACQwEVCQABQwEVAUMCAAHwCwAB8AQAAUYJJQHyEwABQwIVCAAB8gFDARUBQwEA
AgcB7QgAAf8BkgG8Ae8CAAFGAiUB/wFMAyUCGgIlARsRAAEHAUMBFQETAUMB9AUAAQcBFQEUARUBQwEA
AfcBvAHtCQAB9wHwAZIBAAF0AiUB9gL/AUwBJQH2Av8DJREAAfQBQwEVAeoB+QIPAx8BQwEUAR8BFAEV
AUMB/wHtAfAB7AHqAW0B7wMAAe8BDgHsAe8B8AHsAQABRgIlAUYD/wH2A/8DJRIAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKxIAAUMBFQES
ASABDgEPAR8CIAIVAREBFAEQAUMBAAFtAuwB7QEUAW0BkgHsAZIBbQHqAe0B7AHtAQ4BAAFGBEwB9gP/
AXQETBIAAUMB7AEUAQ8CHwEAAQ4BDwEBAR4BRAFDARABEQIAAfcB7wHrAu8B7QGSAe0B7wH3AZEC7wIA
AUYDTAH2Bf8BdANMEgABvAEUAQ4BEAFDAUUBHgEBAUMBHgFvAQ4CEAMAAuwBvAHsAQcBvAFtArwBjQG8
ARUBvAIAAUYCTAEaA/8BTAP/A0wTAAFDARABbQEVAQEBEQEVAQ4BHgELAR8CDgMAAfIB8wHsAfIF9AHy
ARIB8gHzAgAB8wFTAUwBmgL/A0wC/wJMAU0TAAEVAhEBHgEABw4FAAG8AvAFAALwAbwBEQMAAfMBUwpN
FQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlTNwAB8wdTlAAg/wcAAUMBAAHyFgAB/w7x
AfAG/wH0AygG/wUAAQ4BkQGuApEB6gH/BwAL/wIAAf8B8QNrAYsBkQGLBIoBSQFKAZEB8Qb/ASgDKQEo
Bf8EAAFDAZoBegFSAZEBtQESAfEGAAH3AQcBvAIHAu8DBwHwAfIBBwEAAf8B8QIGAYsBkAG7BYsCUAFr
AfEG/wFQBCkBKAT/AwABDwEHAZECcwGRAbUBtAFDAfQEAAH/AbwB7wO8AwcBvAEHAfAB8gHxAQAB/wHx
AgYBiwGQAbsEkAFsAVABUQFrAfEH/wVQAXMD/wEAARQBUgHzArwBBwH3AZECtAEOAfQEAAH/AbwB7wPw
ArwC8AG8AfEB8gHwAQAB/wHxAosBkAGzAbsBKQGzAXEDUAGQAWsB8QL/AXMFKAVQAXMC/wIAARoB9AH3
ARIBQwERAbsBkQF6AewB/wLxAfMBAAH/Ae8B9wG8BvABvALxAbwBAAH/AfIDkAGzAbsCswNRASkBswFr
AfIB/w1QAZkB/wIAAQ4B7wETAeoBFQEPAZEBDwEOBfEBAAH/Ae0BvAnyAfABBwEAAf8B8gSzAboBiwEp
BHgBUQFrAfIB/w5QAf8EAAFtAREBQwEQARUB8QL/AfQC/wIAAf8B9wHxCPIB8QHwAbwBAAH/AfIEswG6
AbsBKAJ4AVABeAEoAWsB8gH/ASkMUAEoAf8EAAG7AbQBkQFtCQAB/wGSAfEB8gbzAfIC8QHwAQAB/wHz
BLMBuQG6AdwBtAFJAlABSQFrAfMC/wFQBXgBVwRRASkC/wMAAfMBAAGRARMLAAGSAfEB8gbzAfIB8QHy
AfMBAAH/AfMGuQG6AdsD3AHbAWsB8wf/ASgEVwFQA/8DAAHwAQ4B7AEVCwAB7QHxAfIG8wHyAfEB8gH/
AQAB/wHzDNoBiwHzBv8BmQR4AVcE/wEAAfEBAAEHAe0B7AGuAfIKAAEHAvIG8wHyAfEB8gIAAf8P8wb/
ASkEeAX/AQABbgF5AbwB9wETAfAMAALyBvMB8gHxAfQCAAH/CPMB8gH3AfIB9wHyAfcB8wb/ARwDeAb/
Ae0B6wG8Au8OAALxBvIC8QMAAf8B8w3/Ae8H/wGZAVAI/wETAfAB6hwAIP8CAAHzAfcB/xsAAUIBTQE+
BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAT/AfgBDwIAAZ8B/QL/AfABBwIAAY8B+AHf
Af0B4AEDAgABjwHwAY8B8AHAAQECAAEDAeABBwHwAYABAQUAAoABAQIAAYABAAGAAQABgAEBAgABgAEA
AYABAAGAAQECAAGAAQABgAEAAYABAQIAAYABAQGAAQABgAEBAgABwAEBAcABAQGAAQECAAHAAQEBwwHh
AcABAwIAAeABAwHnAeMB4AEHAgAE/wHwAQ8CAAb/AgAG/wYAAfwBPwL/BAAB+AEPAeABAwQAAfABDwHA
AQEEAAHAAQcBgAEBBAABgAEHAYABAQQAAYABAAGAAQEEAAHAAQABgAEBBAAB4AEBAYABAQQAAeAB/wGA
AQEEAAHgAf8BwAEBBAAB4QH/AcABAQQAAYAB/wHAAQMEAAGBAf8B4AEDBAABAwH/AeABBwQAAQcD/wQA
AccD/ws=
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
x1//2Q==
</value>
</data>
<metadata name="OFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>439, 17</value>
</metadata>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>515, 17</value>
</metadata>
<metadata name="SFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>727, 17</value>
</metadata>
</root>

@ -0,0 +1,130 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace SCJMapper_V2
{
/// <summary>
/// Maintains an action - something like:
///
/// <action name="v_view_cycle_fwd">
/// <rebind device="joystick" input="js2_button2" />
/// </action>
/// </summary>
class ActionCls
{
// Static items to have this mapping in only one place
/// <summary>
/// Returns the Device ID i.e. the single letter to tag a device
/// </summary>
/// <param name="device">The device name from the CryFile</param>
/// <returns>The single UCase device ID letter</returns>
static public String DevID( String device )
{
switch ( device.ToLower( ) ) {
case "keyboard": return "K";
case "joystick": return "J";
case "xboxpad": return "X";
case "ps3pad": return "P";
default: return "Z";
}
}
/// <summary>
/// Returns the Device name from the ID
/// </summary>
/// <param name="device">The single UCase device ID letter</param>
/// <returns>The device name from the CryFile</returns>
static public String DeviceFromID( String devID )
{
switch ( devID ) {
case "K": return "keyboard";
case "J": return "joystick";
case "X": return "xboxpad";
case "P": return "ps3pad";
default: return "unknown";
}
}
// Class items
public String key { get; set; } // the key is the "Daction" formatted item (as we can have the same name multiple times)
public String name { get; set; }
public String device { get; set; }
public String input { get; set; }
/// <summary>
/// ctor
/// </summary>
public ActionCls( )
{
device = "joystick"; // what else ??
}
/// <summary>
/// Merge action is simply copying the new input control
/// </summary>
/// <param name="newAc"></param>
public void Merge(ActionCls newAc)
{
input = newAc.input;
}
/// <summary>
/// Dump the action as partial XML nicely formatted
/// </summary>
/// <returns>the action as XML fragment</returns>
public String toXML( )
{
String r = "";
if (! String.IsNullOrEmpty(input) ) r = String.Format( "\t<action name=\"{0}\">\n\t\t\t<rebind device=\"{1}\" input=\"{2}\" />\n\t\t</action>\n", name, device, input );
return r;
}
/// <summary>
/// Read an action from XML - do some sanity check
/// </summary>
/// <param name="xml">the XML action fragment</param>
/// <returns>True if an action was decoded</returns>
public Boolean fromXML( String xml )
{
XmlReaderSettings settings = new XmlReaderSettings( );
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(new StringReader( xml ), settings);
reader.Read( );
if ( reader.Name == "action" ) {
if ( reader.HasAttributes ) {
name = reader["name"];
// Move the reader back to the element node.
reader.ReadStartElement( "action" );
}
else {
return false;
}
}
if ( reader.Name == "rebind" ) {
if ( reader.HasAttributes ) {
device = reader["device"];
input = reader["input"];
key = DevID( device ) + name; // unique id of the action
// Move the reader back to the element node.
reader.ReadStartElement( "rebind" );
}
}
else {
return false;
}
return true;
}
}
}

@ -0,0 +1,102 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace SCJMapper_V2
{
/// <summary>
/// Maintains an actionmap - something like:
///
/// <actionmap name="spaceship_view">
/// <action name="v_view_cycle_fwd">
/// <rebind device="joystick" input="js2_button2" />
/// </action>
/// <action name="v_view_dynamic_focus_toggle">
/// <rebind device="joystick" input="js2_button25" />
/// </action>
/// </actionmap>
/// </summary>
class ActionMapCls : List<ActionCls>
{
public String name { get; set; }
/// <summary>
/// Merge the given Map with this Map
/// new ones are ignored - we don't learn from XML input for the time beeing
/// </summary>
/// <param name="newAcm"></param>
public void Merge( ActionMapCls newAcm )
{
// do we find all actions in the new list that are like the new ones in our list ?
foreach ( ActionCls newAc in newAcm ) {
ActionCls AC = this.Find( delegate( ActionCls ac ) {
return ac.key == newAc.key;
} );
if ( AC == null ) {
; // this.Add( newAc ); // no, add it
}
else {
AC.Merge( newAc ); // yes, merge it
}
}
}
/// <summary>
/// Dump the actionmap as partial XML nicely formatted
/// </summary>
/// <returns>the action as XML fragment</returns>
public String toXML( )
{
String r = String.Format( "\t<actionmap name=\"{0}\">\n", name );
foreach ( ActionCls ac in this ) {
String x = ac.toXML( );
if ( !String.IsNullOrEmpty(x) ) r += String.Format( "\t{0}", x);
}
r += String.Format( "\t</actionmap>\n");
return r;
}
/// <summary>
/// Read an actionmap from XML - do some sanity check
/// </summary>
/// <param name="xml">the XML action fragment</param>
/// <returns>True if an action was decoded</returns>
public Boolean fromXML( String xml )
{
XmlReaderSettings settings = new XmlReaderSettings( );
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create( new StringReader( xml ), settings );
reader.Read( );
if ( reader.Name == "actionmap" ) {
if ( reader.HasAttributes ) {
name = reader["name"];
}
else {
return false;
}
}
reader.Read( ); // move to next element
String x = reader.ReadOuterXml( );
while ( ! String.IsNullOrEmpty(x) ) {
ActionCls ac = new ActionCls( );
if ( ac.fromXML( x ) ) {
this.Add( ac ); // add to list
}
x=reader.ReadOuterXml();
}
return true;
}
}
}

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace SCJMapper_V2
{
/// <summary>
/// Maintains the complete ActionMaps - something like:
///
/// <ActionMaps version="0" >
/// <actionmap name="spaceship_view">
/// <action name="v_view_cycle_fwd">
/// <rebind device="joystick" input="js2_button2" />
/// </action>
/// ...
/// </actionmap>
/// </ActionMaps>
/// </summary>
class ActionMapsCls : List<ActionMapCls>
{
public String version { get; set; }
// own additions for JS mapping - should not harm..
public String js1 { get; set; }
public String js2 { get; set; }
public String js3 { get; set; }
public String js4 { get; set; }
public String js5 { get; set; }
public String js6 { get; set; }
public String js7 { get; set; }
public String js8 { get; set; }
/// <summary>
/// ctor
/// </summary>
public ActionMapsCls( )
{
version = "0";
js1 = ""; js2 = ""; js3 = ""; js4 = ""; js5 = ""; js6 = ""; js7 = ""; js8 = "";
}
/// <summary>
/// Merge the given Map with this Map
/// new ones are ignored - we don't learn from XML input for the time beeing
/// </summary>
/// <param name="newAcm"></param>
private void Merge( ActionMapCls newAcm )
{
// do we find an actionmap like the new one in our list ?
ActionMapCls ACM = this.Find( delegate( ActionMapCls acm ) {
return acm.name == newAcm.name;
} );
if ( ACM == null ) {
; // this.Add( newAcm ); // no, add new
}
else {
ACM.Merge( newAcm ); // yes, merge it
}
}
/// <summary>
/// Dump the ActionMaps as partial XML nicely formatted
/// </summary>
/// <returns>the action as XML fragment</returns>
public String toXML( )
{
String r = String.Format( "<ActionMaps version=\"{0}\" ", version);
if ( !String.IsNullOrEmpty( js1 ) ) r += String.Format( "js1=\"{0}\" ", js1 );
if ( !String.IsNullOrEmpty( js2 ) ) r += String.Format( "js2=\"{0}\" ", js2 );
if ( !String.IsNullOrEmpty( js3 ) ) r += String.Format( "js3=\"{0}\" ", js3 );
if ( !String.IsNullOrEmpty( js4 ) ) r += String.Format( "js4=\"{0}\" ", js4 );
if ( !String.IsNullOrEmpty( js5 ) ) r += String.Format( "js5=\"{0}\" ", js5 );
if ( !String.IsNullOrEmpty( js6 ) ) r += String.Format( "js6=\"{0}\" ", js6 );
if ( !String.IsNullOrEmpty( js7 ) ) r += String.Format( "js7=\"{0}\" ", js7 );
if ( !String.IsNullOrEmpty( js8 ) ) r += String.Format( "js8=\"{0}\" ", js8 );
r += String.Format( ">\n");
foreach ( ActionMapCls amc in this ) {
r += String.Format( "{0}\n", amc.toXML( ) );
}
r += String.Format( "</ActionMaps>\n" );
return r;
}
/// <summary>
/// Read an ActionMaps from XML - do some sanity check
/// </summary>
/// <param name="xml">the XML action fragment</param>
/// <returns>True if an action was decoded</returns>
public Boolean fromXML( String xml )
{
XmlReaderSettings settings = new XmlReaderSettings( );
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create( new StringReader( xml ), settings );
reader.Read( );
if ( reader.Name == "ActionMaps" ) {
if ( reader.HasAttributes ) {
version = reader["version"];
// get the joystick mapping if there is one
js1 = reader["js1"];
js2 = reader["js2"];
js3 = reader["js3"];
js4 = reader["js4"];
js5 = reader["js5"];
js6 = reader["js6"];
js7 = reader["js7"];
js8 = reader["js8"];
}
else {
return false;
}
}
reader.Read( ); // move to next element
String x = reader.ReadOuterXml( );
while ( !String.IsNullOrEmpty( x ) ) {
ActionMapCls acm = new ActionMapCls( );
if ( acm.fromXML( x ) ) {
this.Merge( acm ); // merge list
}
x = reader.ReadOuterXml( );
}
return true;
}
}
}

@ -0,0 +1,223 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
namespace SCJMapper_V2
{
class ActionTree
{
public ActionMapsCls ActionMaps { get; set; }
public TreeView Ctrl { get; set; }
public Boolean Dirty { get; set; }
// Load MappingVars.csv into the ActionList and create the Control TreeView
public void LoadTree( )
{
TreeNode tn = null;
TreeNode[] cnl = { };
TreeNode cn = null;
TreeNode topNode = null;
ActionCls ac = null;
ActionMapCls acm = null;
ActionMaps = new ActionMapsCls( );
Ctrl.Nodes.Clear( );
// read the action items into the TreeView
DProfileReader dpReader = new DProfileReader( ); // we may read a profile
TextReader txReader = null;
// 1st choice is a user given MappingVars.csv file in the appdir
if ( File.Exists( "MappingVars.csv" ) ) {
txReader = new StreamReader( "MappingVars.csv" );
}
// second choice a defaultProfile.xml in the app dir
else {
if ( File.Exists( "defaultProfile.xml" ) ) {
using ( StreamReader sr = new StreamReader( "defaultProfile.xml" ) ) {
String buff = sr.ReadToEnd( );
dpReader.fromXML( buff );
}
if ( dpReader.ValidContent ) {
txReader = new StringReader( dpReader.CSVMap );
}
}
}
// last resort is the built in list
if ( txReader == null ) {
var defFile = SCJMapper_V2.Properties.Resources.MappingVars;
txReader = new StringReader( defFile );
}
using ( TextReader sr = txReader ) {
String buf = sr.ReadLine( );
while ( !String.IsNullOrEmpty( buf ) ) {
String[] elem = buf.Split( new char[] { ';', ',', ' ' } );
if ( elem.Length > 1 ) {
// must have 2 elements min
Array.Resize( ref cnl, 0 );
acm = new ActionMapCls( ); acm.name = elem[0]; // get actionmap name
// process items
for ( int ei=1; ei < elem.Length; ei++ ) {
if ( !String.IsNullOrEmpty( elem[ei] ) ) {
String action = elem[ei].Substring( 1 );
cn = new TreeNode( action ); cn.Name = elem[ei]; // name with the key it to find it..
String devID = elem[ei].Substring( 0, 1 );
String device = ActionCls.DeviceFromID( devID );
cn.ImageKey = devID;
Array.Resize( ref cnl, cnl.Length + 1 ); cnl[cnl.Length - 1] = cn;
ac = new ActionCls( ); ac.key = cn.Name; ac.name = action; ac.device = device;
acm.Add( ac ); // add to our map
}
}//for
tn = new TreeNode( acm.name, cnl ); tn.Name = acm.name; // name it to find it..
tn.ImageIndex = 0; tn.NodeFont = new Font( Ctrl.Font, FontStyle.Bold );
Ctrl.BackColor = Ctrl.BackColor; // fix for defect TreeView (cut off bold text)
Ctrl.Nodes.Add( tn ); // add to control
if ( topNode == null ) topNode = tn; // once to keep the start of list
ActionMaps.Add( acm ); // add to our map
}// if valid line
buf = sr.ReadLine( );
}//while
}
// fix for defect TreeView (cut off bold text at last element -despite the BackColor fix) add another and delete it
tn = new TreeNode( "DUMMY" ); tn.Name = "DUMMY";
tn.ImageIndex = 0; tn.NodeFont = new Font( Ctrl.Font, FontStyle.Bold );
Ctrl.BackColor = Ctrl.BackColor; // fix for defect TreeView (cut off bold text)
Ctrl.Nodes.Add( tn ); // add to control
Ctrl.Nodes.RemoveByKey( "DUMMY" );
// fix for defect TreeView (cut off bold text)
txReader = null;
Ctrl.ExpandAll( );
if ( topNode != null ) Ctrl.TopNode = topNode;
Dirty = false;
}
// input is like js1_button3
public void UpdateSelectedItem( String input )
{
if ( Ctrl.SelectedNode == null ) return;
if ( Ctrl.SelectedNode.Level == 1 ) {
String[] elements = Ctrl.SelectedNode.Text.Split( );
if ( String.IsNullOrEmpty( input ) ) {
Ctrl.SelectedNode.Text = elements[0];
Ctrl.SelectedNode.BackColor = Color.White;
}
else {
Ctrl.SelectedNode.Text = elements[0] + " - " + input;
int jNum = JoystickCls.JSNum( input );
Ctrl.SelectedNode.BackColor = MyColors.JColor[jNum - 1]; // color list is 0 based
}
ActionMapCls ACM = ActionMaps.Find( delegate( ActionMapCls acm ) {
return acm.name == Ctrl.SelectedNode.Parent.Name;
} );
if ( ACM != null ) {
ActionCls AC = ACM.Find( delegate( ActionCls ac ) {
return ac.key == Ctrl.SelectedNode.Name;
} );
if ( AC != null ) {
AC.input = input;
Dirty = true;
}
}
}
}
/// <summary>
/// Loads the mappings back into the treeview control
/// Note: this takes a while as the list grows...
/// </summary>
public void ReloadCtrl( )
{
Ctrl.BeginUpdate( );
foreach ( ActionMapCls acm in ActionMaps ) {
try {
TreeNode amTn = Ctrl.Nodes[acm.name]; // get the map node
// find the item to reload into the treeview
foreach ( ActionCls ac in acm ) {
try {
TreeNode tnl = amTn.Nodes[ac.key];
String[] elements = tnl.Text.Split( );
if ( String.IsNullOrEmpty( ac.input ) ) {
// grabed input is not mapped
tnl.Text = elements[0];
tnl.BackColor = Color.Transparent;
}
else {
int jNum = JoystickCls.JSNum( ac.input );
tnl.Text = elements[0] + " - " + ac.input;
tnl.BackColor = MyColors.JColor[jNum - 1]; // color list is 0 based
}
}
catch {
; // key not found
}
}
}
catch {
; // map key not found ??
}
}
Ctrl.EndUpdate( );
}
public void FindCtrl( String ctrl )
{
Boolean found = false;
foreach ( TreeNode tn in Ctrl.Nodes ) {
// have to search nodes of nodes
foreach ( TreeNode stn in tn.Nodes ) {
if ( stn.Text.Contains( ctrl ) ) {
Ctrl.SelectedNode = stn;
Ctrl.SelectedNode.EnsureVisible( );
found = true;
break;
}
}
if ( found ) break; // exit all loops
}
}
public String ReportActions( )
{
String repList = "";
if ( !String.IsNullOrEmpty( ActionMaps.js1 ) ) repList += String.Format( "** js1 = {0}\n", ActionMaps.js1 );
if ( !String.IsNullOrEmpty( ActionMaps.js2 ) ) repList += String.Format( "** js2 = {0}\n", ActionMaps.js2 );
if ( !String.IsNullOrEmpty( ActionMaps.js3 ) ) repList += String.Format( "** js3 = {0}\n", ActionMaps.js3 );
if ( !String.IsNullOrEmpty( ActionMaps.js4 ) ) repList += String.Format( "** js4 = {0}\n", ActionMaps.js4 );
if ( !String.IsNullOrEmpty( ActionMaps.js5 ) ) repList += String.Format( "** js5 = {0}\n", ActionMaps.js5 );
if ( !String.IsNullOrEmpty( ActionMaps.js6 ) ) repList += String.Format( "** js6 = {0}\n", ActionMaps.js6 );
if ( !String.IsNullOrEmpty( ActionMaps.js7 ) ) repList += String.Format( "** js7 = {0}\n", ActionMaps.js7 );
if ( !String.IsNullOrEmpty( ActionMaps.js8 ) ) repList += String.Format( "** js8 = {0}\n", ActionMaps.js8 );
repList += String.Format( "\n");
foreach ( ActionMapCls acm in ActionMaps ) {
String rep = String.Format( "*** {0}\n", acm.name );
repList += rep;
foreach ( ActionCls ac in acm ) {
if ( !String.IsNullOrEmpty( ac.input ) ) {
rep = String.Format( " {0} - {1} - {2}\n", ac.name.PadRight( 35 ), ac.device.PadRight( 10 ), ac.input );
repList += rep;
}
}
repList += String.Format( "\n" );
}
return repList;
}
}
}

@ -0,0 +1,289 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
namespace SCJMapper_V2
{
/// <summary>
/// should read the default profile - may be replacing the MappingVars once
/// </summary>
class DProfileReader
{
public Boolean ValidContent { get; set; }
private Stack<String> m_nodeNameStack = null; // element name stack - keeping track where we are
// state for the parser
enum EState
{
idle = 0,
inActionMap,
}
private EState m_state = EState.idle;
// an action map and its actions
class Action
{
public String name { get; set; } // the action name
public String input { get; set; } // the input method K,J,X,P
public String defBinding { get; set; } // the default binding - may be useful
public String keyName
{ get { return input + name; } } // prep for TreView usage - create a key from input+name
}
class ActionMap : List<Action> // carries the action list
{
public String name { get; set; } // the map name
};
Dictionary<String, ActionMap> m_aMap = null; // key would be the actionmap name
ActionMap m_currentMap = null;
// actionmap names to gather (do we need them to be cofigurable ??)
private String[] c_exMaps = { "spaceship_general", "spaceship_view", "spaceship_movement", "spaceship_targeting", "spaceship_weapons", "spaceship_missiles",
"spaceship_defensive", "spaceship_auto_weapons", "spaceship_radar" , "spaceship_hud" , "IFCS_controls" , "" , "" , "" };
public DProfileReader( )
{
ValidContent = false; // default
}
/// <summary>
/// Returns the collected actionmaps as CSV (same format as MappingVars)
/// i.e. one line per actionmap where the first element is the actionmap and following are actions lead by the input Key in uppercase (JKXP)
/// </summary>
public String CSVMap
{
get
{
String buf = "";
foreach ( ActionMap am in m_aMap.Values ) {
buf += am.name + ";";
foreach ( Action a in am ) {
buf += a.keyName + ";";
}
buf += String.Format( "\n" );
}
return buf;
}
}
/// <summary>
/// Read one 'empty' XML element
///
/// <name [attr="" ..] />
///
/// </summary>
/// <param name="xr">An XML reader @ StartElement</param>
/// <returns>True if reading can continue</returns>
private Boolean ReadEmptyElement( XmlReader xr )
{
Dictionary<String, String> attr = new Dictionary<string, string>( );
String eName = xr.Name;
switch ( xr.NodeType ) {
case XmlNodeType.Element:
//Console.Write( "<{0}", xr.Name );
while ( xr.MoveToNextAttribute( ) ) {
attr.Add( xr.Name, xr.Value ); // save the attributes
//Console.Write( " {0}='{1}'", xr.Name, xr.Value );
}
if ( m_state == EState.inActionMap ) {
// processing a valid action map - collect actions
if ( eName.ToLower( ) == "action" ) {
// this is an action.. - collect it
// we collect actions for each input ie for K,J,X and P
if ( attr.ContainsKey( "joystick" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "J";
ac.defBinding = attr["joystick"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "keyboard" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "K";
ac.defBinding = attr["keyboard"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "xboxpad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "X";
ac.defBinding = attr["xboxpad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "ps3pad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "P";
ac.defBinding = attr["ps3pad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
}
}// if inmap
//Console.Write( ">\n" );
m_nodeNameStack.Pop( );
break;
case XmlNodeType.Text:
//Console.Write( xr.Value );
break;
case XmlNodeType.EndElement:
//Console.Write( "</{0}>\n", xr.Name );
break;
}
return true;
}
/// <summary>
/// Read one XML element
///
/// <name attr="">
/// [ Xelement ]
/// </name>
///
/// </summary>
/// <param name="xr">An XML reader @ StartElement</param>
/// <returns>True if reading can continue</returns>
private Boolean ReadElement( XmlReader xr )
{
Dictionary<String, String> attr = new Dictionary<string, string>( );
String eName = xr.Name;
switch ( xr.NodeType ) {
case XmlNodeType.Element:
//Console.Write( "<{0}", xr.Name );
while ( xr.MoveToNextAttribute( ) ) {
attr.Add( xr.Name, xr.Value ); // save the attributes
//Console.Write( " {0}='{1}'", xr.Name, xr.Value );
}
// now here we could have an actionmap start
if ( m_state == EState.idle ) {
if ( m_nodeNameStack.Peek( ).ToLower( ) == "actionmap" ) {
// check for a valid one
String mapName = attr["name"];
String item = Array.Find( c_exMaps, delegate( String sstr ) {
return sstr == mapName;
} );
if ( !String.IsNullOrEmpty( item ) ) {
// finally.... it is a valid actionmap
m_currentMap = new ActionMap( );
m_currentMap.name = mapName;
m_aMap.Add( mapName, m_currentMap ); // add to our inventory
m_state = EState.inActionMap; // now we are in and processing the map
}
}
}
else if ( m_state == EState.inActionMap ) {
// processing a valid action map - collect actions
if ( eName.ToLower( ) == "action" ) {
// this is an action.. - collect it
// we collect actions for each input ie for K,J,X and P
if ( attr.ContainsKey( "joystick" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "J";
ac.defBinding = attr["joystick"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "keyboard" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "K";
ac.defBinding = attr["keyboard"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "xboxpad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "X";
ac.defBinding = attr["xboxpad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "ps3pad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "P";
ac.defBinding = attr["ps3pad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
}
}
//Console.Write( ">\n" );
break;
case XmlNodeType.Text:
//Console.Write( xr.Value );
break;
case XmlNodeType.EndElement:
//Console.Write( "</{0}>\n", xr.Name );
break;
}
return true;
}
/// <summary>
/// Read the xml part
/// </summary>
/// <param name="xr"></param>
/// <returns></returns>
private Boolean ReadXML( XmlReader xr )
{
Boolean retVal = true;
do {
if ( xr.IsStartElement( ) ) {
m_nodeNameStack.Push( xr.Name );
if ( xr.IsEmptyElement )
retVal = retVal && ReadEmptyElement( xr );
else {
retVal = retVal && ReadElement( xr );
}
}
else if ( xr.NodeType == XmlNodeType.EndElement ) {
//Console.Write( "</{0}>\n", xr.Name );
String exitElement = m_nodeNameStack.Pop( );
if ( m_state == EState.inActionMap )
if ( exitElement.ToLower( ) == "actionmap" ) m_state = EState.idle; // finished
}
} while ( xr.Read( ) );
if ( m_nodeNameStack.Count == 0 )
return retVal && true;
else
return false;
}
/// <summary>
/// Read the defaultProfile.xml - do some sanity check
/// </summary>
/// <param name="xml">the XML action defaultProfile Content</param>
/// <returns>True if an action was decoded</returns>
public Boolean fromXML( String xml )
{
XmlReaderSettings settings = new XmlReaderSettings( );
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create( new StringReader( xml ), settings );
m_nodeNameStack = new Stack<String>( );
m_aMap = new Dictionary<String, ActionMap>( );
reader.Read( );
ValidContent = ReadXML( reader );
return ValidContent;
}
}
}

@ -0,0 +1,317 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using SharpDX;
using SharpDX.DirectInput;
namespace SCJMapper_V2
{
/// <summary>
/// Handles one JS device as DXInput device
/// In addition provide some static tools to handle JS props here in one place
/// Also owns the GUI i.e. the user control that shows all values
/// </summary>
class JoystickCls
{
private Joystick m_device;
private JoystickState m_state = new JoystickState( );
private JoystickState m_prevState = new JoystickState( );
private Control m_hwnd;
private int m_numPOVs = 0; // static counter for UpdateControls
private int m_sliderCount = 0; // static counter for UpdateControls
private String m_lastItem = "";
private UC_JoyPanel m_jPanel = null; // the GUI panel
/// <summary>
/// Returns a CryEngine compatible hat direction
/// </summary>
/// <param name="value">The Hat value</param>
/// <returns>The direction string</returns>
private String HatDir( int value )
{
// Hats have a 360deg -> 36000 value reporting
if ( value == 0 ) return "up";
if ( value == 9000 ) return "right";
if ( value == 18000 ) return "down";
if ( value == 27000 ) return "left";
return "";
}
/// <summary>
/// Returns properly formatted jsn_ string
/// </summary>
/// <param name="jsNum">The JS number</param>
/// <returns>The formatted JS name for the CryEngine XML</returns>
static public String JSTag( int jsNum )
{
return "js" + jsNum.ToString( ) + "_";
}
/// <summary>
/// Extract the JS number from a JS string
/// </summary>
/// <param name="jsTag">The JS string</param>
/// <returns>The JS number</returns>
static public int JSNum( String jsTag )
{
int retNum=0;
if ( !String.IsNullOrEmpty( jsTag ) ) {
int.TryParse( jsTag.Substring( 2, 1 ), out retNum );
}
return retNum;
}
/// <summary>
/// The povides the JS ProductName property
/// </summary>
public String DevName { get { return m_device.Properties.ProductName; } }
public int AxisCount { get { return m_device.Capabilities.AxeCount; } }
public int ButtonCount { get { return m_device.Capabilities.ButtonCount; } }
public int POVCount { get { return m_device.Capabilities.PovCount; } }
/// <summary>
/// ctor and init
/// </summary>
/// <param name="device">A DXInput device</param>
/// <param name="hwnd">The WinHandle of the main window</param>
/// <param name="panel">The respective JS panel to show the properties</param>
public JoystickCls( Joystick device, Control hwnd, UC_JoyPanel panel )
{
m_device = device;
m_hwnd = hwnd;
m_jPanel = panel;
// Set BufferSize in order to use buffered data.
m_device.Properties.BufferSize = 128;
m_jPanel.Caption = DevName;
m_jPanel.nAxis = AxisCount.ToString( );
m_jPanel.nButtons = ButtonCount.ToString( );
m_jPanel.nPOVs = POVCount.ToString( );
// Set the data format to the c_dfDIJoystick pre-defined format.
//m_device.SetDataFormat( DeviceDataFormat.Joystick );
// Set the cooperative level for the device.
m_device.SetCooperativeLevel( m_hwnd, CooperativeLevel.Exclusive | CooperativeLevel.Foreground );
// Enumerate all the objects on the device.
foreach ( DeviceObjectInstance d in m_device.GetObjects( ) ) {
// For axes that are returned, set the DIPROP_RANGE property for the
// enumerated axis in order to scale min/max values.
if ( ( 0 != ( d.ObjectId.Flags & DeviceObjectTypeFlags.Axis ) ) ) {
// Set the range for the axis.
m_device.Properties.Range = new InputRange( -1000, +1000 );
}
// Update the controls to reflect what objects the device supports.
UpdateControls( d );
}
}
/// <summary>
/// Shutdown device access
/// </summary>
public void FinishDX( )
{
if ( null != m_device )
m_device.Unacquire( );
}
/// <summary>
/// Enable the properties that are supported by the device
/// </summary>
/// <param name="d"></param>
private void UpdateControls( DeviceObjectInstance d )
{
// Set the UI to reflect what objects the joystick supports.
if ( ObjectGuid.XAxis == d.ObjectType ) {
m_jPanel.Xe = true;
m_jPanel.Xname = d.Name + ":";
}
if ( ObjectGuid.YAxis == d.ObjectType ) {
m_jPanel.Ye = true;
m_jPanel.Yname = d.Name + ":";
}
if ( ObjectGuid.ZAxis == d.ObjectType ) {
m_jPanel.Ze = true;
m_jPanel.Zname = d.Name + ":";
}
if ( ObjectGuid.RxAxis == d.ObjectType ) {
m_jPanel.Xre = true;
m_jPanel.Xrname = d.Name + ":";
}
if ( ObjectGuid.RyAxis == d.ObjectType ) {
m_jPanel.Yre = true;
m_jPanel.Yrname = d.Name + ":";
}
if ( ObjectGuid.RzAxis == d.ObjectType ) {
m_jPanel.Zre = true;
m_jPanel.Zrname = d.Name + ":";
}
if ( ObjectGuid.Slider == d.ObjectType ) {
switch ( m_sliderCount++ ) {
case 0:
m_jPanel.S1e = true;
m_jPanel.S1name = d.Name + ":";
break;
case 1:
m_jPanel.S2e = true;
m_jPanel.S2name = d.Name + ":";
break;
}
}
if ( ObjectGuid.PovController == d.ObjectType ) {
switch ( m_numPOVs++ ) {
case 0:
m_jPanel.H1e = true;
m_jPanel.H1name = d.Name + ":";
break;
case 1:
m_jPanel.H2e = true;
m_jPanel.H2name = d.Name + ":";
break;
case 2:
m_jPanel.H3e = true;
m_jPanel.H3name = d.Name + ":";
break;
case 3:
m_jPanel.H4e = true;
m_jPanel.H4name = d.Name + ":";
break;
}
}
}
/// <summary>
/// Find the last change the user did on that device
/// </summary>
/// <returns>The last action as CryEngine compatible string</returns>
public String GetLastChange( )
{
if ( m_state.X != m_prevState.X ) m_lastItem = "x";
if ( m_state.Y != m_prevState.Y ) m_lastItem = "y";
if ( m_state.Z != m_prevState.Z ) m_lastItem = "throttlez"; // this is not z because it usually maps the throttle
if ( m_state.RotationX != m_prevState.RotationX ) m_lastItem = "rotx";
if ( m_state.RotationY != m_prevState.RotationY ) m_lastItem = "roty";
if ( m_state.RotationZ != m_prevState.RotationZ ) m_lastItem = "rotz";
int[] slider = m_state.Sliders;
int[] pslider = m_prevState.Sliders;
if ( slider[0] != pslider[0] ) m_lastItem = "slider1";
if ( slider[1] != pslider[1] ) m_lastItem = "slider2";
int[] pov = m_state.PointOfViewControllers;
int[] ppov = m_prevState.PointOfViewControllers;
if ( pov[0] >= 0 ) if ( pov[0] != ppov[0] ) m_lastItem = "hat1_" + HatDir( pov[0] );
if ( pov[1] >= 0 ) if ( pov[1] != ppov[1] ) m_lastItem = "hat2_" + HatDir( pov[0] );
if ( pov[2] >= 0 ) if ( pov[2] != ppov[2] ) m_lastItem = "hat3_" + HatDir( pov[0] );
if ( pov[3] >= 0 ) if ( pov[3] != ppov[3] ) m_lastItem = "hat4_" + HatDir( pov[0] );
bool[] buttons = m_state.Buttons;
for ( int bi=0; bi < buttons.Length; bi++ ) {
if ( buttons[bi] ) m_lastItem = "button" + ( bi + 1 ).ToString( );
}
return m_lastItem;
}
/// <summary>
/// Show the current props in the GUI
/// </summary>
private void UpdateUI( )
{
// This function updated the UI with joystick state information.
string strText = null;
m_jPanel.X = m_state.X.ToString( );
m_jPanel.Y = m_state.Y.ToString( );
m_jPanel.Z = m_state.Z.ToString( );
m_jPanel.Xr = m_state.RotationX.ToString( );
m_jPanel.Yr = m_state.RotationY.ToString( );
m_jPanel.Zr = m_state.RotationZ.ToString( );
int[] slider = m_state.Sliders;
m_jPanel.S1 = slider[0].ToString( );
m_jPanel.S2 = slider[1].ToString( );
int[] pov = m_state.PointOfViewControllers;
m_jPanel.H1 = pov[0].ToString( );
m_jPanel.H2 = pov[1].ToString( );
m_jPanel.H3 = pov[2].ToString( );
m_jPanel.H4 = pov[3].ToString( );
// Fill up text with which buttons are pressed
bool[] buttons = m_state.Buttons;
int button = 0;
foreach ( bool b in buttons ) {
if ( b )
strText += ( button + 1 ).ToString( "00 " ); // buttons are 1 based
button++;
}
m_jPanel.Button = strText;
}
/// <summary>
/// Collect the current data from the device
/// </summary>
public void GetData( )
{
// Make sure there is a valid device.
if ( null == m_device )
return;
// Poll the device for info.
try {
m_device.Poll( );
}
catch ( SharpDXException e ) {
if ( ( e.ResultCode == ResultCode.NotAcquired ) || ( e.ResultCode == ResultCode.InputLost ) ) {
// Check to see if either the app needs to acquire the device, or
// if the app lost the device to another process.
try {
// Acquire the device.
m_device.Acquire( );
}
catch ( SharpDXException ) {
// Failed to acquire the device.
// This could be because the app doesn't have focus.
return;
}
}
}
// Get the state of the device - retaining the previous state to find the lates change
m_prevState = m_state;
try { m_state = m_device.GetCurrentState( ); }
// Catch any exceptions. None will be handled here,
// any device re-aquisition will be handled above.
catch ( SharpDXException ) {
return;
}
UpdateUI( ); // and update the GUI
}
}
}

@ -0,0 +1,973 @@
//-----------------------------------------------------------------------------
// File: Main.cs
//
// Desc: The Joystick sample obtains and displays joystick data.
//
// Copyright (c) Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
using System;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
using Microsoft.DirectX.DirectInput;
using Microsoft.DirectX;
using System.Drawing;
using System.IO;
namespace Joystick
{
public class MainClass : System.Windows.Forms.Form
{
#region Window control declarations
private System.Windows.Forms.Button buttonExit;
private System.Windows.Forms.Timer timer1;
private Panel panel1;
private TabControl tc1;
private TabPage tabJS1;
private TreeView treeView1;
private Panel panel2;
private Label lblLastJ;
private Label lblAction;
private System.Windows.Forms.Button btAssign;
private Panel panel3;
private ComboBox cbJs1;
private Label label56;
private Label label55;
private Label label54;
private ComboBox cbJs3;
private ComboBox cbJs2;
private Label label57;
private System.Windows.Forms.Button btClear;
private System.Windows.Forms.Button btDump;
private RichTextBox rtb;
private Label label3;
private System.Windows.Forms.Button btGrab;
private Label label4;
private Label lblTitle;
private Label label7;
private Label label6;
private Label label8;
private ImageList IL;
private UC_JoyPanel UC_JoyPanel;
private ContextMenuStrip cmCopyPaste;
private ToolStripMenuItem tsiCopy;
private ToolStripMenuItem tsiPaste;
private ToolStripMenuItem tsiSelAll;
private ToolStripMenuItem tsiPReplace;
private System.Windows.Forms.Button btReset;
private ToolStripSeparator toolStripSeparator1;
private ToolStripMenuItem tsiOpen;
private ToolStripMenuItem tsiSaveAs;
private OpenFileDialog OFD;
private SaveFileDialog SFD;
private System.Windows.Forms.Button btFind;
private System.Windows.Forms.Button btDumpList;
private System.ComponentModel.IContainer components;
#endregion
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent( )
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainClass));
this.buttonExit = new System.Windows.Forms.Button();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.panel1 = new System.Windows.Forms.Panel();
this.label8 = new System.Windows.Forms.Label();
this.lblTitle = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.tc1 = new System.Windows.Forms.TabControl();
this.tabJS1 = new System.Windows.Forms.TabPage();
this.treeView1 = new System.Windows.Forms.TreeView();
this.IL = new System.Windows.Forms.ImageList(this.components);
this.panel2 = new System.Windows.Forms.Panel();
this.btFind = new System.Windows.Forms.Button();
this.label7 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.btClear = new System.Windows.Forms.Button();
this.lblLastJ = new System.Windows.Forms.Label();
this.lblAction = new System.Windows.Forms.Label();
this.btAssign = new System.Windows.Forms.Button();
this.panel3 = new System.Windows.Forms.Panel();
this.label56 = new System.Windows.Forms.Label();
this.label55 = new System.Windows.Forms.Label();
this.label57 = new System.Windows.Forms.Label();
this.label54 = new System.Windows.Forms.Label();
this.cbJs3 = new System.Windows.Forms.ComboBox();
this.cbJs2 = new System.Windows.Forms.ComboBox();
this.cbJs1 = new System.Windows.Forms.ComboBox();
this.btDump = new System.Windows.Forms.Button();
this.rtb = new System.Windows.Forms.RichTextBox();
this.cmCopyPaste = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsiCopy = new System.Windows.Forms.ToolStripMenuItem();
this.tsiPaste = new System.Windows.Forms.ToolStripMenuItem();
this.tsiPReplace = new System.Windows.Forms.ToolStripMenuItem();
this.tsiSelAll = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.tsiOpen = new System.Windows.Forms.ToolStripMenuItem();
this.tsiSaveAs = new System.Windows.Forms.ToolStripMenuItem();
this.label3 = new System.Windows.Forms.Label();
this.btGrab = new System.Windows.Forms.Button();
this.btReset = new System.Windows.Forms.Button();
this.OFD = new System.Windows.Forms.OpenFileDialog();
this.SFD = new System.Windows.Forms.SaveFileDialog();
this.btDumpList = new System.Windows.Forms.Button();
this.UC_JoyPanel = new Joystick.UC_JoyPanel();
this.panel1.SuspendLayout();
this.tc1.SuspendLayout();
this.tabJS1.SuspendLayout();
this.panel2.SuspendLayout();
this.panel3.SuspendLayout();
this.cmCopyPaste.SuspendLayout();
this.SuspendLayout();
//
// buttonExit
//
this.buttonExit.Location = new System.Drawing.Point(577, 678);
this.buttonExit.Name = "buttonExit";
this.buttonExit.Size = new System.Drawing.Size(94, 24);
this.buttonExit.TabIndex = 0;
this.buttonExit.Text = "Exit";
this.buttonExit.Click += new System.EventHandler(this.buttonExit_Click);
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// panel1
//
this.panel1.Controls.Add(this.label8);
this.panel1.Controls.Add(this.lblTitle);
this.panel1.Controls.Add(this.label4);
this.panel1.Location = new System.Drawing.Point(2, 1);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1109, 66);
this.panel1.TabIndex = 2;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(353, 42);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(58, 13);
this.label8.TabIndex = 2;
this.label8.Text = "by Cassini";
//
// lblTitle
//
this.lblTitle.AutoSize = true;
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTitle.Location = new System.Drawing.Point(226, 8);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(185, 25);
this.lblTitle.TabIndex = 1;
this.lblTitle.Text = "SC Joystick Mapper";
//
// label4
//
this.label4.Image = ((System.Drawing.Image)(resources.GetObject("label4.Image")));
this.label4.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.label4.Location = new System.Drawing.Point(0, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(220, 66);
this.label4.TabIndex = 0;
//
// tc1
//
this.tc1.Controls.Add(this.tabJS1);
this.tc1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
this.tc1.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tc1.HotTrack = true;
this.tc1.ItemSize = new System.Drawing.Size(62, 22);
this.tc1.Location = new System.Drawing.Point(387, 73);
this.tc1.Multiline = true;
this.tc1.Name = "tc1";
this.tc1.SelectedIndex = 0;
this.tc1.Size = new System.Drawing.Size(289, 252);
this.tc1.TabIndex = 3;
this.tc1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tc1_DrawItem);
//
// tabJS1
//
this.tabJS1.Controls.Add(this.UC_JoyPanel);
this.tabJS1.Location = new System.Drawing.Point(4, 26);
this.tabJS1.Name = "tabJS1";
this.tabJS1.Padding = new System.Windows.Forms.Padding(3);
this.tabJS1.Size = new System.Drawing.Size(281, 222);
this.tabJS1.TabIndex = 0;
this.tabJS1.Text = "Joystick 1";
//
// treeView1
//
this.treeView1.HotTracking = true;
this.treeView1.ImageKey = "Map";
this.treeView1.ImageList = this.IL;
this.treeView1.Location = new System.Drawing.Point(12, 73);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageKey = "Selected";
this.treeView1.Size = new System.Drawing.Size(369, 629);
this.treeView1.TabIndex = 4;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
//
// IL
//
this.IL.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("IL.ImageStream")));
this.IL.TransparentColor = System.Drawing.Color.Transparent;
this.IL.Images.SetKeyName(0, "Map");
this.IL.Images.SetKeyName(1, "Selected");
this.IL.Images.SetKeyName(2, "J");
this.IL.Images.SetKeyName(3, "K");
this.IL.Images.SetKeyName(4, "X");
this.IL.Images.SetKeyName(5, "P");
this.IL.Images.SetKeyName(6, "Z");
//
// panel2
//
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel2.Controls.Add(this.btFind);
this.panel2.Controls.Add(this.label7);
this.panel2.Controls.Add(this.label6);
this.panel2.Controls.Add(this.btClear);
this.panel2.Controls.Add(this.lblLastJ);
this.panel2.Controls.Add(this.lblAction);
this.panel2.Controls.Add(this.btAssign);
this.panel2.Location = new System.Drawing.Point(387, 471);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(289, 103);
this.panel2.TabIndex = 5;
//
// btFind
//
this.btFind.Location = new System.Drawing.Point(190, 37);
this.btFind.Name = "btFind";
this.btFind.Size = new System.Drawing.Size(84, 20);
this.btFind.TabIndex = 12;
this.btFind.Text = "Find 1st.";
this.btFind.UseVisualStyleBackColor = true;
this.btFind.Click += new System.EventHandler(this.btFind_Click);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(7, 37);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(28, 13);
this.label7.TabIndex = 3;
this.label7.Text = "Ctrl.";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(7, 17);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(33, 13);
this.label6.TabIndex = 3;
this.label6.Text = "Cmd.";
//
// btClear
//
this.btClear.Location = new System.Drawing.Point(190, 67);
this.btClear.Name = "btClear";
this.btClear.Size = new System.Drawing.Size(94, 25);
this.btClear.TabIndex = 2;
this.btClear.Text = "Clear";
this.btClear.UseVisualStyleBackColor = true;
this.btClear.Click += new System.EventHandler(this.btClear_Click);
//
// lblLastJ
//
this.lblLastJ.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblLastJ.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblLastJ.Location = new System.Drawing.Point(52, 37);
this.lblLastJ.Name = "lblLastJ";
this.lblLastJ.Size = new System.Drawing.Size(135, 20);
this.lblLastJ.TabIndex = 1;
this.lblLastJ.Text = "...";
//
// lblAction
//
this.lblAction.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblAction.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblAction.Location = new System.Drawing.Point(52, 17);
this.lblAction.Name = "lblAction";
this.lblAction.Size = new System.Drawing.Size(222, 20);
this.lblAction.TabIndex = 1;
this.lblAction.Text = "...";
//
// btAssign
//
this.btAssign.Location = new System.Drawing.Point(10, 67);
this.btAssign.Name = "btAssign";
this.btAssign.Size = new System.Drawing.Size(94, 25);
this.btAssign.TabIndex = 0;
this.btAssign.Text = "Assign";
this.btAssign.UseVisualStyleBackColor = true;
this.btAssign.Click += new System.EventHandler(this.btAssign_Click);
//
// panel3
//
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Controls.Add(this.label56);
this.panel3.Controls.Add(this.label55);
this.panel3.Controls.Add(this.label57);
this.panel3.Controls.Add(this.label54);
this.panel3.Controls.Add(this.cbJs3);
this.panel3.Controls.Add(this.cbJs2);
this.panel3.Controls.Add(this.cbJs1);
this.panel3.Location = new System.Drawing.Point(387, 331);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(289, 134);
this.panel3.TabIndex = 6;
//
// label56
//
this.label56.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label56.Location = new System.Drawing.Point(7, 101);
this.label56.Name = "label56";
this.label56.Size = new System.Drawing.Size(39, 20);
this.label56.TabIndex = 2;
this.label56.Text = "js3";
//
// label55
//
this.label55.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label55.Location = new System.Drawing.Point(7, 74);
this.label55.Name = "label55";
this.label55.Size = new System.Drawing.Size(39, 20);
this.label55.TabIndex = 2;
this.label55.Text = "js2";
//
// label57
//
this.label57.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label57.Location = new System.Drawing.Point(7, 9);
this.label57.Name = "label57";
this.label57.Size = new System.Drawing.Size(267, 20);
this.label57.TabIndex = 2;
this.label57.Text = "SC-Device to Joystick Mapping";
//
// label54
//
this.label54.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label54.Location = new System.Drawing.Point(7, 47);
this.label54.Name = "label54";
this.label54.Size = new System.Drawing.Size(39, 20);
this.label54.TabIndex = 2;
this.label54.Text = "js1";
//
// cbJs3
//
this.cbJs3.DisplayMember = "js1";
this.cbJs3.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs3.FormattingEnabled = true;
this.cbJs3.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs3.Location = new System.Drawing.Point(52, 98);
this.cbJs3.MaxDropDownItems = 4;
this.cbJs3.Name = "cbJs3";
this.cbJs3.Size = new System.Drawing.Size(233, 25);
this.cbJs3.TabIndex = 0;
//
// cbJs2
//
this.cbJs2.DisplayMember = "js1";
this.cbJs2.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs2.FormattingEnabled = true;
this.cbJs2.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs2.Location = new System.Drawing.Point(52, 71);
this.cbJs2.MaxDropDownItems = 4;
this.cbJs2.Name = "cbJs2";
this.cbJs2.Size = new System.Drawing.Size(233, 25);
this.cbJs2.TabIndex = 0;
//
// cbJs1
//
this.cbJs1.DisplayMember = "js1";
this.cbJs1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cbJs1.FormattingEnabled = true;
this.cbJs1.Items.AddRange(new object[] {
"Joystick 1",
"Joystick 2",
"Joystick 3"});
this.cbJs1.Location = new System.Drawing.Point(52, 44);
this.cbJs1.MaxDropDownItems = 4;
this.cbJs1.Name = "cbJs1";
this.cbJs1.Size = new System.Drawing.Size(233, 25);
this.cbJs1.TabIndex = 0;
//
// btDump
//
this.btDump.Location = new System.Drawing.Point(397, 589);
this.btDump.Name = "btDump";
this.btDump.Size = new System.Drawing.Size(94, 26);
this.btDump.TabIndex = 8;
this.btDump.Text = "Dump XML-->";
this.btDump.UseVisualStyleBackColor = true;
this.btDump.Click += new System.EventHandler(this.btDump_Click);
//
// rtb
//
this.rtb.AcceptsTab = true;
this.rtb.BackColor = System.Drawing.Color.Ivory;
this.rtb.ContextMenuStrip = this.cmCopyPaste;
this.rtb.DetectUrls = false;
this.rtb.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtb.Location = new System.Drawing.Point(682, 73);
this.rtb.Name = "rtb";
this.rtb.Size = new System.Drawing.Size(439, 608);
this.rtb.TabIndex = 9;
this.rtb.Text = "";
this.rtb.WordWrap = false;
//
// cmCopyPaste
//
this.cmCopyPaste.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsiCopy,
this.tsiPaste,
this.tsiPReplace,
this.tsiSelAll,
this.toolStripSeparator1,
this.tsiOpen,
this.tsiSaveAs});
this.cmCopyPaste.Name = "cmCopyPaste";
this.cmCopyPaste.Size = new System.Drawing.Size(170, 142);
//
// tsiCopy
//
this.tsiCopy.Name = "tsiCopy";
this.tsiCopy.Size = new System.Drawing.Size(169, 22);
this.tsiCopy.Text = "Copy";
this.tsiCopy.Click += new System.EventHandler(this.tsiCopy_Click);
//
// tsiPaste
//
this.tsiPaste.Name = "tsiPaste";
this.tsiPaste.Size = new System.Drawing.Size(169, 22);
this.tsiPaste.Text = "Paste";
this.tsiPaste.Click += new System.EventHandler(this.tsiPaste_Click);
//
// tsiPReplace
//
this.tsiPReplace.Name = "tsiPReplace";
this.tsiPReplace.Size = new System.Drawing.Size(169, 22);
this.tsiPReplace.Text = "Paste (Replace all)";
this.tsiPReplace.Click += new System.EventHandler(this.tsiPReplace_Click);
//
// tsiSelAll
//
this.tsiSelAll.Name = "tsiSelAll";
this.tsiSelAll.Size = new System.Drawing.Size(169, 22);
this.tsiSelAll.Text = "Select All";
this.tsiSelAll.Click += new System.EventHandler(this.tsiSelAll_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(166, 6);
//
// tsiOpen
//
this.tsiOpen.Name = "tsiOpen";
this.tsiOpen.Size = new System.Drawing.Size(169, 22);
this.tsiOpen.Text = "Open...";
this.tsiOpen.Click += new System.EventHandler(this.tsiOpen_Click);
//
// tsiSaveAs
//
this.tsiSaveAs.Name = "tsiSaveAs";
this.tsiSaveAs.Size = new System.Drawing.Size(169, 22);
this.tsiSaveAs.Text = "Save as...";
this.tsiSaveAs.Click += new System.EventHandler(this.tsiSaveAs_Click);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(797, 684);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(231, 13);
this.label3.TabIndex = 10;
this.label3.Text = "Right click above to open the context menu";
//
// btGrab
//
this.btGrab.Location = new System.Drawing.Point(578, 589);
this.btGrab.Name = "btGrab";
this.btGrab.Size = new System.Drawing.Size(94, 26);
this.btGrab.TabIndex = 8;
this.btGrab.Text = "<-- Grab XML";
this.btGrab.UseVisualStyleBackColor = true;
this.btGrab.Click += new System.EventHandler(this.btGrab_Click);
//
// btReset
//
this.btReset.Location = new System.Drawing.Point(397, 678);
this.btReset.Name = "btReset";
this.btReset.Size = new System.Drawing.Size(94, 24);
this.btReset.TabIndex = 11;
this.btReset.Text = "Reset";
this.btReset.Click += new System.EventHandler(this.btReset_Click);
//
// OFD
//
this.OFD.DefaultExt = "xml";
this.OFD.FileName = "Open Map File";
this.OFD.Filter = "Mapping files|*.xml|All files|*.*";
this.OFD.ReadOnlyChecked = true;
this.OFD.SupportMultiDottedExtensions = true;
//
// SFD
//
this.SFD.DefaultExt = "xml";
this.SFD.Filter = "Mapping files|*.xml|Text files|*.txt|All files|*.*";
this.SFD.SupportMultiDottedExtensions = true;
//
// btDumpList
//
this.btDumpList.Location = new System.Drawing.Point(398, 630);
this.btDumpList.Name = "btDumpList";
this.btDumpList.Size = new System.Drawing.Size(94, 26);
this.btDumpList.TabIndex = 12;
this.btDumpList.Text = "Dump List-->";
this.btDumpList.UseVisualStyleBackColor = true;
this.btDumpList.Click += new System.EventHandler(this.btDumpList_Click);
//
// UC_JoyPanel
//
this.UC_JoyPanel.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.UC_JoyPanel.Location = new System.Drawing.Point(6, 6);
this.UC_JoyPanel.Name = "UC_JoyPanel";
this.UC_JoyPanel.Size = new System.Drawing.Size(276, 195);
this.UC_JoyPanel.TabIndex = 0;
//
// MainClass
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 15);
this.ClientSize = new System.Drawing.Size(1133, 712);
this.Controls.Add(this.btDumpList);
this.Controls.Add(this.btReset);
this.Controls.Add(this.label3);
this.Controls.Add(this.rtb);
this.Controls.Add(this.btGrab);
this.Controls.Add(this.btDump);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel2);
this.Controls.Add(this.treeView1);
this.Controls.Add(this.tc1);
this.Controls.Add(this.panel1);
this.Controls.Add(this.buttonExit);
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "MainClass";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.Text = "SC Joystick Mapper";
this.Load += new System.EventHandler(this.MainClass_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.tc1.ResumeLayout(false);
this.tabJS1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.panel3.ResumeLayout(false);
this.cmCopyPaste.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
///<remarks>
/// Holds the DXInput Joystick List
///</remarks>
private List<JoystickCls> m_JS = new List<JoystickCls>( );
///<remarks>
/// Holds the ActionTree that manages the TreeView and the action lists
///</remarks>
private ActionTree m_AT = null;
#region Main Form Handling
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main( string[] args )
{
// Create a new instance of
// the MainClass class.
Application.Run( new MainClass( ) );
}
/// <summary>
/// TO create the form and its GUI components
/// </summary>
public MainClass( )
{
try {
// Load the icon from our resources
System.Resources.ResourceManager resources = new System.Resources.ResourceManager( this.GetType( ) );
this.Icon = ( ( System.Drawing.Icon )( resources.GetObject( "$this.Icon" ) ) );
}
catch {
; // well...
}
//
// Required for Windows Form Designer support.
//
InitializeComponent( );
// some applic initialization
rtb.SelectionTabs = new int[] { 10, 20, 30, 40, 50, 60 }; // short tabs
String version = Application.ProductVersion; // get the version information
lblTitle.Text += " - V " + version.Substring( 0, version.IndexOf( ".", version.IndexOf( "." )+1 ) ); // get the first two elements
}
/// <summary>
/// Handle the load event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainClass_Load( object sender, System.EventArgs e )
{
if ( !InitDirectInput( ) )
Close( );
timer1.Start( ); // this one polls the joysticks to show the props
}
/// <summary>
/// need to shutdown the XInputs
/// </summary>
protected override void Dispose( bool disposing )
{
timer1.Stop( );
// Unacquire all DirectInput objects.
foreach ( JoystickCls js in m_JS ) js.FinishDX( );
if ( disposing ) {
if ( components != null ) {
components.Dispose( );
}
}
base.Dispose( disposing );
}
/// <summary>
/// Handles the Exit button
/// </summary>
private void buttonExit_Click( object sender, System.EventArgs e )
{
Close( );
}
/// <summary>
/// Fancy tab coloring with ownerdraw to paint the callout buttons
/// </summary>
private void tc1_DrawItem( object sender, System.Windows.Forms.DrawItemEventArgs e )
{
try {
//This line of code will help you to change the apperance like size,name,style.
Font f;
//For background color
Brush backBrush = new System.Drawing.SolidBrush( MyColors.JColor[e.Index] );
//For forground color
Brush foreBrush = new SolidBrush( Color.Black );
//This construct will hell you to deside which tab page have current focus
//to change the style.
if ( e.Index == this.tc1.SelectedIndex ) {
//This line of code will help you to change the apperance like size,name,style.
f = new Font( e.Font, FontStyle.Bold | FontStyle.Bold );
f = new Font( e.Font, FontStyle.Bold );
Rectangle tabRect = tc1.Bounds;
Region tabRegion = new Region( tabRect );
Rectangle TabItemRect = new Rectangle( 0, 0, 0, 0 );
for ( int nTanIndex = 0; nTanIndex < tc1.TabCount; nTanIndex++ ) {
TabItemRect = Rectangle.Union( TabItemRect, tc1.GetTabRect( nTanIndex ) );
}
tabRegion.Exclude( TabItemRect );
e.Graphics.FillRegion( backBrush, tabRegion );
}
else {
f = e.Font;
foreBrush = new SolidBrush( e.ForeColor );
}
//To set the alignment of the caption.
string tabName = this.tc1.TabPages[e.Index].Text;
StringFormat sf = new StringFormat( );
sf.Alignment = StringAlignment.Center;
//Thsi will help you to fill the interior portion of
//selected tabpage.
e.Graphics.FillRectangle( backBrush, e.Bounds );
Rectangle r = e.Bounds;
r = new Rectangle( r.X, r.Y + 3, r.Width, r.Height - 3 );
e.Graphics.DrawString( tabName, f, foreBrush, r, sf );
sf.Dispose( );
if ( e.Index == this.tc1.SelectedIndex ) {
f.Dispose( );
backBrush.Dispose( );
}
else {
backBrush.Dispose( );
foreBrush.Dispose( );
}
}
catch ( Exception Ex ) {
MessageBox.Show( Ex.Message.ToString( ), "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Information );
}
}
#endregion
/// <summary>
/// Resets the Action Tree
/// </summary>
private void InitActionTree( )
{
// build TreeView and the ActionMaps
m_AT = new ActionTree( );
m_AT.Ctrl = treeView1; // the ActionTree owns the TreeView control
m_AT.LoadTree( ); // Init
// default JS to Joystick mapping - can be changed and reloaded from XML
if ( tc1.TabCount > 0 ) { cbJs1.SelectedIndex = 0; m_AT.ActionMaps.js1 = cbJs1.Text; }
if ( tc1.TabCount > 1 ) { cbJs2.SelectedIndex = 1; m_AT.ActionMaps.js2 = cbJs2.Text; }
if ( tc1.TabCount > 2 ) { cbJs3.SelectedIndex = 2; m_AT.ActionMaps.js3 = cbJs3.Text; }
}
/// <summary>
/// Aquire the DInput joystick devices
/// </summary>
/// <returns></returns>
public bool InitDirectInput( )
{
// Enumerate joysticks in the system.
int tabs = 0;
cbJs1.Items.Clear( ); cbJs2.Items.Clear( ); cbJs3.Items.Clear( ); // JS dropdowns init
// scan the Input for attached devices
foreach ( DeviceInstance instance in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly ) ) {
// Create the device interface
Device jsDevice = new Device( instance.InstanceGuid );
JoystickCls js = null;
// we have the first tab made as reference so TabPage[0] already exists
if ( tabs == 0 ) {
// first panel - The Tab content exists already
js = new JoystickCls( jsDevice, this, UC_JoyPanel ); // does all device related activities for that particular item
}
else {
// setup the further tab contents along the reference one in TabPage[0] (the control named UC_JoyPanel)
tc1.TabPages.Add("Joystick " + (tabs+1).ToString());
UC_JoyPanel uUC_JoyPanelNew = new UC_JoyPanel( );
tc1.TabPages[tabs].Controls.Add( uUC_JoyPanelNew );
uUC_JoyPanelNew.Size = UC_JoyPanel.Size;
uUC_JoyPanelNew.Location = UC_JoyPanel.Location;
js = new JoystickCls( jsDevice, this, uUC_JoyPanelNew ); // does all device related activities for that particular item
}
m_JS.Add( js ); // add to joystick list
tc1.TabPages[tabs].Tag = js.DevName; // used to find the tab via JS mapping
tc1.TabPages[tabs].BackColor = MyColors.JColor[tabs]; // each tab has its own color
cbJs1.Items.Add( js.DevName ); cbJs2.Items.Add( js.DevName ); cbJs3.Items.Add( js.DevName ); // populate DropDowns with the JS name
// next tab
tabs++;
if ( tabs == 8 ) break; // cannot load more JSticks than predefined Tabs
}
/*
// TEST CREATE ALL 8 TABS
for ( int i=(tabs+1); i < 9; i++ ) {
tc1.TabPages.Add( "Joystick " + i.ToString( ) );
}
*/
if ( tabs == 0 ) {
MessageBox.Show( "Unable to create a joystick device. Program will exit.", "No joystick found" );
return false;
}
InitActionTree( );
return true;
}
/// <summary>
/// Create the jsN Joystick string from mapping (or from the JS index above item 3)
/// </summary>
/// <returns></returns>
private String JSStr( )
{
if ( (String)tc1.SelectedTab.Tag == ( string )cbJs1.SelectedItem ) return JoystickCls.JSTag( 1 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs2.SelectedItem ) return JoystickCls.JSTag( 2 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs3.SelectedItem ) return JoystickCls.JSTag( 3 );
return JoystickCls.JSTag( tc1.SelectedIndex+1 ); // return the Joystick number
}
#region Event Handling
private void timer1_Tick( object sender, System.EventArgs e )
{
foreach ( JoystickCls jsc in m_JS ) { jsc.GetData( ); } // poll the devices
lblLastJ.Text = JSStr( ) + m_JS[tc1.SelectedIndex].GetLastChange( ); // show last handled JS control
}
private void treeView1_AfterSelect( object sender, TreeViewEventArgs e )
{
if ( e.Node.Level == 1 ) {
// actions cannot have a blank - if there is one it's mapped
if ( e.Node.Text.IndexOf( " ", 0 ) > 0 ) {
lblAction.Text = e.Node.Text.Substring( 0, e.Node.Text.IndexOf( " ", 0 ) ); // get only the action part as Cmd.
}
else {
lblAction.Text = e.Node.Text;
}
}
}
private void btAssign_Click( object sender, EventArgs e )
{
m_AT.UpdateSelectedItem( lblLastJ.Text );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
private void btClear_Click( object sender, EventArgs e )
{
m_AT.UpdateSelectedItem( "" );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
private void btDump_Click( object sender, EventArgs e )
{
rtb.Text = String.Format( "<!-- {0} - SC Joystick Mapping -->\n{1}", DateTime.Now, m_AT.ActionMaps.toXML( ) );
btDump.BackColor = btClear.BackColor; // neutral again
btGrab.BackColor = btClear.BackColor; // neutral again
}
private void btDumpList_Click( object sender, EventArgs e )
{
rtb.Text = String.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActions( ) );
}
private void btGrab_Click( object sender, EventArgs e )
{
m_AT.ActionMaps.fromXML( rtb.Text );
m_AT.ReloadCtrl( );
// JS mapping for the first 3 items can be changed and reloaded from XML
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js1 ) ) {
int i = cbJs1.FindString( m_AT.ActionMaps.js1 );
if ( i >= 0 ) cbJs1.SelectedIndex = i;
}
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js2 ) ) {
int i = cbJs2.FindString( m_AT.ActionMaps.js2 );
if ( i >= 0 ) cbJs2.SelectedIndex = i;
}
if ( !String.IsNullOrEmpty( m_AT.ActionMaps.js3 ) ) {
int i = cbJs3.FindString( m_AT.ActionMaps.js3 );
if ( i >= 0 ) cbJs3.SelectedIndex = i;
}
btGrab.BackColor = btClear.BackColor; // neutral again
btDump.BackColor = btClear.BackColor; // neutral again
}
private void tsiCopy_Click( object sender, EventArgs e )
{
rtb.Focus( );
if ( rtb.SelectionLength > 0 ) rtb.Copy( );
}
private void tsiPaste_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.Paste( DataFormats.GetFormat( DataFormats.UnicodeText ) );
btGrab.BackColor = MyColors.DirtyColor;
}
private void tsiSelAll_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.SelectAll( );
}
private void tsiPReplace_Click( object sender, EventArgs e )
{
rtb.Focus( );
rtb.SelectAll( );
rtb.Paste( DataFormats.GetFormat( DataFormats.UnicodeText ) );
btGrab.BackColor = MyColors.DirtyColor;
}
private void btReset_Click( object sender, EventArgs e )
{
InitActionTree( ); // start over
}
private void tsiOpen_Click( object sender, EventArgs e )
{
if ( OFD.ShowDialog(this) == System.Windows.Forms.DialogResult.OK ) {
using ( StreamReader istr = new StreamReader( OFD.OpenFile( ) ) ) {
rtb.Text = istr.ReadToEnd( ); // load the complete XML from the file into the textbox
btGrab.BackColor = MyColors.DirtyColor;
}
}
}
private void tsiSaveAs_Click( object sender, EventArgs e )
{
if ( SFD.ShowDialog( this ) == System.Windows.Forms.DialogResult.OK ) {
using ( StreamWriter istr = new StreamWriter( SFD.OpenFile( ) ) ) {
istr.Write( rtb.Text ); // just dump the whole XML text
}
}
}
private void btFind_Click( object sender, EventArgs e )
{
m_AT.FindCtrl( lblLastJ.Text ); // find the action for a Control (joystick input)
}
#endregion
}
}

@ -0,0 +1,754 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAQEAAAAAAAD/7gAOQWRvYmUAZAAAAAAB/+EAFkV4aWYAAE1NACoAAAAIAAAAAAAA
/+wAEUR1Y2t5AAEABAAAAFIAAP/bAEMAAgEBAQIBAgICAgMCAgIDBAMCAgMEBAMDBAMDBAUEBQUFBQQF
BQYHBwcGBQkJCQkJCQwMDAwMDAwMDAwMDAwMDP/bAEMBAgICBAQECAUFCAwJCAkMDg4ODg4ODgwMDAwM
Dg4MDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/CABEIAIgA2QMBEQACEQEDEQH/xAAc
AAACAgMBAQAAAAAAAAAAAAAFBgQHAAEDAgj/xAAtEAABBAIBAwQCAQQDAQAAAAABAAIDBBEFEhATBiAh
FAcxIhUwQSMWMiQXCP/EABsBAAICAwEAAAAAAAAAAAAAAAMEAgUAAQYH/8QAQBEAAQIDAwgHBgQEBwAA
AAAAAQACESEDMRIEQVFhcZEiMhMQIIGhQiMzscFSklMFMNFygvBiFCRA4aLSQ4M0/8QAJxIAAAUEAgED
BQAAAAAAAAAAABARITEwQAESIALwYEFRUHGR4SL/xAAnEwEAAgEDAwMFAQEAAAAAAAABABEhMUFREGFx
gZGhIPCxwdHh8f/aAAwDAQACEAMQAAAB+K6nuopU9ZqcCx6QzpEfKYFuy5mEwlmt5mZmZmbzOkD+JBzM
zN63H3EvWJOEwZmbzes153HM1JiWweZ9QjzCIsOZNVtn3GfeA6wgvWVSm3vOZmZmZmZmZmT1rnlNf1qX
rRecgSg2PWLEUtdwIn4kLnIGt6zMmCPaHJelCWlkPouAmgP3GZnqbeavLxIdZdZy+s1vUusT9ht+4lIr
XkQ1dwIn1gfMzxIWZvnJeMVHxIWs1m9ZmSYFsHmu6X7CsAWPNEl2LE5i4XrKuBWAbL5i2NiL2FIqvIrD
fkTEMLMfbKxaLArBX3FjgSI5oUBkcUuCnEoR0IxUuJFMzJYz2vx3ZSwDm6BWPT86vPrzBmGsr29zVpff
O2S7bJobelZ5S0at125+1fOceQ9EVHNT1ya3nGes3LhPUFiAh3SVfAT7tIO7XEsUvXzbsGiCRCMFxmNY
dDUVH1tN4lr6a4y6qu0ZQ7qg4T14lDMwkq/9N8D1928htFCfcSQT7HNa4k1vRY5YpF9BE6JcG+jHKA5F
T6L85vrHXAnT2FYgNYIi2aVO9hQMlXcs9S3VnX83EMprcOsGJ69uyVXX3Xzin0fw0Ala0AkYI/KKbarb
5XvSj9agBsRiHQ5mj2lfoXzFtvGBXdnBYiDZnO0Kqe15zxTWto0jfzz2qAtwc1cgl0Z+t6O0uStlq0V+
4eHplKjsq/s2K36jaB0agpwGZLzuUQwR7SEM1YyiF9K+O9ORUyLZanWi3U4CsBBGo/Pdsf6y5rbDk/mZ
u2P1RlO1PmmrP5PCtkhc9TV1jW21T9bNWt4j2gr9kEFYC87hCYBAYR87GyiBfvlfRkk8hn1GsNJlizGK
Qiro4hlnVylmOpsDAVOtdfmk4SzLb0Vc6GQrXgr+suet1J86ZezROhCr24BzIhDowFkr6jnAi5WVWK0y
4UdzFNEY3GIYZNS1ZKtuw+ZyxebXtE1eyNLMtgoWmMzINk+q86OoWkHze/rnk7pCVsEm5MidFiddwVLk
ACxSDvIwWENZh4YA02Gmmt2WqkOaKQWkw1h2WqnYNBFmXGTDpuMsGWY7lG/EStX0vnC/QJVx5V0lZcle
VyWwRegOp3Wli1ip3IVW4RimXFOc4PYpiozRdHkCsWmou3/mzz1ydxnmrsH67bdTQaq8e8nywiBetEAZ
dC1VY1zQjeYdRau1rW8sa36iVb9TpPu0wr9ANaooxUNZriRSTBix+W7LuI5lBh2odttbDUJwCmROhMm3
lhLCyVTkdr4utDDemnCkXkDXCvQFObAWO0TosR78YV/nYLFTzkCGerjlRzMljZtTjvSiicTdfI4huSLQ
1rXGeql7McFhnuNyesybQkbQ2xVjDlRxUbqCVfBWrQYtuqjlDymHlNcY3z8UtdzkHnMGZkmDNh8x6Q20
my6UpoMlB0PZxbtI1900szOkD+dw6RJ0jIyhaOdGZOu1l20qYLFQIc5rW4kFrnepwmKmKaujFQzMzMkw
ZZKruCabbHVlIrSlg1znlfdJWD2T71vW9cpr85A3mT1ro/XXolyugsVY9mkFt8/5kKavbSRWHcbfnYw7
vMRyo63qTBj/2gAIAQEAAQUCnE/cxaQltJhtYxZWLOHR2VfheyfJWSslcnLk5cnKPmi52QXo8wuTke4n
usPWXrL1l2SXLk5ZKw5WqX+SOo3O2s04mU68gjdEMsjC7Ixvqf8A1PVAz2lj/ZjE9oXaTGtK4Nw+NFvv
lHrlbSeCKWSxWkgsQSQy2odxMqu/tNVXYQTBr35sRc6/FywUGOQgem1XIVSoIPaxH+zcoMRaV7rknyFF
zvVerGR9mhZa23XsMfVvPs2T4ppbC2P13uo46HkViM6RlLYL/Tr/AHR4rfBreMFDw+gU/wAO0Kk8P8dK
b4NpM7LwSjyPgsab4E8qTwK8FJ4TtQj4lt8z+ObBgl18zUaykhI64V3XzMk19GSR17x2OSPyDxHY0RRv
3a1ibebGXZRdrueJeOULe0mst11HYfdngsR3n3d5HHYg+6/sNlrU/wD0NQdHpfsnxLZTS6SBbfx+inaK
pmHVAKWhaz8TYhdm2pQAnHXlXNdrHjYaGirenhaX0QF/GBbhzJbWp0w7Muta1XX9wbz62sPEkcjJF9Oe
a6Ur7Cv7vYb6rZmgtSNAf01t+aGT6h84t93cQMUsA5dt2JY35kFlAXsutW2vuy3WN2T4HNvNprMqcy3n
/vLTamObYXa0MTtlJzTa7GKzac47vxf5ztnqbNO/qdA6dk0t3tXxGLX9lDCXuj17+dWOdw+tvsPjcm8Y
pJ+iijfsq8OI5YozZ2UIW88g7MP+zX+LJiWXmR4jnqhrbVdp+RAtNYdFaubps7exG+W5DUaw26rBrqd+
1J9z+D7jW7XwLDX77w19yjuvFrVaxS1TXT7jxueu+Ko9ktHVlx0vi10v3Hjkptame3/q2028rXbLf4Ww
8s4q95FsJC6awohInPla575ApCsnpXlbydMMM4vnsQ+PwyweU6GJf+hXOHne72HkPiOqi2Wv2Pi9+jJD
v/Btffr7vwOxr72g1Ov+BY8LuSNp6aaE1jM46f6+3G2sS6/4eq3gWxr2ZDN49K4y6aONW44momXm4BSS
ezguK/VRWK/OOSnifd6eF93zXx2SCXyiFqb5tczW3O0nMcLJF47VoMNTaS15LWq1t6EfXFdlybw7QmrV
+qK9gR/TvjDZZtfBHV3dEZ2OqcXWdbXatixrTfje42aEhLdXg3KEIDuALYS9SNYxfLqKnfxYr7R+L3y3
tMF4gtvwvr2Z5FR1cbnazU2QtVrbQWorkNbRkhFTZ5FZze9pJ5oboa3FyAcdpG1beJqu0YeOwgr8bk9R
qvX6asXP3s2LrnTfJ5cV3Il3Y0DiXW3vbLHsfRc59XSV3GLxapjW+NRtNGGjGodvRaKW2YZa+6aG7PaS
QKh5vC9V/PIZbHj+7ZYjvP8A8e2E5W1hmWzrjFyKuFcNdqtWCr082LEoCdJEWWJmLkvmJ/e7sbrOdbPZ
c6lqnyM/1Gxk67YxmK1da6oVqqWnam7DVRh3k0DQ3yyHO8hsRSePec6YnwP7A08dyz9j+POls+UVnt2m
15LbbWYLZ72wBs9/ZU9+fMzyTLnIkIUsjT1k8W1vcj8X1qg8c1DVrKeujbDdogSW6JTn08eYb4shi3tt
R72fMe2JWvvkrW7NzDa8a0NqxpPGNEyLyGv4xJM/fRQwzeXq75HE4bO/G5W35M6cu57yy5PUvk7lPuEw
sGYcY98TSu5fKW4umxsmkpriqjz3adzjLT3Diq+5Kobk9rfb53KfyA8Z9nM4ybOTPy3FfIcnYLZXe4l9
3lvobbzNUmamObmKw1PmbiYrcXRFTwh+Qu7gNn9orjmur7FypbE9vb3HukkkKmleBLKUyVyY5HKdXeU+
s4eky/5K2xlaoNo0tr7OJO2UafsGY3OzE1tki7jc/IRlCM6EwUFhqq7HAszZc54xLME8tQeoH5TZGoSM
UnbLZIWtPX//2gAIAQIAAQUCDly6ErkuS5qN2R6j6vb+gHovUcZy9yyiVyVd/v6nIFEoLKPTPrjaSg0g
tdlMLAn1wnxkLCacHplclyXJOcmn1AetrsJsgTHAox8V8t7VFs2FSVgVKHMXeXcRc5c3IzvXy5F8+RRb
By/kF/IobFqF9i+YxNstKEgXJA+hsgT3Jk2FBba9SRhwZA1oU0rgMZTKLyoqQINCNSa9ymrOCcmyuC+Q
UZkJAubVkIL9kyVwUdhyZOUJFzUXsnPXJAKHY4QOel6u7NLiGubyA6yxhyv1sIrKygUML9VxCYGlRZUe
ensshcugK5INUNjtqKYPbNZ4oAKP8dCcIyJ5CtUgQ5qeVG4ojKbEVXrZXxWohRlFpXAriU5+EZ0Hezcr
CwqOWtvqOQsMFsOD5vaC0HIvUkqnthQ2vaw4Z/KirqOmo6zQuIRWEAh1eFhRBNK5BGwhsiDMWyNa5OjK
bbyp5jlt4BPnDk5RE4sPUX5jcAhZQnymHqB6HtKIKbA8ptaVCoV8AJ0DWonCEnuyfCfGHrsuCkqNxFrZ
Hr+Hapme1lq5YTZSoioymyLupkh6Zwh7rBUkfs6JR4C5NX6lOaApJlLMFJIo3LlxTbKDwqVrhJxVqJWA
pQgSFG4pjSo4ymsTWhDHTCwipY1+EJE6co2ypbWU85RCBK7+E1/vI9yl2HvptoJRcf7Wcp6icmEpmUxq
jamhYTR0wvZHClaFJNhfMC7jSixqepXvXEldpy+O5VyCrGveqbOzLJfeVJcyvyoYQoq4UVcJsYQCCwgO
vy3I23J1p6le4o5WCsFUq+Sa4RrhGFSRqWJNtSME9uRVnShCvkikmVVFGmBN6YQHownolHoAuChZxb0e
E9ifAnQKSBV66bWTYkIlwXHoFhD0FieOhasIKBmT1wuKLE6JPiULEAgEAiOvJB3pwnRJ0KdEV2kIlBFg
YWFxWFxXFOanRprVhAILCcFhYQQPo//aAAgBAwABBQIwL46DEGrisItU7MH1MCPQjoWlcD/SlufrFnj1
tN/X1RNUjPdjU4LtprcriE6NELPpJTsESx8TJ3HKO2QmygrknfjiVhBpQhKbXQrqGJTs9wuK49OSc9En
1OT84eCu+SnQNKdUcEydNcCsegFBNKkGUIwu2F20YV8dGuE6BGunxY9BHRzciSEhNcQnTOJTGjIKdO0J
1jC+SULATHgoH1lY6FgRqMT6i7Seeh6PrLHSB4xZjJQPEuGOteQtIIIB9GEOh6PWHL91lyd0wuK4qWEO
ToeJZEEArH/LpHHyUdI5iZgS+xDkCsdSs9CF7LkFkJwQb1CdIArDg5MQT6vvHV/aamFFWwY4MdHtymhB
vQlOcuRQWVyUhWeh6OR5IwuK+KhUUbSAWpkmE3oAsLCmlDU33TQsLCLVjoU5OXHrnoEFxXBcE5qLMpri
1fITZ3I3uK/knprlE5Ncs9CiOhHTinENXcaoZ8rKyvdcXqMnqU5flFiIUzMhMKjKYgemEWrinBycxy4r
uNXcUZws9MLKDlyWVxRYjEmx5XYXxPazBxUYUaYh1IRCc8BGRpE0oXLoOSaXpo6AoLj0JKwu2u0msyu2
VbqucBUITYE1iDVjo96ldlSIPwpH56io1CAIMXFcUB0aUCPRxQenPKBOOK49XqZFdxSSZ9OFj0/3aUHI
OWepCI6F4T7AXfXeTlI5CROI/qhc8ISoSpp6PKe9SyFSSJkhTSinQEp8BHpZKg4LKysrKdKMtkXcC76M
gRmQmUM4TZApZAnPCklCcQuaicg8IPCfxIfGB6P/2gAIAQICBj8CvnvdcBg90vUOE7MGDlIkSJE0JpJ7
hMhMF/fn3x+ww+PPPcKpNkPxgpE007nvJJxXFGSigwXBL057deT1dcktDKWWF9ht1JeoTtIUNHn4DE1a
DcSTBw5PAXAkTmwk24riC1+Qmbpi2QaZmwgRR17yWwjNoueSSGYNkP6g/9oACAEDAgY/Ar5hhbzbIe6c
JkMGD3TBVJg4kQThrNjTmtOSjmmbxTUmtZNM3zWL1HJas/QJqt6+/9oACAEBAQY/Anb7rTlK43bVxu2l
cbtq43bSuN21cbtpU/FPqWq1Wq1W9NqtV5zy4whEmMgIBWq1Wq1W9FqcdJ6KXIeyq+qwOdCJDLwssG9n
VMPnUc0EgycYzs6l/wCme4/iT/BcCctic0ya8QMLVbpY4Zs6/qagc+9O9lhngLAoVPNbn8e1eU6J+mZO
6KjPjaR2qz/CO1qQiov8VjlRoYrEGnQe8CrVywOVyc2i6nWp0jc5+HOb+MqNTDf3TGzIEqgh/Ll7EBWH
OZnsftX9vUvOy0jKoOxOu4dr2xkb10qeC2OaVvYF+xpW9hHD/rU6ENbCPcuFg7lKHY5G6XDtUnuW7V2j
/NSe3YV4T2r0o6iFvUH7FNhHZ1nEiE0JRarpZEOXNul+G+r8McjkKtCo6lUHiahiqz+c/K0ktaWfDuFs
AdCF7hjvQlLYU932uOJ/pYOrYTExY0iMI067LpBzRDSmYnEYlnJh5uFxjhTxbIfTfZW2RVzCYPFfcqtj
bMPTJOYm+7/Sn0qGBwuEc3XXew5iXG7HsQqHFU6jRbRdRoimflaCofcvtbmH6uFfFsf0VP8AcmU+VWw3
NcGU6tVrHULzrA57CbpOlemwxywCMaI7IhSvt1PcpVqg7Q5Sr/M0e5W0nbWqdAO/S4Lewzx+2PsW9uHT
EK1h2FGDR/GpSHRaVBueaBhBXndiLAIgyIyQTq2BG9lwxl8pPsRa9pa5pg5pkQR0UPtD8OMLWcfLezhq
v/my3lVxGJJg0ltCn4WUgZAJlRsn0zEIjJkOjpMJsfx0zGBhZZmRwBJxNOpvU6D/AFWlttx2XUphzY5x
AzVqsWZbsT3rgV2BJ0KL2yPaovosMcsFuh7NR/NSrn9y8L9S/wDOUBCJihTHhG8oAqJV0RhoW+LlUcNf
L2507D14B7YWTEDMIOZuvb42rk49vNGTFDjH6s6cGGLch6YAgHTJGJEsximj6Yg3QFT+1fdat7D1XXcL
i3TNJ7rA4nwHuRDhdcLdaiJwUxBQvI3rFGm4HInNvXg629NG+ZZ0bu8MqnSic6kxcK5otaVF9EXspElI
3da3qsdS3GzW4wuhoWFxuIb5P3Bm67M+luluya5bhPJmgVFsh8LVvA3U0ufcpEw5kIiOlCLC1rrKlrFl
a4Wps4AmehPc2nfp0mxvXcmRxGVOIby6cZHMvtz8QI4h2Fpc6PxXBPtR3UbzU/dMMmtETgeia3SQjm6h
6GtJgDlR5zatSGSwLyvtbTpdArcwraY0I/a67GCD21cPXytqNl3gqnhsZT5NSnKk88D26CqbY3oicc+Z
RZSEU67SvMPFTNhVegAKvPZ5dPmcutSf+6RTxV5bMQ0brD5bgW5JydHPFNFai6m8ZxBXrxvG11ic5jbt
Fvq4mpKmNGk6AqWF5z8RyW3edU4iiiA1bympKIkpo5fZ02p3mN2hRNZu1CNYK7UfvCxyjSZzhkgV/wCe
6hF4pjNFXa7hWZ8BF72plyNNotp8TTtTeYb9N1lYS7DmUwCfiQqVGcykLWC0jWm8qi17HDcDlGndoNjv
TvD5VSdeqkNHmskA93uTaVNgp06Ygym2QAVimE6OXosiuFG9JEh1isW6t5w2x9i4u4qMXERUG0nmKEKJ
ivTgpOhqKhUde1oXapah5pchxKBEY2grmYeQHqUfeE3K3KuV4atmhxRa8SsqDqzmjYIZ0fNYF6hdqaSt
2lUOsQRhTDdam4N1BTeSrIrgCdrUM2WKtC0KcELpAQLnrjipQ2hcbdqjfEkcTQiaf/PTDSYaUJuhqTDy
d66A52cjKrp3TazUjBHfgjGofYjNx7UY0wda4WrdCMYhTd3hRvDp4e9GYtXH3KBrlvY1TxD/AJgPYFFr
y7W5xQEm6YFXXPkt6oUNxuxSDe5QvAbF6jdUUcXgX8yjbXwwiXN0tzhNv1jd8RAmmvr1S1roikSJAjKU
5jMbSLhaL4HtWftRh7UbFaNgR8wr1HbT1z5j7dH5K18NY/JCTz+5SafmK9Id69Jq9JuxU6VPdc83nQkb
oXGdqmVoXvQyaU6rF+He+buUQGk57sFT5lStXfTkH3rks0Ar9bB0arxK84flBNZShTp0xdpsFgAyBTKt
RgerZ1Ha+ifRb0QOVVHxi0brNQ6QO5WyzKCtVqM0Zq1cSjH8EgmUVn6kU6HE7cZ2qXUzKStVqPWl13a1
arVxBWriUAdynJuvKrVb0Wq1Wq1GajHot6lvRarep//aAAgBAQMBPyEdX76j/p4TWQ+x7yGG5A+LeqKP
mhkhxq+dfmdyd9nfZ3E7yd9LHVN6RGix6y+8LdXvAd3vMUoApUgzwFEeV7wu1e8d895ynvO4nence7Kd
LeD1jVewvoZltYGxQR3hbKQ5ZoTkhQtzxo+Jo0PfeXGtdppmtvxvzX1BnqIWImV1uCcpoyZfEIhE1fQt
cAqHmNzwiA8XvBJV3vLbHI03mc4LmqHO67lVKvzxr+vrcKeyj6b+lxlMwGDQPLT5iblTtsRtGM4ksaRJ
c0QSidFhLHQIl5j1uclX/Moi5erDVrr2Ht5OP1KrgDsJVmqG7nmnSOcWAb1qmbrU2zBskOtkuTh3L2le
W3NPjf636TFAOfzZz5LlFjLMVvkSZ2p2T9RtBvH4LCr5a7fgYcslvEX/AOd+5E4fWV+ZcvAF/Iwjfsh/
kCyX2YObVdj+y2o9YfkhKe4P3LL5An8XPmnR+YtgkuXbrSLTC8uN4BNTeO90B+9e8aWNKGq2Bo99Hzia
IMUrHDycjFBaO8YzgsIiaDcOTy/8Hwzd9Kdajxr4I0kNKGG8q0AjinnLVCnhgA/sj/8AqR55eI7Y6OZp
i8UOE9eEYZonfA2yp96hUtJi9jHj6yvaUYticiRjR/Y0YfGnYfm4JXk/yCA2e39SGgI6fcwA90X5qHX3
/D+UxXYH7sfuTrn80vUfp/iWyg8p/ZpS/D/J/wAo/sUDeVNc3DSfxOhhplpaWERwjBIGp1Hn9x6OhHGO
DcIRHR6YKLjVZrewg102Kimm4aFLbv3jN7gJ8lJ6Q2N+FayPt1HNMsBslkNrIzPctVQXssfPglVsBYMB
lkaRl3V4lhCFVeTUvVZ7QHUOLxcqDjcz4gy1zV75QK6KD8VBqsnP/Ub83gNnxcSvmU+zmV/tlNKP8w0q
zeUFtSbuLqy0oGkHY4MBp2OL5Ihlit2DYeR3mU1WI3e3iEBNLbPwfMpkTVdWcwL7j8dOCWXy94Mmr/wV
iPtXUMA5/MRFttXVWhU/bS5nXbKNYYiJvNxLRse0WYnvA6jv7wCdJasvxFNpWhqHxVLBSS8O0yNmVQpL
QPhyTs/eDqblDLSlMpUvNfrLDR7boMPNdJT3dwkpjYQdJgwp0vD1S/UmlXTyiJqJKwNXAf7G1suobTVP
f0qaAcXHVJq4Z2LNL7ymambEdEhfSgWqOaislcAqlIZ1aQU2uMA8H2RidEslBZb0LhgaPxLw89QKDmTX
wikVpXhr0j9VVMm0VdtdSGzYEmvE5TjjfrLhS4WbrRG8WUguWKug6Eq8bpefNxwe9lB7EukcQp6PRAxk
XfWrNl1w+k0QLhrvp2+YsHrnQm169HeJSrlhAt6E8N+GDCjAaYK4fBYdcQXCgYOM4dGVGp7BqtAIYtVX
uxVA2LMyFsb0GgbELCnzEsVxtLdgbFQzCnvLQF+NYM4HvCK5WauMzBW8CGYdJUkG37rmjjvqmmAdSJGp
8HzM+7MrH2jaFm1j+532UBj0lTb2BVe1MTiGYivF094CbdVPCaviWZRpBpWbUDCVqEdBxesxYdA1XwI7
dTnllhZ7HvK8fM8cS3bMbtJz0gMKxrklOtTo1nAvptM8TKtYtafMV7uD9wrBfs3dKZ5aLCJdGYViUF3a
zNx5V+2WjP2/hFsY62Y5OOxbCkenj2tzLQRgix8kp25RLVcP5JbKF5W5nBnzPEY/bL+z0iBWmzLmDuyI
HNS5UwPHqMg/LEPki/i5fa7D+VHs+mn9wSym9f3UNvoUfiIu+7XKnQu/SA7ZfmUCudCgB1DOs1sbt5Tm
vmMZTmoXsOMQs2OIdG37t5faPdNWzIq39QZ2oEBxOOYE/wAyS0l0GNxFWqSi7v8AzMMi4JQemOzZwfxM
u8twrIO5gDRVwEtZV4D+E0wDnH5qZAL4/gzJN7r+JZobfGIPfMr/ANIjyjY58SkQHohzblAfmZ374gAB
xj9YkuaxyH5uB+7UVAdR2iNid1/qUsSdhKeG9xiYXzU6eJQeba5Oke6akYzbyTjhr5ljrcMAcoZn/dBq
5HtOW4KfUhYJ4VBkV9LjzF4gpAN4w1+Ihq18tFmcsTzNIz2NoCV0zMrQtvbXyjXX8KV1Z7/wEHqzuv7h
YPcf7n7CF/LD6F10Sn6/MTCacsJu+UzJu+cwPLex4lXbZtFhODiLeJyhcNiLd5TUivNmix4vXV3gMYWy
a8UfEqOJgdKDtH7/ADMnD4m8qJgy7ksVFnWY5ZqGlYdcQSbXweZlKa2xADR5mGMxwpBa8y+pnQwIeSNv
51gmDe0eDNxZAdXslteryPFQ9a70hQ8YOWqLvmKW4SyLsRxcnPMaLlOqGPGsY4+i9nL+Y4AXug8Uxq61
0GjyzyjYqP1Dl9CACoHKaVgsW8w6yN5d1TB17pl8ynB4mRImYTMqXK2lhmCXfoWux9K3HL8xgFVDo57y
xmzzG6H3i8RboXF1/LXh3PVgwW2AGBJZqCGqTjOgIbRVEFVGesmaU8RDrEGpuGWY2LLspmaBvaJmUzPD
P//aAAgBAgMBPyEJSNQJSUgPpCpUroOhUqWQppMfRXS+uIWw+f8ANu/iFbWkOsafn611hdKlwgfrmwQD
NnPv5i+H46KRKR4ly4wiP0ZMuX0roV9eZBMQwhn7+8Tnhdn7/ET1Hx7/ANnGH4jVH+RXMV0Z30DvgMO5
N1B8RG5OF0RzTRBHb9NvW4rScMbMZmGPy8SnNkotj7z5iO0G1M8fj8mXmV01fH3XnTxNQDybfYxA6yvF
D721+YjSz1fw4+Jsp84+c/gg7h7/ADkMeLh46Ib9e05gn/SnljF2iFNJzXTI6goz0bTfnaHP9/v/AGAL
NOglan4jHWrr5+9ISrRis6idyJgf7/H8ww6RRbp5QcuaZAMCi30yiB8Z3Jaqm8zSz0k5Dj+cTYHLFOku
6fbb04idf0YagLeZpg5Pv599da4mnSLDNJZqM11KXETeJ0Ypv0HeIDtLYfCK3gloJiLJnyP8ce3MyztK
UmPayrAtguv9hJKZTy5fuu0I5s4khlLdJfWeiEGQDrAgldHhI79Orj8xTSKeXyp1/T6RItjryQLphnTj
nQEp1hN6w+0W1fL/AGnFSwvZKmNoy2ghR9EGaRoRlFQ6BL6cDoWlE4MdqqMW1XFyNMRvCY+/73h1y7lc
d6ZmQB3y/wBlaKxuc+ux2y94JQKqZ5dxksgEOPHpi470bo6VmyDunRAN5Y5OiENScSG6TZZb3o/kB8RT
7HZibDo/30lamCHcPplyN2ZwZjykOa9K+0t05dDKlBDTfxdBE1RDQgGHNAxevtAy27Oi/PM0gjTuf5NE
RX1jby9HnS6csDoiHSLK6g4QOkAtE5j4hMwsIOCK3jsoPHvwWqtjz57zhRbpofLMzDiS1xHScacDrW0q
69snYxHEWg6M5WXmxOL0FEqlk0wBz/YxaAe1wanCLdkvTYjGvUH1NEr9V1aRIkwS461mh10BIHEw6CGM
j6MXRTpHT8P1ZnGL+hmhh0D66kIGC/SyTE6IcTieXYzbqkPQ39I6MdQqWliW/R//2gAIAQMDAT8hmqId
NMYCep9Lly5cuKy1wFiELgJYXKYDEjLlyoyrhURlv0NLadXUHbUzFyjHokttx9ePrk3pLVMVHSrYw/RS
ZjUc/uLVNxff3+5hsvzNPYznSdiXioiLFmGUxeEqmSYR4qXH6EpKou3FIbHz9/bBq+Ez2cU5ff3/AGA2
QEohUuJFFIGrowIiDAdHw9BuqpTFgUMzO0dtTRg9sSya5R+942dHfaFW2/Hu1+GaTV3f5XttvnEy3j7+
fmVLCfP8nIPT/vzHl9AlQqV0WlR+pFbQTSWh9TLsyow9MEw/mO40Pv3Ywu4/iWq69kvUSCEqMh6CZIFl
WkL2vQVm0MYdDVNY1rOFmJvmV0wLOjqhDzNYSOBD9ASumHTcL6B2nRTpSaxHQ6aff3tDRUZpCYCWvH3r
Ndhft9/ETuQhCsQ42oEDoLcehYehXL6AiagWk1SO9gll4YC29480TKOSGGBcLyswzrxM19Q9Iy9CguEY
jCGGC5SMXmCGL6EyMay3lm+LmFKP5FW3K/RBeorpMyhWXTJbwi1S4QcMpZly4zpduqUzB2QMcvrj6Iy0
WMbCF3CUNVKNpTiXIdBB1lTLzFEmgdYxY1RFcySsrxHC4nVNcZcL6Ui4jvP+dGrLBgwEBE6K7DoeojVg
lRMEyVGJXAlZggmkWErmPIfQQ5R10gsAbYyAQDowpqXNsQtLxDo6S7jxjocwZewfQGPqHoQjHVDmBLen
g6ATMiyXiEzKGZ4zT6NoS4y+iwK0hr0FUBOibp0qIkEYi9BfA7fWSD0QJSVlIqlw+Zk1lDFzlQOYHM5U
XvOdOVOdGQpL9Zzpy46VxXWPS5//2gAMAwEAAhEDEQAAEMeFmilsO3776fnSNOXwABenLx0mBCnCdQuf
1K260sAAEnQzqWgauBK4ADgfAkZDj/m5Y7OAvnbQaAaRdyj5riIgtGIKZ0ISttcr1XQtywzdDN38MvRX
QbEz5QHyJDFwHnvKyYvwoKZR9XqJ6wKizsJhiyJR+hvuXO19HylYfuAmdKyVQUx4SLgWX/jXLYpn/M58
BcdCXLNHAB9lQ+BPs/sS8zxwNn7QBW9OpOoip6afK+5f/9oACAEBAwE/EB/QGpeXLrBDVhdbPzEcHFZ/
tL+o5f8AvEqCvP8AaUmwchf+YsEPIv5jNQAhVVJm8Bnce8D0L1Z/2mH+gz/qM/6DA5xByuYFDheWLV7p
iRTvTKLAWvdNV91MM+QS8CWhBsAEA/tRlU/V/YHJTfKUrM21rPmP+4xXVPqz7M/cAALCuhlEQpc3rSpL
1oI8IxDAUt6gJGNWXMpopMFhVcByabnOK2doBQAyV3zmDQAM4a3LDlMgyFftH3fUjSI2B0olbu7lawlR
wAut2AtFY3XeaSdukLDXRoawey2rCS6bMO4NdIs/nrSbgAIW1LQg3AVl2sLzrozgkA0EVDa5BRlxn7qM
hU0iyimTWUJ2mlHai+jwKgkBGCKV6NSoXnQ1qUtTGc0x21WLgbt8EYwAI0iOpP8AlM01SlVUQU+reBNr
mB0Z5iNFn8ygmnYmQFDA6Z5lvnDeKg5Rb5ldst+Zd3vtpBGWaiFXTraX4iKbcjbeYyu9mgl6wAhHbgWu
LAdmKyFolvkBsuqWlguyCZTkYFkNhGYSDY5uEXjHtthQp8Ql5DZpHmh9BwwMBg+EgAlrYgurR3gYpAks
m1rONYdPFu+qplBsbK91ZZQ04dYPZUjHkJHgurDmPeiIg1DgXycrBbvExIgDYcr2gOoWpge0KAu5F8QY
gW6r8Lie2uLsvcsLDO4H4wS1Sa/NAjKg71rKIyff6ILWoSNWznaKaJ36Vi4E5AGQaukSkF4GTxZAAVCi
hRvlgroVVhgeoq1op6PRQR3GBjiae842qy0tIty0SrVItiKo1o4PQjx1gANJrkFoC2gX933otSIaBJmE
ylTT4MiDVKLpAYWIO2FSxkAWwQdYNsy1E3hmzMWn3Ddq7Bq2qK7kHp2CKCBTmEO+gtgAaR5iwvbSF9yl
JJYut9GIdU9iK3q6o+LBi2+QgFajEd96WxMvOqX7FSgBvJGDu4By5UZHsg6Zuq9KssnfA1XqEXWsvZeL
YuqPGQ/HRTAqg9ArgxikpbhKxfzLahDwtEK+IgvRCBhEp3i3e1W/ugDvfzJT4xlJDhBKRLINOlw8pefG
GdDBLpA0SxyZ02WvDK3SseMSgmzCW2BS0JqI5iAibQsK0Zq0NdUWCCwFwOZSRHsojN61FNbgEqAFVI1A
VqS7gA1A5EuZxAdFRfxKeKhlw/iaNLOXbxmIpl1DQ86cQMNC9Wj8QBphuRDEQVYAaurXXrKLawoTy539
iVy+w9ly5Crytfr/AAiIA3qL+x8OlFkglq1y2lZuV5WRFjAa8S2TeG3tEVsB5W6Zj2uwNwUJSs0tNhrD
YA9qcoUIAaAm4Qptr2W0UijCI6y2C0nEMUoC3fVcso/ZVl0OfeWtcr5IfC9LGFQRKWqHCU5yIVnS1kO4
xztaagEspoS1y3AH8sfohPq1VtNKEtBWlFsJphjIdWr7NyKLbKYe/MKgZuxlxt2lHnRmULkjT9UKMc0j
F01T2RelXrKgeJ00wGsJZdRWIXSXZULXtlNemzKYuaBK3vdk/wCL/ks1IWKcsNo1FTjav3DKmVG17O8M
SsoPK7S7ImgaHfzHTMGvUrUK1lij6UwldoIu60YjK7HEpWFoS5g4Fm1zWcudY7ocUKFzVxhDwWosYcgX
e97RxD8ZUaO1swPzLYvbQ0iga5RIDTSo3JdNXhwEWyaN3uEJZXK98SxYVPC9yixauhviNCpC/BMGgult
5zLeZalN3rEGkCwmtPaNpmVSoksT6zsyUl51qcYh4WwNaYxrLzRTuURQ86nCJaIwtL2g0b2a5j2qRj7W
8Tw+InW1VDW7tAXKO2tYgM1tHS5wS9dd3crscxS1a3bN2sLOiNFxMFDLioBsoW1jFqk0hzKbQLUTGOE7
2qoJ67otPPyWD1EB98doWbBANrQTd40Lx8SuP10IAUlpgaTJHu/AbCKBcmYM9C+r113M+bNiwII9BYEp
ONdCAbCwwZoF1aAvNQFcwUtVoGjbS0BbGtU1gNN/maimsieDvL9UNDoXYP3G5jdQX5IXWAvwdtYhIFXe
zWkI4WQjWezxBEWcWYHrnG0oty4+rtlvBPuplyWqsM2woHaAWadhgAFwArfxKr6CB5MamCuOSFHKAma8
1OPd1Da1aZVxjTFh/YMTCpLPJTDc6jAtFoHY9kzoYVqruoBg3GnEpaXMii86sOJRvnChTGNzM1SKd8sS
jrd52l6byKszVZc2aeYKFYIkFm0G7uxjlKiNi0mQMW6q5XKrKbSrQe2agKdhaB6wB1tXaW4hsE1SnOMV
ffWO27Vhb95TBUC8FeksYHIJa7yxGRTd3eOaAbsM/MCVt1CY9WI615YhPpDs/s7SxFGcl2veoiMyQnvL
4CpycPFTA3LF0DvASvEoN+yjYQasHyVxK0KL7A4nGADj6xwfUVCQpwAaImG9xggpWwL2oVKNHyQnyFI0
DDxUpE4hGMCxwC0viAIhtGinB76jkiFRQOoIx6gUj7ykgpfdIbY26KpiFiuNu8J0VraJroTb+5LvYICF
vdCHw0IwZG4Z97RwyHkHg9R8IK2nKJll6xeK9eRj69GU/wCD/kIG9Fk5QlLJVHqd2VKAYF1You7qtX5A
hVM6lPwd4Js02/tg9c2DBfMweZMIL+IPVmbJNtIMUJnJy20uV4egG1raL5+uUGkZvcDTXSCwQGgFMjam
L0ibEUIDRM4sqVjWhCLU7v4eJQUVcukpoM1V35hdjXdOxgVm5v8AlYCVFMtTXWU9GRaTzHEyC6NDvAqL
jGr1RVKrKmxruMdG+6D8akIkKYqvySWLsuzX6ne/Z2lsE6m5aDoUyUv8g6qgKHwiHREbGWdtPeFnnKTX
ihQRUAKFed8OVXRU1cNQ1Dl07mjgjUQzYK7q90aGHFaHzUTA2xXfKVRsREUUUiFsTUZi5BIdTMDXRNLI
u1tU9IwJu8VSWYRwBrkotbBzriZWPth3WpXPCygIjDAJhARHkh6zbyP4qBhZdKtPljWarJtfIsSp4DFN
9kRJ2osO2WMmstLv8sWjpuLhcOxRPRlBETPYeobhtEaW2JXDhHzNbSk6plSrnBQKuvXvhEx6AtB8zfKq
ZFG/UlsBmh374Yibg8uJXRBX2gZ42jeqzEzeSszNkhQcrEwApxNF3vLoaGRM7IkcSdVdiRNGhB1q4wUm
/WhHeYdxKVMyrpWVVrfKCC2HVa2gG0SIGos5lwMcXux3iTzl0ayxWpFRCogTguA8G7vAk4Mca07sBCO/
LfXwlqzQgoluI2WVlCK23jka2ZVNvYtlCDna6CChzNDd9Y6HDqXowUAtA7o6a6Rqix7pfROyv1SpGT9y
1WW03i77dEtXzGeyNW73WcxgKrKyp8y15ganbm4wkF96MxfLFuqjn1jMUbLfECrWcOYVBjlxK2SXVq6k
Va7UWQbS+wxLgFaRgbHKWw0/vrTKHhquq1ZlC+DW38UQAYC9J2Y3hAA8c+so1A6JrdxKpwafJiXHE2UQ
X+f1SE9jVgCqy5z7xDqKMH8jBfBTiHkKnVTkqFHgJnJnWZJSioA8hYy64TLyrvLkrE3Cx7zGGpv+ohyp
vmUYU1VtKIwxiMEVY3gy6HWNDGo/RmZkXjsTdG4rhS6THC5yAfS4FhLaIgIU9mgNZ0lWdQVrtxiDRvit
a2eDHYJuRpzFAFd2JtV5gaACc5maDjOYAuo1cwSWHvcah1SwAg4VXVf1BrK4XEfRvahYzXIcP/JTRZtA
wAeb0l0Ia1zxCpS1vcChPLeINZszhmwyTsT7g/yf/9oACAECAwE/EKBghwkS2g3MYJMFB8WPv06USiUl
JSINoCogSyIgk0AD/dehDiAVAOJSV046jhiFl7AGktVuuabsWFNCrXSU5Csa6Z1POI1RWWHM1HZ8mfxf
15Zh6CHQppL3b07CBDrUEsIeGUbOPWab7I/Jw+mJlYpitr4t1clrMrl+2m3pXrEcaOTJ77etQhcqXcP9
+IHmUgEBDiZklpERkMwzODAEqH0FL2WpUNu33s8/u4d1Jgbo8ANeBnQqXBOQp1v2quEA4SEMlzl/p6A7
wdX9zbb0r1gOiOiZXh57NMQAsfBX5iTGXj/s2q9LlOnusB0PeaKn78Qhl8ErFB9P9iNR8wX9f8jNV7kZ
rZ6f7Fl4+j/It+R/ZoIfWEn9BiVcqHdFjIPv27R0Y4ezfl3NTxlSnbZ/Jw8Jkh04W+c8ru7ZttjCkDW5
eeWqx2+SUMtIq9tS070B43SyCmsCdWhrYtugaUC4QJHgPOR6fzHiy4ANk1Tm+RhLMaNyNXexv5UsOsaW
QeBeCplMoWQNaJRyBu0ZiGdHav1H8KHv+ZU1PIlrleifuO19i/cU2PszZI8j+olwr1r8w8w7UxLQe/6m
Ja/fmA0sR1lIrYTS7hRUMpNJkdx5OGEzNsP6n4drNYMOKLEyJyPRdsRaWqmaNqe2dLvWCSsBW7T8Gg0D
BNOAr729HHMcF1/e/UAuNBKsvXUcOibyrOc1pwa1XTcSGtQDs95XArrBE1tCKiLwQO8Yp5PSKUld/wC3
F4XkD9Q3R6QZvHZzEG7HD7SqyYjgEALYdlbrs/p8O5vC91r1wiYfZ49ISZVs/eY+xfnq+zx4jQmniLT0
MWinYuOCDnkqK8jPdj0ShYUDupsPDR8kF2yvRhmhhd1KDdMGJCpgTjEEK5lwMGMXSQLMdyeWorbRhE6k
Q4hf8S/KFtbB7l+bF6oIw7vWzGfEr0JMjEMhQl1dPk8f5EFBTU09m9dpstGCVq2vf1hQUJpffIdOA/uF
BcPv9/MLyFnjb31gXLqapTJIveDCVcLAaQuwMTXPSBKjFYtwrlUNBP0TenqWMCj0ICQE3RSChfp5Bma7
KA1a3NTv7lw3C+ZYC33tLxbR3/5KVqeQ8Z1OS9tfkM3Jy6Ed+TRaiaUwxCnDfuakJWCm2vvKuVubXrV8
9i3fTMtVgr79PGxLbEPFYXUabM+wWjmNcEyjpHUZzNmvZluhe0FtYUwc/ekwN3xK9t/WHtJeJnVzDX4l
oLd73fiIiYdNj2ePsSmMPMpLAdBym+YLU0sbT5M+8p7qpVR4o9FpEeEZKLcgzyU4DrK3BgBgPH3a5bYA
pY4olVUQQ27gTWXhqiEEhRrBhoh9q/PSwgWhmxVAmRUQ3Q149JnRUIaWLuyRvD2hohYmR0iPX5C137OT
9QM0VM50cmpp6dpSls08bHqe5B8M3CEksB6ZgqJGsoc03YPKE0AvW/5Mkb4jrgXyw4Al+8vzDSXN/qJo
GB3ofi5aaMCSCWLAMvzLcie8MZF+v8jnS4uLcZ529uIqXiuKu/8AI4gwMtRh9UZUBsXbw+fw8QbpmITj
6Q6VajXgD0iapHiDWWBu+ZfKpjOA+GUy3TPTpGkr/wBQywfVmFe0v5YsUR4B+oKuX1JqISrQjuVXmDan
zMIHsShw8MG7IWq4FtODo+YRTH2f3+5Z1nqs1oPtel6kuLx4+/iZxe/vtC/SiVGsW6PuwdNIIqnsQggA
xBhOrF/T+w21vD/ZZlj0/wBZmSexKWQfeGxjwsa/ugZMCi85f4fmK2exK1BD8ocGXeHa4AqqHGV0bXNb
iE3N23OeNDaK05uh/tpE16rV1V1WcRG8EpaSg6BMyUGX6GYlJLjEvdzF5IaTkbQ2Sly+X+aekJgsIazV
zMAzBdoDpihiFY1AqqV4DhUrCjiWkwRDX6K7Bmo5lj1Fj3DWIojoy+mh6v7i3rHTobMzLCNMJ2hbYCgk
c5gQJVEbwn1BhmcCGcE2wwuzBufhFuTcf0en5uNxMWku5qC4iO0TiJxLw1ECqjx+IhG0o0nGjK5dRhpD
pU//2gAIAQMDAT8Qw2bwN6zXoITUVC4jRxEWtMj9y2W5l+ZbmX5l+Y7d4JQiaVNbiTR0TOmJxDVxB3l6
sZfmW6KJLIDVQ94YFtlFBQCBRZNU2kcjsr0rvp2EPnFxVpFvSBULmq/Rw/p9PqC2pdhKoHFysCAMjCuU
IDJ4gwI0jz1uHcqIxXARrDQr8PHvLObNnk5q2v7ZbUwr2MOlBmwNDVui29Tc2J8/1v65eYbebjf2/eTv
LI7m6ie8Q1XtOyzRSPRO0A5IpCpiCGSE0l6kFkTO5mowQ5ivP0EwhqEM7Vd/vSuNjTEEy5pqNhVCvUN7
UUOAxi0PelLF5m1W9tb8c+MzHmnO/wDH8rF7brXk8m344elekFOOkV1JskXsQTZLhielZqxxyyvRrEsE
lymn0WEWqjAcJBa5+Z5/uni6lug/fvMsKKLYHBXu8uW1WYVR9OM4zvpSuN72XURnTPk4I1kyOhiaYodh
6loF4vO0XIoXg+So7tR3ge/CNPCDOtbWsYEOjU4rHvcPWgFB53p4z3lApDvY/FDwiOaWveLdGBLdYjSo
A5uUXWCzEs2j2zHg+hNBp6st7Pw/yd74/wBlCiA6sygx3l/QeND04/GdgjFFJBh6GQ72d/TjQ2lIeyG3
d+Rd8GgQIlCS+VZ8y52anhyfHWkDyHNfviGbpXx7bHO29S4xVdK2k1xjMUxnLGjWC5a8MNR+oP8AJdye
6fmfZYQWzW+7OdA3YBmN8D96nb2S4bAWCPJdemjqfFQYNAbn3iBwvLf1gCNEsOT8dLHDuq/HftLLMOG4
yMVjiZS/6/e3txF20gIQOsMZRUoLYKWXMZMHSA7dMKmU7yiVzMELtEYzDPtWR9Rx5RR3V8RReCgtbn8/
kEeLZd8nkYg0Fsq9Q7DuXs7sasHpYN4Kt02lFNJWbzIhsFPZhiEVcEmgS1luJcyiMDOCNbvoS4iwVguL
5hNeIFgTepp9Gx9H4WHBTgDInn7TiAzpH4MBmWJBuuTklBxHrmwxAnO0p0taDXz2O7M2oW6HRc+nyQjM
VMSykixusrnBRcu0jxKW5Yg2GDEowivWVgyan87RyiIrw5MJWhNahqkfbHz/ANilRVw5scVv2fiXmdQu
rMFQqMwS/QEcBFlRzAGxl0D1c+07nwygNnuSztHE3l2hTLXccTYNw4xvKG0O41UYvQP6f7HXeLg8u5LD
q1P5FXM9RKuPM8txzO1EyjEtIT1/yINk7H9jrP6y3oXvO1hUNwNTSbwguVOkszDCqmjEVyziRjoylhpo
3r/sAu6lwGNqdh2lK5HXz/ssu6RE0uLChEGyLlGcRYhvM6B5QlEl938EI0KvjHyxdW378dKhgeh/Izae
ib3egSr0iNYohs7QRwSprHdy+C1r4jOq/r/e3tH7ja9IpIpS5zXbmFlh3GUFOIUMN6lBF1gqP2oot5mK
tIh2IOUdMxYNvufyaOPuwNH5ZnF8wm7ORNUk0Ka806JrbSJdbQrAuW799/NXCWEDzn5x+Jlk8HPy2+8B
8sKy4MUQrCSrljrNU5qGhg630mqJhglFQH1ljWFqrSKUaRztL9yWXMPJgwZqJcDEUdoZRiOfmI40pgCs
u459AcHtFiFpohCyiCKghgx2LMobzjENaYBSg7xUjpjyOWWq2lCmMw53SBq6H00dRjdybJJ3o8hMmseA
Y77zcj3gqae8LoFeYJow8wzVPeFzWvMDVj3mdpXmW8CvMpXS46wHi4zaxlRDxRL9I94NwPeMKM95pmwZ
x1//2Q==
</value>
</data>
<metadata name="IL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<data name="IL.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
DgAAAk1TRnQBSQFMAgEBBwEAAbABAwGwAQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yYAAXQFRgHyFQAB/wH0
CwABBxUAAUYHJQHyFAACQwEVCQABQwEVAUMCAAHwCwAB8AQAAUYJJQHyEwABQwIVCAAB8gFDARUBQwEA
AgcB7QgAAf8BkgG8Ae8CAAFGAiUB/wFMAyUCGgIlARsRAAEHAUMBFQETAUMB9AUAAQcBFQEUARUBQwEA
AfcBvAHtCQAB9wHwAZIBAAF0AiUB9gL/AUwBJQH2Av8DJREAAfQBQwEVAeoB+QIPAx8BQwEUAR8BFAEV
AUMB/wHtAfAB7AHqAW0B7wMAAe8BDgHsAe8B8AHsAQABRgIlAUYD/wH2A/8DJRIAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKxIAAUMBFQES
ASABDgEPAR8CIAIVAREBFAEQAUMBAAFtAuwB7QEUAW0BkgHsAZIBbQHqAe0B7AHtAQ4BAAFGBEwB9gP/
AXQETBIAAUMB7AEUAQ8CHwEAAQ4BDwEBAR4BRAFDARABEQIAAfcB7wHrAu8B7QGSAe0B7wH3AZEC7wIA
AUYDTAH2Bf8BdANMEgABvAEUAQ4BEAFDAUUBHgEBAUMBHgFvAQ4CEAMAAuwBvAHsAQcBvAFtArwBjQG8
ARUBvAIAAUYCTAEaA/8BTAP/A0wTAAFDARABbQEVAQEBEQEVAQ4BHgELAR8CDgMAAfIB8wHsAfIF9AHy
ARIB8gHzAgAB8wFTAUwBmgL/A0wC/wJMAU0TAAEVAhEBHgEABw4FAAG8AvAFAALwAbwBEQMAAfMBUwpN
FQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlTNwAB8wdTlAAg/wcAAUMBAAHyFgAB/w7x
AfAG/wH0AygG/wUAAQ4BkQGuApEB6gH/BwAL/wIAAf8B8QNrAYsBkQGLBIoBSQFKAZEB8Qb/ASgDKQEo
Bf8EAAFDAZoBegFSAZEBtQESAfEGAAH3AQcBvAIHAu8DBwHwAfIBBwEAAf8B8QIGAYsBkAG7BYsCUAFr
AfEG/wFQBCkBKAT/AwABDwEHAZECcwGRAbUBtAFDAfQEAAH/AbwB7wO8AwcBvAEHAfAB8gHxAQAB/wHx
AgYBiwGQAbsEkAFsAVABUQFrAfEH/wVQAXMD/wEAARQBUgHzArwBBwH3AZECtAEOAfQEAAH/AbwB7wPw
ArwC8AG8AfEB8gHwAQAB/wHxAosBkAGzAbsBKQGzAXEDUAGQAWsB8QL/AXMFKAVQAXMC/wIAARoB9AH3
ARIBQwERAbsBkQF6AewB/wLxAfMBAAH/Ae8B9wG8BvABvALxAbwBAAH/AfIDkAGzAbsCswNRASkBswFr
AfIB/w1QAZkB/wIAAQ4B7wETAeoBFQEPAZEBDwEOBfEBAAH/Ae0BvAnyAfABBwEAAf8B8gSzAboBiwEp
BHgBUQFrAfIB/w5QAf8EAAFtAREBQwEQARUB8QL/AfQC/wIAAf8B9wHxCPIB8QHwAbwBAAH/AfIEswG6
AbsBKAJ4AVABeAEoAWsB8gH/ASkMUAEoAf8EAAG7AbQBkQFtCQAB/wGSAfEB8gbzAfIC8QHwAQAB/wHz
BLMBuQG6AdwBtAFJAlABSQFrAfMC/wFQBXgBVwRRASkC/wMAAfMBAAGRARMLAAGSAfEB8gbzAfIB8QHy
AfMBAAH/AfMGuQG6AdsD3AHbAWsB8wf/ASgEVwFQA/8DAAHwAQ4B7AEVCwAB7QHxAfIG8wHyAfEB8gH/
AQAB/wHzDNoBiwHzBv8BmQR4AVcE/wEAAfEBAAEHAe0B7AGuAfIKAAEHAvIG8wHyAfEB8gIAAf8P8wb/
ASkEeAX/AQABbgF5AbwB9wETAfAMAALyBvMB8gHxAfQCAAH/CPMB8gH3AfIB9wHyAfcB8wb/ARwDeAb/
Ae0B6wG8Au8OAALxBvIC8QMAAf8B8w3/Ae8H/wGZAVAI/wETAfAB6hwAIP8CAAHzAfcB/xsAAUIBTQE+
BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAT/AfgBDwIAAZ8B/QL/AfABBwIAAY8B+AHf
Af0B4AEDAgABjwHwAY8B8AHAAQECAAEDAeABBwHwAYABAQUAAoABAQIAAYABAAGAAQABgAEBAgABgAEA
AYABAAGAAQECAAGAAQABgAEAAYABAQIAAYABAQGAAQABgAEBAgABwAEBAcABAQGAAQECAAHAAQEBwwHh
AcABAwIAAeABAwHnAeMB4AEHAgAE/wHwAQ8CAAb/AgAG/wYAAfwBPwL/BAAB+AEPAeABAwQAAfABDwHA
AQEEAAHAAQcBgAEBBAABgAEHAYABAQQAAYABAAGAAQEEAAHAAQABgAEBBAAB4AEBAYABAQQAAeAB/wGA
AQEEAAHgAf8BwAEBBAAB4QH/AcABAQQAAYAB/wHAAQMEAAGBAf8B4AEDBAABAwH/AeABBwQAAQcD/wQA
AccD/ws=
</value>
</data>
<metadata name="cmCopyPaste.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>165, 17</value>
</metadata>
<metadata name="OFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>290, 17</value>
</metadata>
<metadata name="SFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>366, 17</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvc
3yTb2+Ak29viJNvb4iTb2+Mk29rlJNvb5iTb3OYk29zmJNvd5yTb3uck293nJNvd5yTb3egk29vgJNvb
3STb2+Ak29vhJNvb4STb2+Ak29vhJNvb4CTb298k29vgJNvb3yTb294k29vfJNvb3STb290k29veJNvb
3STb298k29vhJNvb5CTb2+Yk29vmJNvb5CTb2+Ik29viJNvb4STb294k29vbJNvb2yTb29sk29vbJNvb
2yTb29sk29vbJNvb3STb294k29vcJNvb3iTb294k29vfJNvb3yTb298k29vfJNvb3STb29sk29vbJNvb
2yTb29sk29vbJNvb3CQHCDn6BQU/+gUFRvoFBE36BQlW+gUTYfoFHGj6BR1q+gUjbvoFKnX6BSp0+gUp
cvoFKXP6BSh0+gUWVPoFBDD6BQU7+gUFQfoFBUn6BQVE+gUFR/oFBUP6BQU7+gUFP/oFBTz6BQU4+gUF
NvoFBS36BQUv+gUFM/oFBTb6BQVB+gUFUvoFBWL6BQdx+gUGcfoFBVv6BQVO+gUFTPoFBUb6BQU1+gUF
KPoFBRr6BQUQ+gUFDvoFBQj6BQUG+gUFDfoFBSH6BQUw+gUFK/oFBTP6BQU4+gUFOfoFBT36BQU++gUF
NvoFBSX6BQUR+gUFCPoFBQX6BQUF+gUFBfoFBQb6AABE/wAASv8AAFH/AApZ/wAWZv8AI2//ACh2/wAn
dv8AL33/ADWD/wA1gv8AMX7/ADN//wAwfP8AKHT/AANI/wAAP/8AAEf/AABR/wAATf8AAEr/AABM/wAA
T/8AAE3/AABD/wAAQf8AAD7/AAA9/wAAOv8AADz/AABC/wAAUP8AAGX/AAB2/wAOhP8ACYD/AABj/wAA
Vv8AAFH/AABM/wAAQv8AADP/AAAg/wAAD/8AAAb/AAAH/wAADP8AABP/AAAj/wAALP8AADH/AAA4/wAA
P/8AAEL/AABE/wAAP/8AAB//AAAF/wAABP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIDU/8AA1b/ABRh/wAk
bv8AMHj/ADR9/wA1gf8ANYH/ADiF/wA/if8AQor/AD2G/wA+h/8AOoT/ADaA/wAcZv8AAEz/AABU/wAA
Vv8AAFP/AABS/wAAVP8AAF3/AABZ/wAAT/8AAEr/AABK/wAAUP8AAEz/AABL/wAAVP8AAGX/AAB0/wAO
g/8AIJL/ABiL/wADcf8AAF7/AABV/wAATv8AAEj/AAA5/wAAI/8AABH/AAAH/wAADP8AABX/AAAk/wAA
Lv8AADb/AAA4/wAAOf8AADf/AAA5/wAAN/8AAC3/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
Af8CC13/AA5f/wAhbP8ALXn/ADWA/wA5hP8AOob/AD6K/wBCjP8ASI//AEqS/wBFjf8AQIn/ADqD/wA3
gP8AMXv/AAZX/wAAVv8AAFP/AABS/wAAVP8AAFf/AABc/wAAW/8AAFj/AABX/wAAW/8AAGL/AABd/wAA
X/8AAmn/AAZ5/wAMgv8AHI7/AC2e/wAnl/8ACnv/AABl/wAAW/8AAFH/AABK/wAAPf8AACn/AAAd/wAA
Ev8AABH/AAAY/wAAKv8AADf/AAA8/wAAOP8AAC7/AAAe/wAAFv8AABD/AAAI/wAAAv8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAH/Ahln/wAYaP8AHmz/AC55/wA2gv8AOIX/ADqG/wBBi/8AR5D/AEuS/wBM
lP8ASpP/AEKL/wA6hP8AN4L/ADeB/wAaY/8AAEz/AABW/wAAUf8AAFT/AABa/wAAXf8AAFz/AABe/wAG
bf8ABG7/AAZv/wAGbv8AB3P/ABaB/wAaiv8AH5L/AC2e/wBArf8AOan/AByM/wAHc/8AAWr/AABg/wAA
Wf8AAFb/AABG/wAAL/8AACP/AAAn/wAAM/8AADX/AAA5/wAAOP8AADr/AAA2/wAAH/8AAA//AAAC/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIYZ/8AFmn/ABlo/wAjb/8AMHv/ADSB/wA8
hv8ARI3/AEqT/wBNlf8ATZb/AEyT/wBEi/8APYb/ADuE/wA+hv8AM33/AAJJ/wAATv8AAFP/AABU/wAA
XP8AAF3/AABj/wAAZ/8ADHX/AA95/wATfP8AGIH/ABuE/wAmlP8ALJz/ADGi/wBArv8AVL3/AFC5/wAy
n/8AHIb/ABV//wAQev8AA2//AABn/wAAXv8AAEv/AABE/wAARf8AAEj/AAA//wAAPf8AADz/AABD/wAA
Pv8AACf/AAAW/wAACv8AAAf/AAAQ/wAADP8AAAP/AAAA/wAAAP8AAAD/AAAA/wAAAf8CHGv/AB1r/wAh
bf8AJ3D/ADF4/wAzfP8AOYD/AEKJ/wBJkv8AS5P/AE2U/wBNk/8ASY//AESM/wBGjP8ASI7/AESM/wAT
W/8AAEj/AABS/wAAXf8AAGH/AABn/wAAb/8AAnL/AAt8/wAQfv8AIYn/ACyV/wA1m/8AO6T/AESt/wBM
tf8AWL//AG3K/wBuyP8AULT/ADyd/wA3lv8ALpP/AByH/wAPe/8ACnX/AAlt/wAIZ/8ABGH/AAJb/wAB
WP8AAFb/AABQ/wAARf8AADb/AAAn/wAAH/8AABf/AAAV/wAAG/8AAAv/AAAB/wAAAP8AAAD/AAAA/wAA
AP8AAAH/Ai13/wAod/8AKXf/AC54/wA1fP8AO4H/ADuC/wBFif8AUJX/AFWX/wBZmf8AXJr/AFyY/wBZ
mP8AV5j/AFWY/wBRlv8AMHz/AABS/wAAXv8AAGf/AABt/wAAc/8ABXj/AA5+/wAUhf8AGoj/AC2V/wA7
of8ARKj/AFK0/wBjwf8Ab8v/AHnT/wCR3P8Ak9z/AHrN/wBmuv8AWrH/AE2p/wBAov8AO5v/ADiX/wA1
k/8ALYr/ACSA/wAVeP8ABnD/AAFi/wAAU/8AAEX/AAAw/wAAKv8AACf/AAAi/wAAGv8AABX/AAAE/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAB/wITQf8AEUD/ABRH/wAUTv8AGlX/ACJh/wAnav8AOHj/AFCK/wVj
mf8QcKL/EnWn/wxzpv8Gbab/AGSi/wBhoP8AXqD/AFWZ/wARc/8ACXT/ABF7/wATgP8AFYH/AB2K/wAg
jv8AI5H/ACeU/wA2nv8AQqb/AFWw/wBuxv8AUrv/ADKs/wBDs/8AcM//BJLb/wCD0/8AaMH/AHXF/wBw
wf8Abb3/AGu7/wBkuP8AWbD/AEql/wA2lf8AIYH/AA1z/wABZf8AAFL/AABE/wAAM/8AACz/AAAm/wAA
Jf8AACf/AAAv/wAAHf8AAAj/AAAA/wAAAP8AAAD/AAAA/wAAAf8BABP/AAAP/wAAF/8AACL/AAAt/wAA
PP8ADE//AClm/wBEfP8BWIz/BGOW/wRlmv8CWpf/AU2R/wBHk/8APY//AEaV/wBUnf8AUJz/AFWh/wBi
q/8AZq//AF6s/wBarP8AWK3/AFCq/wBQq/8AUq//AF60/wBww/8AQ63/ABaM/wEnmf8AP6r/Ale8/xOG
0v8KbsH/B2q1/wKZ0/8AoNr/AJrY/wCO0/8AgMr/AGq//wBSrv8APZz/ACqK/wAXeP8ABWf/AABZ/wAA
Tf8AAD7/AAA1/wAALf8AACn/AAAf/wAAG/8AABD/AAAE/wAAAP8AAAD/AAAA/wAAAP8AAAH/AQIH/wAA
B/8AAAz/AAAT/wAAHv8AATf/ABJR/wAmYf8AN3L/ADt4/wA1d/8AMHf/ADF6/wAtef8AMoD/ADaG/wBB
k/8ATJv/AF6n/wBys/8CicP/CpfO/w2Z0P8Jlc7/BZHN/wKNzf8Aicv/AIvM/wCOz/8AUKf/ADWS/wBi
tP8Hh87/AIjU/zW75/+Q7vv/auH3/1bZ9f9Kz/D/Ncft/xm36P8Fotz/AIrR/wB1xf8AXrb/AEyn/wA7
mf8AJ4j/ABZ3/wADa/8AAF3/AABQ/wAAQP8AAC//AAAj/wAAFP8AAA7/AAAF/wAADP8AABj/AAAK/wAA
AP8AAAD/AAAB/wICHP8AABz/AAAp/wABM/8ACj7/ABhS/wAgWv8AJGH/ACZn/wAhZP8AIWP/ACtt/wA7
ff8AQ4X/AFCP/wBbmv8AWZz/AFuf/wBco/8AVKL/AGWu/wN5u/8Ih8T/CpTL/w+e0/8Podb/CaDW/w+l
2/8Bcrv/AFWh/wBwt/8Ag8j/AJrZ/wKx5/9S2fT/5v7//8D1/v+g7Pv/geT5/2DX8/87xez/GLLj/wKg
2v8AjdL/AHzE/wBsuf8AW67/AEqf/wA5kv8AJYP/ABZz/wASbv8AClz/AAVG/wACOf8AASX/AAAQ/wAA
F/8AACT/AAAe/wAABf8AAAD/AAAA/wAAAf8BAiP/AAAo/wAAOv8AC0n/ABxZ/wAqZP8ALmf/ACNj/wAd
Yf8AJmX/ADFt/wA/ev8ATIj/AE2O/wBRkv8AYJ7/AnGr/wd7s/8MgLn/D4O9/wyFv/8Dg7//BonD/xmZ
zv8jpNb/KKnZ/yWs2/8Fi8v/BHm6/wuUy/8Qo9f/Hq3e/xm45/820/T/w/T8///////p/v7/sO/8/37g
9v9X0PD/Nb/o/xuv4f8En9j/AI/O/wB7wv8Aa7j/AF+w/wBVpv8ASZv/ADuR/wAxiP8AJnz/ABtx/wAQ
Zf8AB1f/AARN/wAAP/8AAkn/AAFC/wAALP8AABP/AAAC/wAAAf8AAAP/AQIZ/wAAKv8ABEL/ABtX/wAo
Y/8ALmf/AChh/wAeWv8AE1P/ABFV/wATWv8AFWH/ABpn/wAca/8AIXH/ADCA/wBNl/8BaKr/Bn65/xaR
xf8hmsz/HJvO/xyczv81rNj/R7je/1fB4/8tr9v/IaLQ/0G43f9BwOX/YdHu/4zo+f9x5fj/uvX9////
////////9v///7vy/P+C4Pb/Vc3u/zK85f8Tqdz/BZTS/wGGxv8AdL7/AGW0/wBdrv8ATqL/AESY/wA+
j/8ANoj/AC5+/wAldP8AGmn/AAxd/wAEVP8AAVL/AABM/wAAQP8AADP/AAAi/wAADP8AAAb/AgIM/wEB
Cv8AAB3/AAQ9/wAMS/8AFlL/ABlT/wASTP8ADkb/AA9J/wAOTf8ABkf/AAA7/wAARP8ABlj/ABhs/wAp
e/8APov/AFCb/wBfp/8AcbL/BoO9/xaSx/8uodD/SrHa/2PA4v9Etd7/PK/X/1m93/9vyuf/Ycjo/4XZ
8f9g1PH/feD2//b9/////////////+7+///B9P3/kOX5/2nW8v9Ox+v/Lrbk/xOm3P8Jntb/AI3N/wB6
v/8AbLX/AFWk/wBHmP8AOo7/ACyC/wAgdf8AFmr/AA5g/wAJVv8AA0j/AANK/wABRP8AADn/AAAx/wAA
K/8AACP/AAAZ/wICGf8BAB//AAA1/wAUU/8AHlv/AB9c/wAYVv8ABUX/AAE+/wABPv8AADb/AAAo/wAD
MP8ABUv/AApf/wAOZv8AEGj/ABxz/wAuhP8AQpL/AFSd/wBqq/8Lgrn/NJvJ/0+s1f8+p9P/QqfQ/3TC
4P+Ayub/gc7p/3/M5/990u3/XMrr/7zs+P/9////+v////T////Y+f7/sO/8/4ji9/9m1PL/SMXr/yay
4v8IoNf/ApXS/wCIy/8AfML/AG+5/wBeqP8AVJ7/AEuW/wBAif8ANHz/ACZv/wAbZf8AFlr/AAtH/wAH
O/8AAy//AAEn/wAAHv8AACD/AAAp/wAAMP8CAzX/Aixn/wAybP8AQHf/AEl//wBIgf8AN3P/ACFe/wAb
WP8AE1X/AAxP/wANUf8AEFz/AA5g/wAKX/8AC2H/ABxw/wAyhf8APo//AEqW/wBgov8OerL/LJDA/zCT
xv8pksP/UabP/3/B3/+Ozef/gszn/3TF4/+Z1uz/e87r/5TZ8P/p/P7/8v///+/////c+v7/wvP9/6Ho
+P932fP/Scbr/y+45f8Uq93/AJrU/wCJyv8AecD/AGu0/wBZpv8ATJj/AEWQ/wBAjP8AOIP/ADF5/wAs
cP8AKG3/ACRn/wAaYP8ADU//AAM//wABOP8AAjP/AAU7/wAIPf8AAi7/AQMe/wJYkP8AX5T/AGaX/wBr
nf8Ab6H/AGue/wBjlv8DZ5f/C2uc/wFPjP8ANnn/ACZv/wAfa/8AIW//ACNw/wAsdP8AO4D/AEaJ/wBa
mP8Jcaj/JYW3/zeWxP85k8L/Z6/P/4DB3/9qutz/OaHO/yyZyf+Ax+L/i9Tr/1jA5P9JvOT/WsHn/6fh
8v+m4PT/xvP8/7rw/f+T4fX/Zs3u/ze35P8TpNn/AJXQ/wCMzP8Ahcb/AH3B/wBos/8AVaL/AEaT/wA3
hP8ALnn/ACVv/wAgZv8AHGD/ACNm/wAhZv8AF1z/AApJ/wAEPv8AAz3/AANC/wACQ/8AA0D/AAI+/wIE
Nv8CVov/AFuP/wBhlv8AYZj/AGGY/wBil/8FaJr/HHqp/xlonP8CSon/AEqI/wBSj/8AWJP/AFuV/wBa
k/8AVo7/AFqR/wBHgf8AMGv/AlOI/x56qf9Mm8L/dLPT/4TC3f9Op87/EHiy/wBZnv8AXaD/F4i//xuM
xf8QgsL/AHG7/wBgt/8Aa7z/AG/B/ziZ0v+b3PL/jN/2/1HB5/8jqtz/CprS/wCBxP8Ab7n/AGaw/wBm
r/8AXav/AFWi/wBKl/8AOIX/ACly/wAeZv8AFFv/AA1S/wAPU/8ADVL/AAVH/wACQP8AATz/AAI6/wAC
Of8AADT/AAAw/wAAMv8CAzP/AluP/wBjkv8AbJr/AGyd/wBnmv8BYJT/GmmW/y5/p/8ocpr/JWiS/x5g
jv8XXYv/EF2L/wdcjP8GXoz/CGqV/wBEcv8ADDf/AClc/xpsmP9DkLb/cK/O/3O31P8/nMf/BVub/wAv
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
AP8AAAD/AAAA/wAAAP8AAAD/AAAK/wADMv8GM3X/LpfC/y2YxP8Sfq7/AHGk/wBsov8AbqX/AG6m/wBp
pP8AZZ//AGGf/wBamv8AVZP/AFSO/wBSjv8AU5T/AE6P/wBMjf8AV5j/AEiJ/wA5ff8AMnP/ACNk/wAY
WP8ADEn/AAQ7/wACNv8ABDL/AAQp/wIFJv8CWJn/ADp2/wA6af8QU3z/F2CL/xVdh/8WYIT/F2SI/xFa
g/8DOVn/AA0X/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAUJ/x5kff9HncD/GkRz/wAAAP8AAAD/AAAA/wIS
IP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8AAAD/AAAC/wAPNf8AIF//KoO0/zqjz/8njLz/DXir/wBr
nv8AZpv/AGmh/wBrpf8AaaP/AGOc/wBdmf8AW5X/AFeQ/wBVjv8AVo//AFiW/wBbm/8AW5r/AFWW/wBQ
jv8AR4L/ADV3/wAlaf8AFlb/AAtA/wAGMP8ABDD/AAIv/wAAKv8CAi3/Aj96/wAuZf8AJ1f/BDhi/w9M
df8RT3j/Dkty/w9UeP8ENU7/AAQI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wcNEf8OLDr/L3mZ/zuI
ov8eUG3/Bhov/wIJEP8CERv/AAML/wAAAP8AAAD/AAAA/wAAAP8AAAX/AQkP/wIcNf8VSHj/NI27/z2g
zP8okcL/FICx/wRuov8AZpn/AGSY/wBnnf8AaqP/AGym/wBnn/8AZJv/AGOa/wBimP8BXpb/AVyW/wBa
lv8AV5P/AFKM/wBOh/8ATIb/AEiD/wA/ff8ANHT/ACtn/wAhXP8AGFj/AAxS/wACSv8AADz/AgMx/wIi
WP8AHE//AB9O/wAmVv8BOmT/Bj1o/wQsV/8AFCX/AAAA/wAAAP8AAAD/AAMJ/wABCP8GAgH/BgoL/wAD
CP8KJS3/ByU3/xYzSf8waoH/LnOW/0aMrv9Nian/OWuI/yJPbv8TLUL/Chgm/wkZIv8hQVb/O3CO/0aL
r/8+irH/P5O9/zWTvv8ki7v/GYK2/whwo/8AXpL/AFWK/wBPhv8AU4r/AFiR/wFYk/8AUo7/AE6I/wBN
h/8ATYn/AE+M/wBUjf8AVpL/AFaS/wBWjP8AVov/AFeM/wBTif8ASIH/ADt0/wApZf8AGFX/AA1E/wAE
NP8AACf/AAAa/wEBEv8CHlX/ABpR/wAeU/8AH1L/AB9I/wAaPv8ABhT/AAAA/wAAAP8DCxP/ABkv/wBE
b/8AQHL/Ay5X/wMLGP8AAAD/AAAA/wALFf8TRWP/JWqM/y54mf82fJ3/OH2c/z2Bof8+g6b/PYWp/zuB
p/87g6f/RpC1/0GMs/8ygqn/J3un/xpyo/8QbaP/CW2k/wVnoP8BU4z/AER7/wBCd/8AQXn/AEaB/wBR
iv8AWI7/AFiP/wBVjf8AU4v/AFOL/wBOiP8ASoX/AEmG/wBCgP8AN3P/AC9q/wAmX/8AHlX/ABNH/wAK
Pv8ABC//AAEY/wAABP8AAAD/AAAA/wAAAP8AAAD/AhlY/wAVT/8AEUL/AAg2/wACFv8AAAP/AAAA/wAA
AP8AAQH/CDha/wA8cf8APWT/ADJN/wAXIf8AAAD/AAMJ/wAZLv8ANlr/Bkxv/wtFaf8HPmb/BkJp/wNB
Z/8ERmz/B091/wxagf8WZYr/G2qP/xhskf8WbJX/D2qW/wdpl/8DZZn/AGGW/wBgmf8AWpf/AEeB/wA5
b/8ANGr/AC9o/wAuav8AL27/ACxq/wAmZP8AIF3/ABlW/wATUP8ADUX/AAhE/wAFRf8AA0X/AAA7/wAA
Mv8AACX/AAAd/wAAGf8AABv/AAAR/wAAAf8AAAD/AAAA/wAAAP8AAAD/AAAB/wIZYf8ACEf/AAEx/wAB
Nv8AACb/AAAM/wAAAP8ACSj/AAs6/wAIGf8AECn/AAYJ/wAAAP8AAAL/AA4k/wAiRP8ALlP/AC1R/wAr
Tf8AHz//ACBA/wAjRf8AJkf/ACtK/wAvUv8BNFn/AjRb/wIxXP8BL1//ASxg/wAqY/8AJWL/AB5b/wAY
W/8AFmX/ABFk/wAHRf8AAi//AAEn/wAALP8AAC//AAAz/wAANP8AADH/AAAu/wAAJ/8AACP/AAAe/wAA
Hv8AACD/AAAe/wAAGP8AABb/AAAU/wAADP8AAAb/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
Af8CJ3X/AA5c/wAGTP8ADlb/AApS/wAAHv8AAAD/AAYQ/wAJJf8AAAD/AAAA/wAABf8ACSb/ABVD/wAe
SP8AIUb/ACNK/wAkTP8AHT//AAAG/wAAAv8AAAL/AAAC/wAAAf8AAAT/AAAK/wAADv8AABP/AAAb/wAA
If8AACf/AAAl/wAAJ/8AADH/AABG/wAASP8AACv/AAAX/wAAFv8AABz/AAAh/wAAJv8AACj/AAAl/wAA
If8AAB3/AAAa/wAAGv8AABr/AAAX/wAAD/8AAAf/AAAB/wAABP8AAAL/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAH/AiJy/wAZa/8AF2f/ABdo/wAGOP8AAAD/AAED/wADGP8AAAD/AAAH/wAI
Kv8AE0n/ABxT/wAeUP8AHk//ACBN/wAiTf8AI1H/ABYz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAv8AAAn/AAAN/wAADP8AABH/AAAf/wAANv8AADn/AAAg/wAAE/8AABf/AAAc/wAA
HP8AAB7/AAAf/wAAHv8AABz/AAAa/wAAHf8AAB7/AAAf/wAAIv8AAB7/AAAV/wAAC/8AAAb/AAAB/wAA
Af8AAAX/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIcbv8AFmn/ABFf/wATYv8DD0n/ChIe/wAB
AP8AEEH/AAtD/wAVUf8AGlz/ABpX/wAcUv8AH1T/AB9W/wAiV/8AI1X/ACFV/wALIP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAC/wAAEf8AACn/AAAu/wAA
Gf8AAA//AAAW/wAAIP8AAB//AAAa/wAAGv8AAB3/AAAb/wAAHf8AACr/AAAs/wAALP8AAC//AAAk/wAA
Hv8AABj/AAAN/wAAB/8AAAT/AAAE/wAAAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8CEWf/AAlf/wAI
WP8AC1j/AxVc/wgZXP8AACL/AAYl/wAVXv8AG13/ABdY/wAVVP8AF1H/ABtT/wAdVP8AHlT/ABxQ/wAX
Sf8AAgv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAv/AAAf/wAAI/8AAA//AAAG/wAAD/8AABn/AAAh/wAAGf8AABH/AAAQ/wAAEf8AAB7/AAAt/wAA
Lv8AADH/AAAn/wAAG/8AABT/AAAQ/wAAC/8AAAz/AAAJ/wAAB/8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAH/AgRc/wAAU/8AAFD/AABN/wACTf8AAEX/AABC/wADQv8ADlL/ABFS/wAPUP8ADlD/ABFM/wAW
Tv8AF0z/ABZK/wAVSf8ACzH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAF/wAAGP8AABn/AAAD/wAAAP8AAAX/AAAN/wAAGP8AAA3/AAAD/wAA
AP8AAAr/AAAb/wAAFP8AABf/AAAk/wAAGP8AAAz/AAAJ/wAAB/8AAAb/AAAL/wAACP8AAAb/AAAD/wAA
Af8AAAD/AAAA/wAAAP8AAAD/AAAB/wAAQ/8AADv/AAAy/wAALv8AACr/AAAl/wAAKv8AADj/AABA/wAA
QP8AAEH/AABA/wAEQP8ABD//AAM7/wACOv8AAjX/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAb/AAAG/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8AAAD/AAAA/wAACf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8fIUnlHR9D5R0fPOUdHznlHR855R0f
PuUdH0blHR9M5R0fVOUdH1XlHR9S5R0fUuUeIVXlHiJU5R4gTuUeH0zlHR495RoaHOUaGhvlGhob5Roa
G+UaGhvlGhob5RoaG+UaGhvlGhob5RoaG+UaGhvlGhsc5RobHOUaGxzlGhsc5RobHOUaGxzlGhse5Rob
IeUaGxzlGhsb5RobHOUaGxvlGhsb5RobG+UaGxzlGhsc5RobG+UaGxvlGhob5R0hJuUbHB7lGhsb5Rob
HOUaGxzlGhsc5RobHOUaGx3lGhsc5RobHeUaGxzlGhsc5RobHOUaGxzlGhob5RoaG+UaGhvl9fb3DPX2
9wz19vcM9fb3DPX29wz19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vcM9fb3DPX1
9Qzz8/MM8/PzDPPz8wzz8/MM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz
9Azz8/QM8/P0DPP09Azz9PQM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/T0DPPz
9Az19/gM8/T1DPPz9Azz8/QM8/P0DPPz9Azz9PQM8/T0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz
9Azz8/QM8/PzDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////8=
</value>
</data>
</root>

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace SCJMapper_V2
{
/// <summary>
/// Provide the colors used
/// </summary>
class MyColors
{
static public Color[] JColor = { Color.LightGreen, Color.LightBlue, Color.Khaki, Color.LightSalmon, Color.Beige, Color.Yellow, Color.Plum, Color.Lavender };
static public Color DirtyColor = Color.Tomato;
}
}

@ -0,0 +1,481 @@
namespace SCJMapper_V2
{
partial class UC_JoyPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose( bool disposing )
{
if ( disposing && ( components != null ) ) {
components.Dispose( );
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent( )
{
this.gBox = new System.Windows.Forms.GroupBox();
this.lbl1Buttons = new System.Windows.Forms.Label();
this.lB = new System.Windows.Forms.Label();
this.lbl1Hat3 = new System.Windows.Forms.Label();
this.lbl1S1 = new System.Windows.Forms.Label();
this.lbl1S0 = new System.Windows.Forms.Label();
this.lbl1Hat2 = new System.Windows.Forms.Label();
this.lbl1Hat1 = new System.Windows.Forms.Label();
this.lbl1Hat0 = new System.Windows.Forms.Label();
this.lbl1Zr = new System.Windows.Forms.Label();
this.lbl1Yr = new System.Windows.Forms.Label();
this.lbl1Xr = new System.Windows.Forms.Label();
this.lbl1Z = new System.Windows.Forms.Label();
this.lbl1Y = new System.Windows.Forms.Label();
this.lbl1X = new System.Windows.Forms.Label();
this.lH3 = new System.Windows.Forms.Label();
this.lH2 = new System.Windows.Forms.Label();
this.lH1 = new System.Windows.Forms.Label();
this.lH0 = new System.Windows.Forms.Label();
this.lS1 = new System.Windows.Forms.Label();
this.lS0 = new System.Windows.Forms.Label();
this.lZr = new System.Windows.Forms.Label();
this.lYr = new System.Windows.Forms.Label();
this.lXr = new System.Windows.Forms.Label();
this.lZ = new System.Windows.Forms.Label();
this.lY = new System.Windows.Forms.Label();
this.lX = new System.Windows.Forms.Label();
this.gBoxCap = new System.Windows.Forms.GroupBox();
this.lblnButtons = new System.Windows.Forms.Label();
this.lblnPOVs = new System.Windows.Forms.Label();
this.lblnAxis = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.gBox.SuspendLayout();
this.gBoxCap.SuspendLayout();
this.SuspendLayout();
//
// gBox
//
this.gBox.Controls.Add(this.lbl1Buttons);
this.gBox.Controls.Add(this.lB);
this.gBox.Controls.Add(this.lbl1Hat3);
this.gBox.Controls.Add(this.lbl1S1);
this.gBox.Controls.Add(this.lbl1S0);
this.gBox.Controls.Add(this.lbl1Hat2);
this.gBox.Controls.Add(this.lbl1Hat1);
this.gBox.Controls.Add(this.lbl1Hat0);
this.gBox.Controls.Add(this.lbl1Zr);
this.gBox.Controls.Add(this.lbl1Yr);
this.gBox.Controls.Add(this.lbl1Xr);
this.gBox.Controls.Add(this.lbl1Z);
this.gBox.Controls.Add(this.lbl1Y);
this.gBox.Controls.Add(this.lbl1X);
this.gBox.Controls.Add(this.lH3);
this.gBox.Controls.Add(this.lH2);
this.gBox.Controls.Add(this.lH1);
this.gBox.Controls.Add(this.lH0);
this.gBox.Controls.Add(this.lS1);
this.gBox.Controls.Add(this.lS0);
this.gBox.Controls.Add(this.lZr);
this.gBox.Controls.Add(this.lYr);
this.gBox.Controls.Add(this.lXr);
this.gBox.Controls.Add(this.lZ);
this.gBox.Controls.Add(this.lY);
this.gBox.Controls.Add(this.lX);
this.gBox.Location = new System.Drawing.Point(3, 69);
this.gBox.Name = "gBox";
this.gBox.Size = new System.Drawing.Size(232, 161);
this.gBox.TabIndex = 3;
this.gBox.TabStop = false;
this.gBox.Text = "Joystick State";
//
// lbl1Buttons
//
this.lbl1Buttons.Location = new System.Drawing.Point(65, 141);
this.lbl1Buttons.Name = "lbl1Buttons";
this.lbl1Buttons.Size = new System.Drawing.Size(154, 13);
this.lbl1Buttons.TabIndex = 25;
//
// lB
//
this.lB.AutoSize = true;
this.lB.Location = new System.Drawing.Point(9, 141);
this.lB.Name = "lB";
this.lB.Size = new System.Drawing.Size(46, 13);
this.lB.TabIndex = 24;
this.lB.Text = "Buttons:";
//
// lbl1Hat3
//
this.lbl1Hat3.AutoSize = true;
this.lbl1Hat3.Enabled = false;
this.lbl1Hat3.Location = new System.Drawing.Point(185, 112);
this.lbl1Hat3.Name = "lbl1Hat3";
this.lbl1Hat3.Size = new System.Drawing.Size(13, 13);
this.lbl1Hat3.TabIndex = 23;
this.lbl1Hat3.Text = "0";
//
// lbl1S1
//
this.lbl1S1.AutoSize = true;
this.lbl1S1.Enabled = false;
this.lbl1S1.Location = new System.Drawing.Point(185, 40);
this.lbl1S1.Name = "lbl1S1";
this.lbl1S1.Size = new System.Drawing.Size(13, 13);
this.lbl1S1.TabIndex = 22;
this.lbl1S1.Text = "0";
//
// lbl1S0
//
this.lbl1S0.AutoSize = true;
this.lbl1S0.Enabled = false;
this.lbl1S0.Location = new System.Drawing.Point(185, 24);
this.lbl1S0.Name = "lbl1S0";
this.lbl1S0.Size = new System.Drawing.Size(13, 13);
this.lbl1S0.TabIndex = 21;
this.lbl1S0.Text = "0";
//
// lbl1Hat2
//
this.lbl1Hat2.AutoSize = true;
this.lbl1Hat2.Enabled = false;
this.lbl1Hat2.Location = new System.Drawing.Point(185, 96);
this.lbl1Hat2.Name = "lbl1Hat2";
this.lbl1Hat2.Size = new System.Drawing.Size(13, 13);
this.lbl1Hat2.TabIndex = 20;
this.lbl1Hat2.Text = "0";
//
// lbl1Hat1
//
this.lbl1Hat1.AutoSize = true;
this.lbl1Hat1.Enabled = false;
this.lbl1Hat1.Location = new System.Drawing.Point(185, 80);
this.lbl1Hat1.Name = "lbl1Hat1";
this.lbl1Hat1.Size = new System.Drawing.Size(13, 13);
this.lbl1Hat1.TabIndex = 19;
this.lbl1Hat1.Text = "0";
//
// lbl1Hat0
//
this.lbl1Hat0.AutoSize = true;
this.lbl1Hat0.Enabled = false;
this.lbl1Hat0.Location = new System.Drawing.Point(185, 64);
this.lbl1Hat0.Name = "lbl1Hat0";
this.lbl1Hat0.Size = new System.Drawing.Size(13, 13);
this.lbl1Hat0.TabIndex = 18;
this.lbl1Hat0.Text = "0";
//
// lbl1Zr
//
this.lbl1Zr.AutoSize = true;
this.lbl1Zr.Enabled = false;
this.lbl1Zr.Location = new System.Drawing.Point(81, 112);
this.lbl1Zr.Name = "lbl1Zr";
this.lbl1Zr.Size = new System.Drawing.Size(13, 13);
this.lbl1Zr.TabIndex = 17;
this.lbl1Zr.Text = "0";
//
// lbl1Yr
//
this.lbl1Yr.AutoSize = true;
this.lbl1Yr.Enabled = false;
this.lbl1Yr.Location = new System.Drawing.Point(81, 96);
this.lbl1Yr.Name = "lbl1Yr";
this.lbl1Yr.Size = new System.Drawing.Size(13, 13);
this.lbl1Yr.TabIndex = 16;
this.lbl1Yr.Text = "0";
//
// lbl1Xr
//
this.lbl1Xr.AutoSize = true;
this.lbl1Xr.Enabled = false;
this.lbl1Xr.Location = new System.Drawing.Point(81, 80);
this.lbl1Xr.Name = "lbl1Xr";
this.lbl1Xr.Size = new System.Drawing.Size(13, 13);
this.lbl1Xr.TabIndex = 15;
this.lbl1Xr.Text = "0";
//
// lbl1Z
//
this.lbl1Z.AutoSize = true;
this.lbl1Z.Enabled = false;
this.lbl1Z.Location = new System.Drawing.Point(81, 56);
this.lbl1Z.Name = "lbl1Z";
this.lbl1Z.Size = new System.Drawing.Size(13, 13);
this.lbl1Z.TabIndex = 14;
this.lbl1Z.Text = "0";
//
// lbl1Y
//
this.lbl1Y.AutoSize = true;
this.lbl1Y.Enabled = false;
this.lbl1Y.Location = new System.Drawing.Point(81, 40);
this.lbl1Y.Name = "lbl1Y";
this.lbl1Y.Size = new System.Drawing.Size(13, 13);
this.lbl1Y.TabIndex = 13;
this.lbl1Y.Text = "0";
//
// lbl1X
//
this.lbl1X.AutoSize = true;
this.lbl1X.Enabled = false;
this.lbl1X.Location = new System.Drawing.Point(81, 24);
this.lbl1X.Name = "lbl1X";
this.lbl1X.Size = new System.Drawing.Size(13, 13);
this.lbl1X.TabIndex = 12;
this.lbl1X.Text = "0";
//
// lH3
//
this.lH3.AutoSize = true;
this.lH3.Enabled = false;
this.lH3.Location = new System.Drawing.Point(124, 112);
this.lH3.Name = "lH3";
this.lH3.Size = new System.Drawing.Size(41, 13);
this.lH3.TabIndex = 11;
this.lH3.Text = "POV 4:";
//
// lH2
//
this.lH2.AutoSize = true;
this.lH2.Enabled = false;
this.lH2.Location = new System.Drawing.Point(124, 96);
this.lH2.Name = "lH2";
this.lH2.Size = new System.Drawing.Size(41, 13);
this.lH2.TabIndex = 10;
this.lH2.Text = "POV 3:";
//
// lH1
//
this.lH1.AutoSize = true;
this.lH1.Enabled = false;
this.lH1.Location = new System.Drawing.Point(124, 80);
this.lH1.Name = "lH1";
this.lH1.Size = new System.Drawing.Size(41, 13);
this.lH1.TabIndex = 9;
this.lH1.Text = "POV 2:";
//
// lH0
//
this.lH0.AutoSize = true;
this.lH0.Enabled = false;
this.lH0.Location = new System.Drawing.Point(124, 64);
this.lH0.Name = "lH0";
this.lH0.Size = new System.Drawing.Size(41, 13);
this.lH0.TabIndex = 8;
this.lH0.Text = "POV 1:";
//
// lS1
//
this.lS1.AutoSize = true;
this.lS1.Enabled = false;
this.lS1.Location = new System.Drawing.Point(124, 40);
this.lS1.Name = "lS1";
this.lS1.Size = new System.Drawing.Size(45, 13);
this.lS1.TabIndex = 7;
this.lS1.Text = "Slider 2:";
//
// lS0
//
this.lS0.AutoSize = true;
this.lS0.Enabled = false;
this.lS0.Location = new System.Drawing.Point(124, 24);
this.lS0.Name = "lS0";
this.lS0.Size = new System.Drawing.Size(45, 13);
this.lS0.TabIndex = 6;
this.lS0.Text = "Slider 1:";
//
// lZr
//
this.lZr.AutoSize = true;
this.lZr.Enabled = false;
this.lZr.Location = new System.Drawing.Point(9, 112);
this.lZr.Name = "lZr";
this.lZr.Size = new System.Drawing.Size(60, 13);
this.lZr.TabIndex = 5;
this.lZr.Text = "Z Rotation:";
//
// lYr
//
this.lYr.AutoSize = true;
this.lYr.Enabled = false;
this.lYr.Location = new System.Drawing.Point(9, 96);
this.lYr.Name = "lYr";
this.lYr.Size = new System.Drawing.Size(60, 13);
this.lYr.TabIndex = 4;
this.lYr.Text = "Y Rotation:";
//
// lXr
//
this.lXr.AutoSize = true;
this.lXr.Enabled = false;
this.lXr.Location = new System.Drawing.Point(9, 80);
this.lXr.Name = "lXr";
this.lXr.Size = new System.Drawing.Size(60, 13);
this.lXr.TabIndex = 3;
this.lXr.Text = "X Rotation:";
//
// lZ
//
this.lZ.AutoSize = true;
this.lZ.Enabled = false;
this.lZ.Location = new System.Drawing.Point(9, 56);
this.lZ.Name = "lZ";
this.lZ.Size = new System.Drawing.Size(39, 13);
this.lZ.TabIndex = 2;
this.lZ.Text = "Z Axis:";
//
// lY
//
this.lY.AutoSize = true;
this.lY.Enabled = false;
this.lY.Location = new System.Drawing.Point(9, 40);
this.lY.Name = "lY";
this.lY.Size = new System.Drawing.Size(39, 13);
this.lY.TabIndex = 1;
this.lY.Text = "Y Axis:";
//
// lX
//
this.lX.AutoSize = true;
this.lX.Enabled = false;
this.lX.Location = new System.Drawing.Point(9, 24);
this.lX.Name = "lX";
this.lX.Size = new System.Drawing.Size(39, 13);
this.lX.TabIndex = 0;
this.lX.Text = "X Axis:";
//
// gBoxCap
//
this.gBoxCap.Controls.Add(this.lblnButtons);
this.gBoxCap.Controls.Add(this.lblnPOVs);
this.gBoxCap.Controls.Add(this.lblnAxis);
this.gBoxCap.Controls.Add(this.label5);
this.gBoxCap.Controls.Add(this.label3);
this.gBoxCap.Controls.Add(this.label2);
this.gBoxCap.Location = new System.Drawing.Point(3, 3);
this.gBoxCap.Name = "gBoxCap";
this.gBoxCap.Size = new System.Drawing.Size(232, 60);
this.gBoxCap.TabIndex = 4;
this.gBoxCap.TabStop = false;
this.gBoxCap.Text = "Device Capabilities";
//
// lblnButtons
//
this.lblnButtons.AutoSize = true;
this.lblnButtons.Location = new System.Drawing.Point(81, 40);
this.lblnButtons.Name = "lblnButtons";
this.lblnButtons.Size = new System.Drawing.Size(13, 13);
this.lblnButtons.TabIndex = 14;
this.lblnButtons.Text = "0";
//
// lblnPOVs
//
this.lblnPOVs.AutoSize = true;
this.lblnPOVs.Location = new System.Drawing.Point(185, 24);
this.lblnPOVs.Name = "lblnPOVs";
this.lblnPOVs.Size = new System.Drawing.Size(13, 13);
this.lblnPOVs.TabIndex = 14;
this.lblnPOVs.Text = "0";
//
// lblnAxis
//
this.lblnAxis.AutoSize = true;
this.lblnAxis.Location = new System.Drawing.Point(81, 24);
this.lblnAxis.Name = "lblnAxis";
this.lblnAxis.Size = new System.Drawing.Size(13, 13);
this.lblnAxis.TabIndex = 14;
this.lblnAxis.Text = "0";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(9, 40);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(56, 13);
this.label5.TabIndex = 13;
this.label5.Text = "# Buttons:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(124, 24);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(42, 13);
this.label3.TabIndex = 13;
this.label3.Text = "# POV:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(9, 24);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(39, 13);
this.label2.TabIndex = 13;
this.label2.Text = "# Axis:";
//
// UC_JoyPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.gBoxCap);
this.Controls.Add(this.gBox);
this.Name = "UC_JoyPanel";
this.Size = new System.Drawing.Size(239, 234);
this.gBox.ResumeLayout(false);
this.gBox.PerformLayout();
this.gBoxCap.ResumeLayout(false);
this.gBoxCap.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox gBox;
private System.Windows.Forms.Label lbl1Buttons;
private System.Windows.Forms.Label lB;
private System.Windows.Forms.Label lbl1Hat3;
private System.Windows.Forms.Label lbl1S1;
private System.Windows.Forms.Label lbl1S0;
private System.Windows.Forms.Label lbl1Hat2;
private System.Windows.Forms.Label lbl1Hat1;
private System.Windows.Forms.Label lbl1Hat0;
private System.Windows.Forms.Label lbl1Zr;
private System.Windows.Forms.Label lbl1Yr;
private System.Windows.Forms.Label lbl1Xr;
private System.Windows.Forms.Label lbl1Z;
private System.Windows.Forms.Label lbl1Y;
private System.Windows.Forms.Label lbl1X;
private System.Windows.Forms.Label lH3;
private System.Windows.Forms.Label lH2;
private System.Windows.Forms.Label lH1;
private System.Windows.Forms.Label lH0;
private System.Windows.Forms.Label lS1;
private System.Windows.Forms.Label lS0;
private System.Windows.Forms.Label lZr;
private System.Windows.Forms.Label lYr;
private System.Windows.Forms.Label lXr;
private System.Windows.Forms.Label lZ;
private System.Windows.Forms.Label lY;
private System.Windows.Forms.Label lX;
private System.Windows.Forms.GroupBox gBoxCap;
private System.Windows.Forms.Label lblnButtons;
private System.Windows.Forms.Label lblnPOVs;
private System.Windows.Forms.Label lblnAxis;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
}
}

@ -0,0 +1,255 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SCJMapper_V2
{
public partial class UC_JoyPanel : UserControl
{
public UC_JoyPanel( )
{
InitializeComponent( );
}
#region Strings
/// <summary>
/// Return s only if length is max 12 (some crazy names may kill the layout...)
/// </summary>
/// <param name="s">String to return if length less than 12</param>
/// <param name="d">String to return if s length more than 12</param>
/// <returns>A string</returns>
private String Chk( String s, String d )
{
if ( s.Length > 12 ) return d; else return s;
}
public String Caption
{
set { gBoxCap.Text = value; }
}
public String X
{
set { lbl1X.Text = value; }
}
public String Xname
{
set { lX.Text = Chk( value, lX.Text ); }
}
public String Y
{
set { lbl1Y.Text = value; }
}
public String Yname
{
set { lY.Text = Chk( value, lY.Text ); }
}
public String Z
{
set { lbl1Z.Text = value; }
}
public String Zname
{
set { lZ.Text = Chk( value, lZ.Text ); }
}
public String Xr
{
set { lbl1Xr.Text = value; }
}
public String Xrname
{
set { lXr.Text = Chk( value, lXr.Text ); }
}
public String Yr
{
set { lbl1Yr.Text = value; }
}
public String Yrname
{
set { lYr.Text = Chk( value, lYr.Text ); }
}
public String Zr
{
set { lbl1Zr.Text = value; }
}
public String Zrname
{
set { lZr.Text = Chk( value, lZr.Text ); }
}
public String S1
{
set { lbl1S0.Text = value; }
}
public String S1name
{
set { lS0.Text = Chk( value, lS0.Text ); }
}
public String S2
{
set { lbl1S1.Text = value; }
}
public String S2name
{
set { lS1.Text = Chk( value, lS1.Text ); }
}
public String H1
{
set { lbl1Hat0.Text = value; }
}
public String H1name
{
set { lH0.Text = Chk( value, lH0.Text ); }
}
public String H2
{
set { lbl1Hat1.Text = value; }
}
public String H2name
{
set { lH1.Text = Chk( value, lH1.Text ); }
}
public String H3
{
set { lbl1Hat2.Text = value; }
}
public String H3name
{
set { lH2.Text = Chk( value, lH2.Text ); }
}
public String H4
{
set { lbl1Hat3.Text = value; }
}
public String H4name
{
set { lH3.Text = Chk( value, lH3.Text ); }
}
public String Button
{
set { lbl1Buttons.Text = value; }
}
public String nButtons
{
set { lblnButtons.Text = value; }
}
public String nAxis
{
set { lblnAxis.Text = value; }
}
public String nPOVs
{
set { lblnPOVs .Text = value; }
}
#endregion
#region Enables
public Boolean Xe
{
set { lbl1X.Enabled = value; lX.Enabled = value; }
}
public Boolean Ye
{
set { lbl1Y.Enabled = value; lY.Enabled = value; }
}
public Boolean Ze
{
set { lbl1Z.Enabled = value; lZ.Enabled = value; }
}
public Boolean Xre
{
set { lbl1Xr.Enabled = value; lXr.Enabled = value; }
}
public Boolean Yre
{
set { lbl1Yr.Enabled = value; lYr.Enabled = value; }
}
public Boolean Zre
{
set { lbl1Zr.Enabled = value; lZr.Enabled = value; }
}
public Boolean S1e
{
set { lbl1S0.Enabled = value; lS0.Enabled = value; }
}
public Boolean S2e
{
set { lbl1S1.Enabled = value; lS1.Enabled = value; }
}
public Boolean H1e
{
set { lbl1Hat0.Enabled = value; lH0.Enabled = value; }
}
public Boolean H2e
{
set { lbl1Hat1.Enabled = value; lH1.Enabled = value; }
}
public Boolean H3e
{
set { lbl1Hat2.Enabled = value; lH2.Enabled = value; }
}
public Boolean H4e
{
set { lbl1Hat3.Enabled = value; lH3.Enabled = value; }
}
public Boolean Buttone
{
set { lbl1Buttons.Enabled = value; lB.Enabled = value; }
}
#endregion
}
}

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,10 @@
spaceship_general;Kv_toggle_cabin_lights;Kv_toggle_running_lights;Kv_power_cycle_preset_fwd;Kv_power_cycle_preset_back;Xv_eject;;;;;;;;;;;;;;;;;;;;;;;
spaceship_view;Jv_view_yaw_left;Jv_view_yaw_right;Jv_view_yaw;Jv_view_yaw_1p;Kv_view_yaw_absolute;Jv_view_pitch_up;Jv_view_pitch_down;Jv_view_pitch;Jv_view_pitch_1p;Kv_view_pitch_absolute;Kv_view_roll_absolute;Jv_view_cycle_fwd;Kv_view_cycle_internal_fwd;Xv_view_option;Xv_view_mode;Jv_view_zoom_in;Jv_view_zoom_out;Kv_view_dynamic_focus_in;Kv_view_dynamic_focus_out;Jv_view_dynamic_focus_toggle;Kv_view_track_target;;;;;;;
spaceship_movement;Jv_pitch;Jv_yaw_left;Jv_yaw_right;Jv_yaw;Kv_roll_left;Kv_roll_right;Jv_roll;Jv_throttle;Kv_throttle_toggle_minmax;Xv_throttle_zero;Xv_throttle_up;Xv_throttle_down;Xv_brake;Jv_target_match_vel;Xv_ifcs_toggle_vector_decoupling;Kv_strafe_up;Kv_strafe_down;Kv_strafe_left;Kv_strafe_right;Xv_strafe_forward;Xv_strafe_back;Xv_strafe_horizontal;Xv_strafe_vertical;Jv_newtonian_yaw;Jv_newtonian_pitch;Xv_newtonian_brake;Xv_ifcs_toggle_safety;Jv_afterburner
spaceship_targeting;Jv_target_cycle_all_fwd;Jv_target_cycle_all_back;Kv_target_cycle_friendly_fwd;Kv_target_cycle_friendly_back;Xv_target_toggle_pinned_focused;Jv_target_missile_lock_focused;Jv_target_cycle_hostile_fwd;Kv_target_cycle_hostile_back;Jv_target_nearest_hostile;Kv_target_nearest_landzone;Kv_target_pin_reticule;Kv_target_cycle_subsystem_fwd;Kv_target_cycle_subsystem_back;;;;;;;;;;;;;;;
spaceship_weapons;Jv_attack1_group1;Jv_attack1_group2;Jv_attack1_group3;Jv_attack1_group4;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_missiles;Jv_weapon_cycle_missile_fwd;Kv_weapon_cycle_missile_back;Xv_weapon_toggle_arm_missile;Jv_weapon_launch_missile;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_defensive;Jv_weapon_launch_countermeasure;Jv_weapon_cycle_countermeasure_fwd;Kv_shield_raise_level_forward;Kv_shield_raise_level_back;Kv_shield_raise_level_left;Kv_shield_raise_level_right;Kv_shield_reset_level;Kv_shield_power_up;Kv_shield_power_down;Jv_shield_boost_recharge;Jv_shield_cycle_presets_fwd;Jv_shield_cycle_presets_back;;;;;;;;;;;;;;;;
spaceship_auto_weapons;Kv_weapon_toggle_ai;;;;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_radar;Kv_radar_cycle_zoom_fwd;Kv_radar_cycle_focus_fwd;Kv_radar_cycle_focus_back;;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_hud;Kv_hud_cycle_mode_fwd;Kv_hud_cycle_mode_back;Kv_comm_open_chat;Kv_comm_show_chat;Kv_comm_open_precanned;;;;;;;;;;;;;;;;;;;;;;;
1 spaceship_general Kv_toggle_cabin_lights Kv_toggle_running_lights Kv_power_cycle_preset_fwd Kv_power_cycle_preset_back Xv_eject
2 spaceship_view Jv_view_yaw_left Jv_view_yaw_right Jv_view_yaw Jv_view_yaw_1p Kv_view_yaw_absolute Jv_view_pitch_up Jv_view_pitch_down Jv_view_pitch Jv_view_pitch_1p Kv_view_pitch_absolute Kv_view_roll_absolute Jv_view_cycle_fwd Kv_view_cycle_internal_fwd Xv_view_option Xv_view_mode Jv_view_zoom_in Jv_view_zoom_out Kv_view_dynamic_focus_in Kv_view_dynamic_focus_out Jv_view_dynamic_focus_toggle Kv_view_track_target
3 spaceship_movement Jv_pitch Jv_yaw_left Jv_yaw_right Jv_yaw Kv_roll_left Kv_roll_right Jv_roll Jv_throttle Kv_throttle_toggle_minmax Xv_throttle_zero Xv_throttle_up Xv_throttle_down Xv_brake Jv_target_match_vel Xv_ifcs_toggle_vector_decoupling Kv_strafe_up Kv_strafe_down Kv_strafe_left Kv_strafe_right Xv_strafe_forward Xv_strafe_back Xv_strafe_horizontal Xv_strafe_vertical Jv_newtonian_yaw Jv_newtonian_pitch Xv_newtonian_brake Xv_ifcs_toggle_safety Jv_afterburner
4 spaceship_targeting Jv_target_cycle_all_fwd Jv_target_cycle_all_back Kv_target_cycle_friendly_fwd Kv_target_cycle_friendly_back Xv_target_toggle_pinned_focused Jv_target_missile_lock_focused Jv_target_cycle_hostile_fwd Kv_target_cycle_hostile_back Jv_target_nearest_hostile Kv_target_nearest_landzone Kv_target_pin_reticule Kv_target_cycle_subsystem_fwd Kv_target_cycle_subsystem_back
5 spaceship_weapons Jv_attack1_group1 Jv_attack1_group2 Jv_attack1_group3 Jv_attack1_group4
6 spaceship_missiles Jv_weapon_cycle_missile_fwd Kv_weapon_cycle_missile_back Xv_weapon_toggle_arm_missile Jv_weapon_launch_missile
7 spaceship_defensive Jv_weapon_launch_countermeasure Jv_weapon_cycle_countermeasure_fwd Kv_shield_raise_level_forward Kv_shield_raise_level_back Kv_shield_raise_level_left Kv_shield_raise_level_right Kv_shield_reset_level Kv_shield_power_up Kv_shield_power_down Jv_shield_boost_recharge Jv_shield_cycle_presets_fwd Jv_shield_cycle_presets_back
8 spaceship_auto_weapons Kv_weapon_toggle_ai
9 spaceship_radar Kv_radar_cycle_zoom_fwd Kv_radar_cycle_focus_fwd Kv_radar_cycle_focus_back
10 spaceship_hud Kv_hud_cycle_mode_fwd Kv_hud_cycle_mode_back Kv_comm_open_chat Kv_comm_show_chat Kv_comm_open_precanned

Binary file not shown.

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace SCJMapper_V2
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main( )
{
Application.EnableVisualStyles( );
Application.SetCompatibleTextRenderingDefault( false );
Application.Run( new MainForm( ) );
}
}
}

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle( "SC Joystick Mapper" )]
[assembly: AssemblyDescription( "SC Joystick mapping tool" )]
[assembly: AssemblyConfiguration( "" )]
[assembly: AssemblyCompany( "Cassini (SC handle)" )]
[assembly: AssemblyProduct( "SCJMapper-V2" )]
[assembly: AssemblyCopyright( "Copyright (c) 2014 M.Burri" )]
[assembly: AssemblyTrademark( "" )]
[assembly: AssemblyCulture( "" )]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible( false )]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid( "D287A6AA-1492-450F-8BF2-5E3523FE9C9B" )]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion( "1.4.0.10" )]
[assembly: AssemblyFileVersion( "1.4.0.10" )]

@ -0,0 +1,83 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SCJMapper_V2.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SCJMapper_V2.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Cassini_Logo2_s {
get {
object obj = ResourceManager.GetObject("Cassini_Logo2_s", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized string similar to spaceship_general;Kv_toggle_cabin_lights;Kv_toggle_running_lights;Kv_power_cycle_preset_fwd;Kv_power_cycle_preset_back;Xv_eject;;;;;;;;;;;;;;;;;;;;;;;
///spaceship_view;Jv_view_yaw_left;Jv_view_yaw_right;Jv_view_yaw;Jv_view_yaw_1p;Kv_view_yaw_absolute;Jv_view_pitch_up;Jv_view_pitch_down;Jv_view_pitch;Jv_view_pitch_1p;Kv_view_pitch_absolute;Kv_view_roll_absolute;Jv_view_cycle_fwd;Kv_view_cycle_internal_fwd;Xv_view_option;Xv_view_mode;Jv_view_zoom_in;Jv_view_zoom_out;Kv_view_dynamic_focus_in;Kv_view_dynamic_foc [rest of string was truncated]&quot;;.
/// </summary>
internal static string MappingVars {
get {
return ResourceManager.GetString("MappingVars", resourceCulture);
}
}
}
}

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Cassini_Logo2_s" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Cassini_Logo2_s.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MappingVars" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\actionList\MappingVars.csv;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root>

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SCJMapper_V2.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

@ -0,0 +1,42 @@
SC Joystick Mapper V 1.4PRE
(c) Cassini - 14-June-2014
Contains 4 files:
SCJMapper.exe The program
SharpDX.DirectInput.dll Managed DirectInput Assembly - MUST be in the same folder as the Exe file
SharpDX.dll Managed DirectX Assembly - MUST be in the same folder as the Exe file
defaultProfile.xml The default map from SC Build 12.2 - MUST be in the same folder as the Exe file
SCJMapper_QGuide V1.4.pdf Quick Guide
ReadMe.txt This file
Read the Guide first RTFM ;-)
Put all files into one folder and hit SCJMapper.exe to run it
Scanned for viruses before packing...
cassini@burri-web.org
Changelog:
V 1.4PRE
- using a new Managed DirectX assembly and built with .Net4 (Hope this works for Win8.1)
- added Joystick properties and Axis Names from the Joystick driver
V 1.3
- new feature - read the original defaultProfile.xml from SC to derive the actions (must be in the EXE folder)
- added support for up to 8 devices
- added multibinding i.e. bind the same action to multiple buttons, one for kbd, one for xbox etc. if the profile supports it
- added Dump List - a readable list of the commands (can be saved as txt file - using Save as)
- fixed "Find 1st"
- Update of the Guide
- removed MappingVars file from distribution (REMOVE IT FROM YOUR FOLDER - else it will be taken as action list)
V 1.2
- added support for rebinding xboxpad and ps3pad
- added Find 1st for a Control
- fixed Hat direction not maintained as last Control used
- some GUI refinements
- Update of the Guide (incl MappingVar.csv format)
MappingVar file
- added commands that where missing
- changed from keyboard to xboxpad rebinding where possible to leave kbd intact
V 1.1
- fixed issue with less than 3 joysticks attached
V 1.0 initial

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,714 @@
<profile version="0">
<platforms>
<PC keyboard="1" xboxpad="1" ps3pad="1" joystick="1" />
<Xbox keyboard="1" xboxpad="1" ps3pad="0" />
<PS3 keyboard="1" xboxpad="0" ps3pad="1" />
</platforms>
<actiongroup action="v_attack1">
<action name="v_attack1_group1" />
<action name="v_attack1_group2" />
<action name="v_attack1_group3" />
</actiongroup>
<actionmap name="debug" version="22">
<!-- debug keys - move to debug when we can switch devmode-->
<action name="flymode" onPress="1" noModifiers="1" keyboard="f3" />
<action name="godmode" onPress="1" noModifiers="1" keyboard="f4" />
<action name="toggleaidebugdraw" onPress="1" noModifiers="1" keyboard="f11" />
<action name="ai_DebugCenterViewAgent" onPress="1" noModifiers="1" keyboard="np_divide" />
<action name="togglepdrawhelpers" onPress="1" noModifiers="1" keyboard="f10" />
<action name="ulammo" onPress="1" noModifiers="1" keyboard="" />
<!--<action name="debug" onPress="1" keyboard="7" />-->
<!--<action name="thirdperson" onPress="1" noModifiers="1" keyboard="f1" xboxpad="xi_dpad_up" ps3pad="pad_up"/>-->
<!-- debug keys - end -->
</actionmap>
<actionmap name="multiplayer" version="24">
<!-- multiplayer specific keys -->
<action name="self_destruct" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.5" keyboard="ralt+backspace" xboxpad="" joystick="" />
<action name="respawn" onPress="1" keyboard="x" xboxpad="xi_x" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="singleplayer" version="22">
<!-- singleplayer specific keys -->
<action name="save" onPress="1" consoleCmd="1" keyboard="f5" />
<action name="loadLastSave" onPress="1" consoleCmd="1" keyboard="f9" />
<action name="load" onPress="1" consoleCmd="1" keyboard="f8" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="default" version="24">
<action name="hmd_toggle" onPress="1" keyboard="np_1" />
<action name="hmd_center" onPress="1" keyboard="np_2" />
<!-- default keys -->
<action name="screenshot" onPress="1" keyboard="f12" />
<action name="skip_cutscene" onPress="1" noModifiers="1" keyboard="space" />
<action name="cancel_cinematic" onPress="1" noModifiers="1" keyboard="space" xboxpad="xi_back"/>
<action name="cam_toggle_cinematic" onPress="1" keyboard="ralt+c" />
<action name="objectives" onPress="1" onRelease="1" noModifiers="0" keyboard="o" />
<!-- UI keys -->
<action name="ui_toggle_pause" onPress="1" xboxpad="xi_start" ps3pad="pad_start"/>
<action name="ui_start_pause" onPress="1" keyboard="escape"/>
<action name="ui_click" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross">
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<action name="ui_back" keyboard="escape" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="ui_up" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="up" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_up" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_up"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_down" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="down" />
<inputdata input="tab" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_down" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_down"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_left" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="left" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_left" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_left"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_right" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="right" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_right" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_right"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_confirm" onPress="1" onRelease="1" xboxpad="xi_y" ps3pad="pad_triangle"/>
<action name="ui_reset" onPress="1" onRelease="1" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="ui_skip_video" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Trap alt+tab to stop actions on alt or tab from firing -->
<action name="windows_tabbing" keyboard="lalt+tab" />
</actionmap>
<actionmap name="player" version="24">
<!-- player keys -->
<action name="use" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_y" ps3pad="pad_triangle" />
<action name="attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1"/>
<action name="zoom" onPress="1" onRelease="1" keyboard="mouse2" />
<action name="xi_zoom" onPress="1" onRelease="1" onHold="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="firemode" onPress="1" keyboard="x" xboxpad="xi_dpad_down" ps3pad="pad_down"/>
<action name="cycle_spectator_mode" onPress="1" keyboard="space" />
<action name="prev_spectator_target" onPress="1" keyboard="left" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="next_spectator_target" onPress="1" keyboard="right" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="revive" onPress="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="moveleft" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="moveright" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="moveforward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" />
<action name="moveback" onPress="1" onRelease="1" retriggerable="1" keyboard="s" />
<action name="jump" onPress="1" onRelease="1" keyboard="space"/>
<action name="crouch" onPress="1" onRelease="1" retriggerable="1" keyboard="c"/>
<action name="prone" onPress="1" onHold="1" keyboard="z" />
<action name="sprint" onPress="1" onRelease="1" retriggerable="1" keyboard="lshift" xboxpad="xi_thumbl" ps3pad="pad_l1" />
<action name="special" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_thumbr" />
<action name="leanleft" onPress="1" onRelease="1" onHold="1" keyboard="q" />
<action name="leanright" onPress="1" onRelease="1" onHold="1" keyboard="e" />
<action name="reload" onPress="1" keyboard="r" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="drop" onPress="1" onRelease="1" keyboard="j"/>
<action name="nextitem" onPress="1" keyboard="mwheel_up" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="previtem" onPress="1" keyboard="mwheel_down" />
<action name="small" onPress="1" keyboard="1" />
<action name="medium" onPress="1" keyboard="2" />
<action name="explosive" onPress="1" keyboard="3" />
<action name="suitmode" onPress="1" keyboard="4" />
<action name="utility" onPress="1" keyboard="5" />
<action name="handgrenade" onPress="1" keyboard="h" />
<action name="grenade" onPress="1" onRelease="1" keyboard="g" />
<action name="rotateyaw" keyboard="maxis_x" />
<action name="rotatepitch" keyboard="maxis_y" />
<action name="zoom_in" onPress="1" keyboard="mwheel_up" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="zoom_out" onPress="1" keyboard="mwheel_down" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="skip_dialogfragment" onRelease="1" noModifiers="1" xboxpad="xi_b" >
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<!-- CIG BEGIN - ernst @ IllFonic : Adding magnetic boot support. -->
<action name="toggle_magnetic_boots" onPress="1" keyboard="b" xboxpad="xi_y" ps3pad="pad_triangle"/>
<!-- CIG END -->
<!-- CONSOLE SPECIFIC CONTROLS START -->
<action name="xi_movey" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="xi_movex" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="xi_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="xi_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="xi_jump" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="xi_crouch" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<!-- CONSOLE SPECIFIC CONTROLS END -->
<action name="thirdperson" onPress="1" noModifiers="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="free_thirdperson_camera" onPress="1" onRelease="1" retriggerable="0" keyboard="g" xboxpad="xi_dpad_left"/>
<!-- HMD -->
<action name="hmd_rotateyaw" keyboard="HMD_Yaw" />
<action name="hmd_rotatepitch" keyboard="HMD_Pitch" />
<action name="hmd_rotateroll" keyboard="HMD_Roll" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="mobiglas" onPress="1" keyboard="p" />
<action name="mobiglas_entity_interaction" onPress="1" keyboard="i" />
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick=""/>
<!-- CIG END David Campbell BHVR -->
<!-- CIG BEGIN dhumphries @ Illfonic: Listen for eject hold to play cinematic camera -->
<action name="v_eject" onHold="1" keyboard="ralt+l"/>
<!-- CIG END -->
</actionmap>
<actionmap name="flycam">
<action name="flycam_movey" onPress="1" onRelease="1" keyboard="w" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="flycam_movey_neg" onPress="1" onRelease="1" keyboard="s"/>
<action name="flycam_movex" onPress="1" onRelease="1" keyboard="d" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="flycam_movex_neg" onPress="1" onRelease="1" keyboard="a"/>
<action name="flycam_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx" />
<action name="flycam_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry" />
<action name="flycam_rotateyaw_mouse" keyboard="maxis_x"/>
<action name="flycam_rotatepitch_mouse" keyboard="maxis_y" />
<action name="flycam_moveup" onPress="1" onRelease="1" keyboard="q" xboxpad="xi_triggerr" ps3pad="pad_r2" />
<action name="flycam_movedown" onPress="1" onRelease="1" keyboard="e" xboxpad="xi_triggerl" ps3pad="pad_l2" />
<action name="flycam_speedup" onPress="1" keyboard="up" xboxpad="xi_dpad_up" ps3pad="pad_up" />
<action name="flycam_speeddown" onPress="1" keyboard="down" xboxpad="xi_dpad_down" ps3pad="pad_down" />
<action name="flycam_turbo" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="flycam_setpoint" onPress="1" keyboard="z" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="flycam_play" onPress="1" keyboard="x" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="flycam_clear" onPress="1" keyboard="c" xboxpad="xi_y" ps3pad="pad_triangle"/>
</actionmap>
<actionmap name="vehicle_general" version="26">
<!-- vehicle keys -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_exit" onPress="1" onRelease="1" onHold="1" xboxpad="xi_y" ps3pad="pad_triangle" keyboard="f"/>
<action name="v_horn" onPress="1" onRelease="1" keyboard="h" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_lights" onPress="1" keyboard="o" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
<!-- This needs to be in vehicle_general to allow the weapons mount to fire in the hangar -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
</actionmap>
<actionmap name="vehicle_driver" version="23">
<action name="v_yaw_left" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_move_forward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="v_move_back" onPress="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="v_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_roll_left" onPress="1" onRelease="1" keyboard="q" />
<action name="v_roll_right" onPress="1" onRelease="1" keyboard="t" />
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="v_yaw" onPress="1" onRelease="1" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
</actionmap>
<actionmap name="vehicle_gunner" version="23">
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_triggerl_btn" ps3pad="pad_l1"/>
</actionmap>
<!-- STAR CITIZEN ACTION MAPS START -->
<actionmap name="spaceship" version="29">
<!-- NOTE These inputs are in ADDITION to the action map "vehicle_general" which is always initialized -->
<!-- Flight Control System Inputs, Keyboard -->
<action name="v_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="w"/>
<action name="v_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="s"/>
<action name="v_roll_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="q"/>
<action name="v_roll_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="e"/>
<action name="v_use_docking" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Head look Inputs, Keyboard -->
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="right"/>
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="left"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="up"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="down"/>
<!-- Flight Control System Inputs, Gamepad/Joystick -->
<action name="v_pitch" xboxpad="xi_thumbly" ps3pad="pad_stickly" joystick="js1_y"/>
<action name="v_pitch_gamepad" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="v_pitch_flightstick" joystick="js1_y"/>
<action name="v_yaw" xboxpad="xi_thumblx" ps3pad="pad_sticklx" joystick="js1_rotz"/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_thumblx" joystick="js1_x"/>
<!--<action name="v_throttle_up" onPress="1" onHold="1" keyboard="equals" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_throttle_down" onPress="1" onHold="1" keyboard="minus" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>-->
<action name="v_throttle" joystick="js1_throttlez"/>
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_brake" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_b" ps3pad="pad_circle" />
<!-- Camera views Inputs -->
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_triggerl_btn" joystick=""/>
<!-- Weapon System Inputs -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_a" ps3pad="pad_cross" joystick="js1_button2" />
<action name="v_weapon_cycle_firemode_fwd" onPress="1" keyboard="f" />
<action name="v_weapon_cycle_ammo_fwd" onPress="1" keyboard="b" />
<action name="v_weapon_toggle_ai" onPress="1" keyboard="l" />
<!-- Missile Inputs -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" keyboard="n" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="m" xboxpad="xi_reserved" joystick=""/>
<action name="v_weapon_launch_missile" onPress="1" keyboard="mouse2" />
<!-- Lights -->
<!--
ju - moved to vehicle_default for buggy usage
<action name="v_lights" onPress="1" keyboard="o" />
-->
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Exit -->
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l"/>
<!-- Input options -->
<options>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata input="xi_thumblx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_thumblx" />
<optiondata input="xi_thumbly" action="v_pitch" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_thumbly" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" />
</option>
</options>
<!-- LEGACY -->
<options>
<option input="xboxpad" sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata action="v_pitch" invert_cvar="cl_invertControllerFlight" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
<option input="joystick" sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata action="v_pitch" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_general" version="2">
<!-- Action map for a spaceship bits and pieces -->
<!-- Lights -->
<action name="v_toggle_cabin_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<action name="v_toggle_running_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<!-- Power managements -->
<action name="v_power_cycle_preset_fwd" onPress="1" keyboard="u" xboxpad="" joystick="" />
<action name="v_power_cycle_preset_back" onPress="1" keyboard="i" xboxpad="" joystick="" />
<!-- Exit -->
<action name="v_exit" onPress="1" onRelease="1" onHold="1" keyboard="f" xboxpad="xi_a" joystick="" />
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l" xboxpad="xi_triggerl_btn+xi_back" joystick="jsx_reserved" />
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="v_matchmaking_ui" onPress="1" keyboard="f12" />
<!-- CIG END David Campbell BHVR -->
</actionmap>
<actionmap name="spaceship_view" version="15">
<!-- Camera view -->
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_left"/>
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_right"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_aim_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_yaw_toggled_mouse" keyboard="maxis_x"/>
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_down"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_up"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_aim_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_pitch_toggled_mouse" keyboard="maxis_y"/>
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch"/>
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" joystick="js1_button6"/>
<action name="v_view_cycle_internal_fwd" onPress="1" keyboard="home" xboxpad="" joystick=""/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_triggerl_btn" joystick="jsx_reserved"/>
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_thumbr" joystick="jsx_reserved"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_up" joystick="js1_hat1_up" />
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_down" joystick="js1_hat1_down" />
<action name="v_view_interact" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_a" joystick=""/>
<action name="v_view_toggle_mouse" onRelease="1" keyboard="tab" releaseTriggerThreshold="0.25"/>
<action name="v_view_dynamic_focus_in" onPress="1" keyboard="mwheel_up"/>
<action name="v_view_dynamic_focus_out" onPress="1" keyboard="mwheel_down"/>
<action name="v_view_dynamic_focus_toggle" onPress="1" xboxpad="xi_thumbr" joystick="js1_button11"/>
<action name="v_view_track_target" onPress="1" onRelease="1" keyboard="lctrl+tab" xboxpad="" joystick=""/>
<!-- Input options -->
<options>
<!--<option sensitivity="0.0015" sensitivity_cvar="cl_sensitivity">
<optiondata input="maxis_y" invert_cvar="cl_invertMouse" />
<optiondata input="maxis_x" />
</option>-->
<option sensitivity_cvar="v_gamepadAimSensitivity" nonlinearity_cvar="v_gamepadAimNonLinearity">
<optiondata input="xi_thumbrx" action="v_view_aim_yaw" />
<optiondata input="xi_thumbry" action="v_view_aim_pitch" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_movement" version="10">
<!-- Action map for a spaceship piloting -->
<!-- IFCS (requires avionics) -->
<action name="v_pitch_up" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch_down" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch" xboxpad="xi_taxisly" joystick="js1_y"/>
<action name="v_pitch_mouse" keyboard="maxis_y"/>
<action name="v_yaw_left" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw_right" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw" xboxpad="xi_taxislx" joystick="js1_rotz"/>
<action name="v_yaw_mouse" keyboard="maxis_x"/>
<action name="v_toggle_relative_mouse_mode" onPress="1" onRelease="1" keyboard="lctrl+f" xboxpad="" joystick=""/>
<action name="v_roll_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick=""/>
<action name="v_roll_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick=""/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="js1_x"/>
<action name="v_throttle_toggle_minmax" onPress="1" keyboard="backspace" xboxpad="" joystick="" />
<action name="v_throttle_zero" onPress="1" keyboard="" joystick="" >
<xboxpad multiTap="2" input="xi_shoulderl" />
</action>
<action name="v_throttle_100" onPress="1" keyboard="" xboxpad="" joystick="jsx_reserved" />
<action name="v_throttle_up" onPress="1" onHold="1" onRelease="1" keyboard="w" xboxpad="xi_shoulderr" joystick="" />
<action name="v_throttle_down" onPress="1" onHold="1" onRelease="1" keyboard ="s" xboxpad="xi_shoulderl" joystick=""/>
<action name="v_throttle" keyboard="" xboxpad="" joystick="js1_throttlez" />
<action name="v_brake" onPress="1" onHold="1" onRelease="1" keyboard="space" xboxpad="xi_shoulderl+xi_shoulderr" joystick="jsx_reserved" />
<action name="v_target_match_vel" onPress="1" onRelease="1" keyboard="m" joystick="js1_button8" >
<xboxpad multiTap="2" input="xi_shoulderr" />
</action>
<!-- Advanced IFCS on (requires IFCS) -->
<action name="v_ifcs_toggle_vector_decoupling" onPress="1" onRelease="1" keyboard="capslock" xboxpad="xi_thumbl" joystick="jsx_reserved" />
<action name="v_strafe_up" onHold="1" onRelease="1" retriggerable="1" keyboard="e" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_down" onHold="1" onRelease="1" retriggerable="1" keyboard="q" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_vertical" xboxpad="xi_triggerl_btn+xi_taxisly" joystick="jsx_reserved" />
<action name="v_strafe_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_lateral" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="jsx_reserved" />
<action name="v_strafe_forward" onHold="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_shoulderr" joystick="jsx_reserved" />
<action name="v_strafe_back" onHold="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_shoulderl" joystick="jsx_reserved" />
<action name="v_strafe_longitudinal" joystick="jsx_reserved" />
<action name="v_newtonian_yaw" xboxpad="xi_taxislx" joystick="js1_x" />
<action name="v_newtonian_pitch" xboxpad="xi_taxisly" joystick="js1_y" />
<action name="v_newtonian_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_triggerl_btn+xi_shoulderl" joystick="jsx_reserved" />
<action name="v_ifcs_toggle_safety" onPress="1" onRelease="1" keyboard="lctrl+capslock" xboxpad="xi_triggerl_btn+xi_thumbl" joystick="jsx_reserved" />
<!-- Afterburner installed (requires IFCS) -->
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_b" joystick="js1_button7" />
<!-- Input options -->
<options>
<option invert_cvar="v_mouseInvert">
<optiondata input="maxis_y" />
</option>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<nonlinearity_curve>
<point in="0.5" out="0.15"/>
<point in="0.85" out="0.5"/>
</nonlinearity_curve>
<optiondata input="xi_taxislx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxislx" />
<optiondata input="xi_taxisly" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_taxisrx" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxisry" invert_cvar="v_gamepadInvert" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_targeting" version="4">
<!-- Action map for a spaceship targeting controls -->
<!-- Targeting computer controls (requires avionics) -->
<action name="v_target_toggle_computer_onoff" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_target_cycle_all_fwd" onPress="1" onRelease="1" keyboard="y" xboxpad="xi_dpad_up" joystick="js1_hat1_up"/>
<action name="v_target_cycle_all_back" onPress="1" onRelease="1" keyboard="lctrl+y" xboxpad="xi_dpad_down" joystick="js1_hat1_down"/>
<action name="v_target_cycle_friendly_fwd" onPress="1" onRelease="1" keyboard="h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_friendly_back" onPress="1" onRelease="1" keyboard="lctrl+h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_toggle_pinned_focused" onPress="1" onRelease="1" keyboard="g" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_target_missile_lock_focused" onPress="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
<!--Additional targeting computer controls (requires flight avionics) -->
<action name="v_target_cycle_hostile_fwd" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_dpad_right" joystick="js1_hat1_right"/>
<action name="v_target_cycle_hostile_back" onPress="1" onRelease="1" keyboard="lctrl+t" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_nearest_hostile" onPress="1" onRelease="1" keyboard="r" xboxpad="xi_dpad_left" joystick="js1_hat1_left"/>
<action name="v_target_nearest_landzone" onPress="1" onRelease="1" keyboard="n" xboxpad="" joystick=""/>
<action name="v_target_pin_reticule" onPress="1" onRelease="1" keyboard="lctrl+g" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_subsystem_fwd" onPress="1" onRelease="1" keyboard="b" xboxpad="" joystick=""/>
<action name="v_target_cycle_subsystem_back" onPress="1" onRelease="1" keyboard="lctrl+b" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_weapons" version="2">
<!-- Action map for a spaceship standard weapons controls -->
<!-- Weapons control (requires flight avionics) -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_x" joystick="js1_button2" />
<action name="v_attack1_group3" onPress="1" onRelease="1" onHold="1" keyboard="mouse4" xboxpad="xi_triggerl_btn+xi_x" joystick="js1_button3" />
<action name="v_attack1_group4" onPress="1" onRelease="1" onHold="1" keyboard="mouse5" xboxpad="xi_back+xi_x" joystick="js1_button4"/>
<action name="v_weapon_cycle_ammo_fwd" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_weapon_cycle_ammo_back" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_missiles" version="1">
<!-- Action map for a spaceship missiles -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" onRelease="1" keyboard="mwheel_up" xboxpad="" joystick="js1_button6" />
<action name="v_weapon_cycle_missile_back" onPress="1" onRelease="1" keyboard="mwheel_down" xboxpad="" joystick="" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="" xboxpad="xi_reserved" joystick="" />
<action name="v_weapon_launch_missile" onPress="1" onHold="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
</actionmap>
<actionmap name="spaceship_defensive" version="2">
<!-- Action map for a spaceship countermeasures and shields -->
<!-- Countermeasures installed (requires weapons control on) -->
<action name="v_weapon_launch_countermeasure" onPress="1" keyboard="z" xboxpad="xi_triggerl_btn+xi_y" joystick="js1_button5" />
<action name="v_weapon_cycle_countermeasure_fwd" onPress="1" keyboard="x" xboxpad="xi_reserved" joystick="js1_button8" />
<action name="v_weapon_cycle_countermeasure_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Shields control (requires flight avionics) -->
<action name="v_shield_toggle_generator_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_shield_power_up" onPress="1" keyboard="equal" xboxpad="" joystick=""/>
<action name="v_shield_power_down" onPress="1" keyboard="minus" xboxpad="" joystick=""/>
<action name="v_shield_power" keyboard="" xboxpad="" joystick=""/>
<!-- Shield management system installed -->
<action name="v_shield_boost_recharge" onPress="1" onRelease="1" keyboard="c" xboxpad="" joystick="js1_button12" />
<action name="v_shield_cycle_presets_fwd" onPress="1" keyboard="v" xboxpad="" joystick="js1_button9" />
<action name="v_shield_cycle_presets_back" onPress="1" keyboard="lctrl+v" xboxpad="" joystick="js1_button10" />
</actionmap>
<actionmap name="spaceship_auto_weapons" version="1">
<!-- Action map for a spaceship AI weapon controls -->
<!-- Automation support installed (requires weapons control on) -->
<action name="v_weapon_toggle_ai" onPress="1" keyboard="slash" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_radar" version="2">
<!-- Action map for a spaceship radar controls -->
<!-- Radar control (requires avionic) -->
<action name="v_radar_toggle_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_toggle_active_or_passive" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_fwd" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_zoom_fwd" onPress="1" keyboard="comma" xboxpad="" joystick="jsx_reserved" />
<action name="v_radar_cycle_zoom_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_fwd" onPress="1" keyboard="j" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_back" onPress="1" keyboard="k" xboxpad="" joystick=""/>
<action name="v_radar_toggle_view_focus" onPress="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_hud" version="1">
<!-- Action map for a spaceship HUD controls-->
<!-- HUD controls (general) -->
<action name="v_hud_cycle_mode_fwd" onPress="1" onRelease="1" keyboard="semicolon" xboxpad="" joystick=""/>
<action name="v_hud_cycle_mode_back" onPress="1" onRelease="1" keyboard="apostrophe" xboxpad="" joystick=""/>
<action name="v_hud_toggle_cursor_input" onHold="1" onRelease="1" holdTriggerDelay="0.25" holdRepeatDelay="-1" retriggerable="0" keyboard="tab" xboxpad="xi_start" joystick=""/>
<!-- HUD controls (quick keys) -->
<action name="v_hud_open_tab1" onPress="1" onRelease="1" keyboard="f1" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab2" onPress="1" onRelease="1" keyboard="f2" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab3" onPress="1" onRelease="1" keyboard="f3" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab4" onPress="1" onRelease="1" keyboard="f4" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab5" onPress="1" onRelease="1" keyboard="f5" xboxpad="" joystick=""/>
<action name="v_hud_open_tab6" onPress="1" onRelease="1" keyboard="f6" xboxpad="" joystick=""/>
<action name="v_hud_open_tab7" onPress="1" onRelease="1" keyboard="f7" xboxpad="" joystick=""/>
<action name="v_hud_open_tab8" onPress="1" onRelease="1" keyboard="f8" xboxpad="" joystick=""/>
<action name="v_hud_open_tab9" onPress="1" onRelease="1" keyboard="f9" xboxpad="" joystick=""/>
<action name="v_hud_open_tab10" onPress="1" onRelease="1" keyboard="f10" xboxpad="" joystick=""/>
<action name="v_hud_num_zero" onPress="1" onRelease="1" keyboard="np_0" xboxpad="" joystick=""/>
<action name="v_hud_num_del" onPress="1" onRelease="1" keyboard="np_period" xboxpad="" joystick=""/>
<action name="v_hud_num_1" onPress="1" onRelease="1" keyboard="np_1" xboxpad="" joystick=""/>
<action name="v_hud_num_2" onPress="1" onRelease="1" keyboard="np_2" xboxpad="" joystick=""/>
<action name="v_hud_num_3" onPress="1" onRelease="1" keyboard="np_3" xboxpad="" joystick=""/>
<action name="v_hud_num_4" onPress="1" onRelease="1" keyboard="np_4" xboxpad="" joystick=""/>
<action name="v_hud_num_5" onPress="1" onRelease="1" keyboard="np_5" xboxpad="" joystick=""/>
<action name="v_hud_num_6" onPress="1" onRelease="1" keyboard="np_6" xboxpad="" joystick=""/>
<action name="v_hud_num_7" onPress="1" onRelease="1" keyboard="np_7" xboxpad="" joystick=""/>
<action name="v_hud_num_8" onPress="1" onRelease="1" keyboard="np_8" xboxpad="" joystick=""/>
<action name="v_hud_num_9" onPress="1" onRelease="1" keyboard="np_9" xboxpad="" joystick=""/>
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_hud_toggle_maximised" onPress="1" onRelease="1" keyboard="f11" xboxpad="" joystick=""/>
<!-- HUD controls (interaction) -->
<action name="v_hud_confirm" onPress="1" onRelease="1" xboxpad="xi_triggerL_btn+xi_a" joystick="">
<keyboard>
<inputdata input="enter"/>
</keyboard>
</action>
<action name="v_hud_interact" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn" joystick=""/>
<action name="v_hud_cancel" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn+xi_b" joystick=""/>
<action name="v_hud_left_panel_up" onPress="1" onRelease="1" keyboard="up" xboxpad="xi_triggerl_btn+xi_dpad_up" joystick=""/>
<action name="v_hud_left_panel_down" onPress="1" onRelease="1" keyboard="down" xboxpad="xi_triggerl_btn+xi_dpad_down" joystick=""/>
<action name="v_hud_left_panel_left" onPress="1" onRelease="1" keyboard="left" xboxpad="xi_triggerl_btn+xi_dpad_left" joystick=""/>
<action name="v_hud_left_panel_right" onPress="1" onRelease="1" keyboard="right" xboxpad="xi_triggerl_btn+xi_dpad_right" joystick=""/>
<action name="v_hud_slash" onPress="1" onRelease="1" keyboard="np_divide" xboxpad="p" joystick=""/>
<action name="v_hud_star" onPress="1" onRelease="1" keyboard="np_multiply" xboxpad="" joystick=""/>
<action name="v_hud_minus" onPress="1" onRelease="1" keyboard="np_subtract" xboxpad="" joystick=""/>
<action name="v_hud_plus" onPress="1" onRelease="1" keyboard="np_add" xboxpad="" joystick=""/>
<!-- Comm system controls -->
<action name="v_comm_open_chat" onPress="1" onRelease="1" keyboard="backslash" xboxpad="" joystick=""/>
<action name="v_comm_show_chat" onPress="1" onRelease="1" keyboard="equals" xboxpad="" joystick=""/>
<action name="v_comm_open_precanned" onPress="1" onRelease="1" keyboard="lctrl+backslash" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_1" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_2" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_3" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_4" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_5" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="zero_gravity_general" version="1">
<!-- general zero-gravity keys, applies to thruster and non-thruster movement -->
<action name="z_override_joystick" onPress="1" onRelease="1" retriggerable="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="z_roll" xboxpad="xi_triggerl_btn+xi_thumblx" ps3pad="pad_l2+pad_sticklx" joystick="js1_x"/>
</actionmap>
<actionmap name="gforce_tuning_mode" version="2">
<action name="v_gforce_save" onPress="1" xboxpad="xi_start"/>
<action name="v_gforce_lock" onPress="1" onRelease="1" xboxpad="xi_thumbr"/>
<action name="v_gforce_movey" xboxpad="xi_thumbly"/>
<action name="v_gforce_movex" xboxpad="xi_thumblx"/>
<action name="v_gforce_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_a"/>
<action name="v_gforce_mag_down" onPress="1" onHold="1" xboxpad="xi_shoulderl"/>
<action name="v_gforce_mag_up" onPress="1" onHold="1" xboxpad="xi_shoulderr"/>
<action name="v_gforce_body_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_b"/>
<action name="v_gforce_head_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_x"/>
<action name="v_gforce_toggle_menu" onPress="1" onRelease="1" onHold="" xboxpad="xi_y"/>
<action name="v_gforce_menu_down" onPress="1" xboxpad="xi_dpad_down"/>
<action name="v_gforce_menu_up" onPress="1" xboxpad="xi_dpad_up"/>
<action name="v_gforce_param_inc" onPress="1" onHold ="1" xboxpad="xi_dpad_left"/>
<action name="v_gforce_param_dec" onPress="1" onHold ="1" xboxpad="xi_dpad_right"/>
</actionmap>
<actionmap name="IFCS_controls" version="2">
<action name="v_IFCS_A" onPress="1" onRelease="1" onHold="" xboxpad="xi_a" keyboard="rctrl+a"/>
<action name="v_IFCS_B" onPress="1" onRelease="1" onHold="" xboxpad="xi_b" keyboard="rctrl+b"/>
<action name="v_IFCS_X" onPress="1" onRelease="1" onHold="" xboxpad="xi_x" keyboard="rctrl+x"/>
<action name="v_IFCS_Y" onPress="1" onRelease="1" onHold="" xboxpad="xi_y" keyboard="rctrl+y"/>
</actionmap>
<actionmap name="vehicle_gforce_tuning" version="2">
<!-- vehicle keys for gforce tuning mode -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
</actionmap>
</profile>

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B5F8B339-E02E-4F6D-BF62-D776F165910F}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SCJMapper_V2</RootNamespace>
<AssemblyName>SCJMapper</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Cassini_Logo_Icon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<StartupObject>SCJMapper_V2.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="SharpDX">
<HintPath>E:\D\SharpDX\Bin\DirectX11-net40\SharpDX.dll</HintPath>
</Reference>
<Reference Include="SharpDX.DirectInput">
<HintPath>E:\D\SharpDX\Bin\DirectX11-net40\SharpDX.DirectInput.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Joystick\ActionCls.cs" />
<Compile Include="Joystick\ActionMapCls.cs" />
<Compile Include="Joystick\ActionMapsCls.cs" />
<Compile Include="Joystick\ActionTree.cs" />
<Compile Include="Joystick\DProfileReader.cs" />
<Compile Include="Joystick\JoystickCls.cs" />
<Compile Include="Joystick\MyColors.cs" />
<Compile Include="Joystick\UC_JoyPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Joystick\UC_JoyPanel.Designer.cs">
<DependentUpon>UC_JoyPanel.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Joystick\UC_JoyPanel.resx">
<DependentUpon>UC_JoyPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="actionList\MappingVars.csv" />
<None Include="actionList\MappingVars.xlsx" />
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="defaultProfile.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Cassini_Logo_Icon.ico" />
<Content Include="graphics\Cassini_Logo2_s.jpg" />
<Content Include="graphics\Cassini_Logo_Icon.ico" />
<Content Include="graphics\invalid.png" />
<Content Include="graphics\Joystick.ico" />
<Content Include="graphics\keyboard_key.ico" />
<Content Include="graphics\map.png" />
<Content Include="graphics\PS3.ico" />
<Content Include="graphics\selected.png" />
<Content Include="graphics\XBOX.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SCJMapper-V2", "SCJMapper-V2.csproj", "{B5F8B339-E02E-4F6D-BF62-D776F165910F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B5F8B339-E02E-4F6D-BF62-D776F165910F}.Debug|x86.ActiveCfg = Debug|x86
{B5F8B339-E02E-4F6D-BF62-D776F165910F}.Debug|x86.Build.0 = Debug|x86
{B5F8B339-E02E-4F6D-BF62-D776F165910F}.Release|x86.ActiveCfg = Release|x86
{B5F8B339-E02E-4F6D-BF62-D776F165910F}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

@ -0,0 +1,10 @@
spaceship_general;Kv_toggle_cabin_lights;Kv_toggle_running_lights;Kv_power_cycle_preset_fwd;Kv_power_cycle_preset_back;Xv_eject;;;;;;;;;;;;;;;;;;;;;;;
spaceship_view;Jv_view_yaw_left;Jv_view_yaw_right;Jv_view_yaw;Jv_view_yaw_1p;Kv_view_yaw_absolute;Jv_view_pitch_up;Jv_view_pitch_down;Jv_view_pitch;Jv_view_pitch_1p;Kv_view_pitch_absolute;Kv_view_roll_absolute;Jv_view_cycle_fwd;Kv_view_cycle_internal_fwd;Xv_view_option;Xv_view_mode;Jv_view_zoom_in;Jv_view_zoom_out;Kv_view_dynamic_focus_in;Kv_view_dynamic_focus_out;Jv_view_dynamic_focus_toggle;Kv_view_track_target;;;;;;;
spaceship_movement;Jv_pitch;Jv_yaw_left;Jv_yaw_right;Jv_yaw;Kv_roll_left;Kv_roll_right;Jv_roll;Jv_throttle;Kv_throttle_toggle_minmax;Xv_throttle_zero;Xv_throttle_up;Xv_throttle_down;Xv_brake;Jv_target_match_vel;Xv_ifcs_toggle_vector_decoupling;Kv_strafe_up;Kv_strafe_down;Kv_strafe_left;Kv_strafe_right;Xv_strafe_forward;Xv_strafe_back;Xv_strafe_horizontal;Xv_strafe_vertical;Jv_newtonian_yaw;Jv_newtonian_pitch;Xv_newtonian_brake;Xv_ifcs_toggle_safety;Jv_afterburner
spaceship_targeting;Jv_target_cycle_all_fwd;Jv_target_cycle_all_back;Kv_target_cycle_friendly_fwd;Kv_target_cycle_friendly_back;Xv_target_toggle_pinned_focused;Jv_target_missile_lock_focused;Jv_target_cycle_hostile_fwd;Kv_target_cycle_hostile_back;Jv_target_nearest_hostile;Kv_target_nearest_landzone;Kv_target_pin_reticule;Kv_target_cycle_subsystem_fwd;Kv_target_cycle_subsystem_back;;;;;;;;;;;;;;;
spaceship_weapons;Jv_attack1_group1;Jv_attack1_group2;Jv_attack1_group3;Jv_attack1_group4;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_missiles;Jv_weapon_cycle_missile_fwd;Kv_weapon_cycle_missile_back;Xv_weapon_toggle_arm_missile;Jv_weapon_launch_missile;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_defensive;Jv_weapon_launch_countermeasure;Jv_weapon_cycle_countermeasure_fwd;Kv_shield_raise_level_forward;Kv_shield_raise_level_back;Kv_shield_raise_level_left;Kv_shield_raise_level_right;Kv_shield_reset_level;Kv_shield_power_up;Kv_shield_power_down;Jv_shield_boost_recharge;Jv_shield_cycle_presets_fwd;Jv_shield_cycle_presets_back;;;;;;;;;;;;;;;;
spaceship_auto_weapons;Kv_weapon_toggle_ai;;;;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_radar;Kv_radar_cycle_zoom_fwd;Kv_radar_cycle_focus_fwd;Kv_radar_cycle_focus_back;;;;;;;;;;;;;;;;;;;;;;;;;
spaceship_hud;Kv_hud_cycle_mode_fwd;Kv_hud_cycle_mode_back;Kv_comm_open_chat;Kv_comm_show_chat;Kv_comm_open_precanned;;;;;;;;;;;;;;;;;;;;;;;
1 spaceship_general Kv_toggle_cabin_lights Kv_toggle_running_lights Kv_power_cycle_preset_fwd Kv_power_cycle_preset_back Xv_eject
2 spaceship_view Jv_view_yaw_left Jv_view_yaw_right Jv_view_yaw Jv_view_yaw_1p Kv_view_yaw_absolute Jv_view_pitch_up Jv_view_pitch_down Jv_view_pitch Jv_view_pitch_1p Kv_view_pitch_absolute Kv_view_roll_absolute Jv_view_cycle_fwd Kv_view_cycle_internal_fwd Xv_view_option Xv_view_mode Jv_view_zoom_in Jv_view_zoom_out Kv_view_dynamic_focus_in Kv_view_dynamic_focus_out Jv_view_dynamic_focus_toggle Kv_view_track_target
3 spaceship_movement Jv_pitch Jv_yaw_left Jv_yaw_right Jv_yaw Kv_roll_left Kv_roll_right Jv_roll Jv_throttle Kv_throttle_toggle_minmax Xv_throttle_zero Xv_throttle_up Xv_throttle_down Xv_brake Jv_target_match_vel Xv_ifcs_toggle_vector_decoupling Kv_strafe_up Kv_strafe_down Kv_strafe_left Kv_strafe_right Xv_strafe_forward Xv_strafe_back Xv_strafe_horizontal Xv_strafe_vertical Jv_newtonian_yaw Jv_newtonian_pitch Xv_newtonian_brake Xv_ifcs_toggle_safety Jv_afterburner
4 spaceship_targeting Jv_target_cycle_all_fwd Jv_target_cycle_all_back Kv_target_cycle_friendly_fwd Kv_target_cycle_friendly_back Xv_target_toggle_pinned_focused Jv_target_missile_lock_focused Jv_target_cycle_hostile_fwd Kv_target_cycle_hostile_back Jv_target_nearest_hostile Kv_target_nearest_landzone Kv_target_pin_reticule Kv_target_cycle_subsystem_fwd Kv_target_cycle_subsystem_back
5 spaceship_weapons Jv_attack1_group1 Jv_attack1_group2 Jv_attack1_group3 Jv_attack1_group4
6 spaceship_missiles Jv_weapon_cycle_missile_fwd Kv_weapon_cycle_missile_back Xv_weapon_toggle_arm_missile Jv_weapon_launch_missile
7 spaceship_defensive Jv_weapon_launch_countermeasure Jv_weapon_cycle_countermeasure_fwd Kv_shield_raise_level_forward Kv_shield_raise_level_back Kv_shield_raise_level_left Kv_shield_raise_level_right Kv_shield_reset_level Kv_shield_power_up Kv_shield_power_down Jv_shield_boost_recharge Jv_shield_cycle_presets_fwd Jv_shield_cycle_presets_back
8 spaceship_auto_weapons Kv_weapon_toggle_ai
9 spaceship_radar Kv_radar_cycle_zoom_fwd Kv_radar_cycle_focus_fwd Kv_radar_cycle_focus_back
10 spaceship_hud Kv_hud_cycle_mode_fwd Kv_hud_cycle_mode_back Kv_comm_open_chat Kv_comm_show_chat Kv_comm_open_precanned

Binary file not shown.

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

Binary file not shown.

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,714 @@
<profile version="0">
<platforms>
<PC keyboard="1" xboxpad="1" ps3pad="1" joystick="1" />
<Xbox keyboard="1" xboxpad="1" ps3pad="0" />
<PS3 keyboard="1" xboxpad="0" ps3pad="1" />
</platforms>
<actiongroup action="v_attack1">
<action name="v_attack1_group1" />
<action name="v_attack1_group2" />
<action name="v_attack1_group3" />
</actiongroup>
<actionmap name="debug" version="22">
<!-- debug keys - move to debug when we can switch devmode-->
<action name="flymode" onPress="1" noModifiers="1" keyboard="f3" />
<action name="godmode" onPress="1" noModifiers="1" keyboard="f4" />
<action name="toggleaidebugdraw" onPress="1" noModifiers="1" keyboard="f11" />
<action name="ai_DebugCenterViewAgent" onPress="1" noModifiers="1" keyboard="np_divide" />
<action name="togglepdrawhelpers" onPress="1" noModifiers="1" keyboard="f10" />
<action name="ulammo" onPress="1" noModifiers="1" keyboard="" />
<!--<action name="debug" onPress="1" keyboard="7" />-->
<!--<action name="thirdperson" onPress="1" noModifiers="1" keyboard="f1" xboxpad="xi_dpad_up" ps3pad="pad_up"/>-->
<!-- debug keys - end -->
</actionmap>
<actionmap name="multiplayer" version="24">
<!-- multiplayer specific keys -->
<action name="self_destruct" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.5" keyboard="ralt+backspace" xboxpad="" joystick="" />
<action name="respawn" onPress="1" keyboard="x" xboxpad="xi_x" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="singleplayer" version="22">
<!-- singleplayer specific keys -->
<action name="save" onPress="1" consoleCmd="1" keyboard="f5" />
<action name="loadLastSave" onPress="1" consoleCmd="1" keyboard="f9" />
<action name="load" onPress="1" consoleCmd="1" keyboard="f8" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="default" version="24">
<action name="hmd_toggle" onPress="1" keyboard="np_1" />
<action name="hmd_center" onPress="1" keyboard="np_2" />
<!-- default keys -->
<action name="screenshot" onPress="1" keyboard="f12" />
<action name="skip_cutscene" onPress="1" noModifiers="1" keyboard="space" />
<action name="cancel_cinematic" onPress="1" noModifiers="1" keyboard="space" xboxpad="xi_back"/>
<action name="cam_toggle_cinematic" onPress="1" keyboard="ralt+c" />
<action name="objectives" onPress="1" onRelease="1" noModifiers="0" keyboard="o" />
<!-- UI keys -->
<action name="ui_toggle_pause" onPress="1" xboxpad="xi_start" ps3pad="pad_start"/>
<action name="ui_start_pause" onPress="1" keyboard="escape"/>
<action name="ui_click" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross">
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<action name="ui_back" keyboard="escape" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="ui_up" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="up" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_up" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_up"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_down" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="down" />
<inputdata input="tab" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_down" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_down"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_left" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="left" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_left" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_left"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_right" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="right" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_right" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_right"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_confirm" onPress="1" onRelease="1" xboxpad="xi_y" ps3pad="pad_triangle"/>
<action name="ui_reset" onPress="1" onRelease="1" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="ui_skip_video" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Trap alt+tab to stop actions on alt or tab from firing -->
<action name="windows_tabbing" keyboard="lalt+tab" />
</actionmap>
<actionmap name="player" version="24">
<!-- player keys -->
<action name="use" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_y" ps3pad="pad_triangle" />
<action name="attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1"/>
<action name="zoom" onPress="1" onRelease="1" keyboard="mouse2" />
<action name="xi_zoom" onPress="1" onRelease="1" onHold="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="firemode" onPress="1" keyboard="x" xboxpad="xi_dpad_down" ps3pad="pad_down"/>
<action name="cycle_spectator_mode" onPress="1" keyboard="space" />
<action name="prev_spectator_target" onPress="1" keyboard="left" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="next_spectator_target" onPress="1" keyboard="right" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="revive" onPress="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="moveleft" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="moveright" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="moveforward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" />
<action name="moveback" onPress="1" onRelease="1" retriggerable="1" keyboard="s" />
<action name="jump" onPress="1" onRelease="1" keyboard="space"/>
<action name="crouch" onPress="1" onRelease="1" retriggerable="1" keyboard="c"/>
<action name="prone" onPress="1" onHold="1" keyboard="z" />
<action name="sprint" onPress="1" onRelease="1" retriggerable="1" keyboard="lshift" xboxpad="xi_thumbl" ps3pad="pad_l1" />
<action name="special" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_thumbr" />
<action name="leanleft" onPress="1" onRelease="1" onHold="1" keyboard="q" />
<action name="leanright" onPress="1" onRelease="1" onHold="1" keyboard="e" />
<action name="reload" onPress="1" keyboard="r" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="drop" onPress="1" onRelease="1" keyboard="j"/>
<action name="nextitem" onPress="1" keyboard="mwheel_up" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="previtem" onPress="1" keyboard="mwheel_down" />
<action name="small" onPress="1" keyboard="1" />
<action name="medium" onPress="1" keyboard="2" />
<action name="explosive" onPress="1" keyboard="3" />
<action name="suitmode" onPress="1" keyboard="4" />
<action name="utility" onPress="1" keyboard="5" />
<action name="handgrenade" onPress="1" keyboard="h" />
<action name="grenade" onPress="1" onRelease="1" keyboard="g" />
<action name="rotateyaw" keyboard="maxis_x" />
<action name="rotatepitch" keyboard="maxis_y" />
<action name="zoom_in" onPress="1" keyboard="mwheel_up" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="zoom_out" onPress="1" keyboard="mwheel_down" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="skip_dialogfragment" onRelease="1" noModifiers="1" xboxpad="xi_b" >
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<!-- CIG BEGIN - ernst @ IllFonic : Adding magnetic boot support. -->
<action name="toggle_magnetic_boots" onPress="1" keyboard="b" xboxpad="xi_y" ps3pad="pad_triangle"/>
<!-- CIG END -->
<!-- CONSOLE SPECIFIC CONTROLS START -->
<action name="xi_movey" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="xi_movex" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="xi_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="xi_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="xi_jump" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="xi_crouch" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<!-- CONSOLE SPECIFIC CONTROLS END -->
<action name="thirdperson" onPress="1" noModifiers="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="free_thirdperson_camera" onPress="1" onRelease="1" retriggerable="0" keyboard="g" xboxpad="xi_dpad_left"/>
<!-- HMD -->
<action name="hmd_rotateyaw" keyboard="HMD_Yaw" />
<action name="hmd_rotatepitch" keyboard="HMD_Pitch" />
<action name="hmd_rotateroll" keyboard="HMD_Roll" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="mobiglas" onPress="1" keyboard="p" />
<action name="mobiglas_entity_interaction" onPress="1" keyboard="i" />
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick=""/>
<!-- CIG END David Campbell BHVR -->
<!-- CIG BEGIN dhumphries @ Illfonic: Listen for eject hold to play cinematic camera -->
<action name="v_eject" onHold="1" keyboard="ralt+l"/>
<!-- CIG END -->
</actionmap>
<actionmap name="flycam">
<action name="flycam_movey" onPress="1" onRelease="1" keyboard="w" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="flycam_movey_neg" onPress="1" onRelease="1" keyboard="s"/>
<action name="flycam_movex" onPress="1" onRelease="1" keyboard="d" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="flycam_movex_neg" onPress="1" onRelease="1" keyboard="a"/>
<action name="flycam_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx" />
<action name="flycam_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry" />
<action name="flycam_rotateyaw_mouse" keyboard="maxis_x"/>
<action name="flycam_rotatepitch_mouse" keyboard="maxis_y" />
<action name="flycam_moveup" onPress="1" onRelease="1" keyboard="q" xboxpad="xi_triggerr" ps3pad="pad_r2" />
<action name="flycam_movedown" onPress="1" onRelease="1" keyboard="e" xboxpad="xi_triggerl" ps3pad="pad_l2" />
<action name="flycam_speedup" onPress="1" keyboard="up" xboxpad="xi_dpad_up" ps3pad="pad_up" />
<action name="flycam_speeddown" onPress="1" keyboard="down" xboxpad="xi_dpad_down" ps3pad="pad_down" />
<action name="flycam_turbo" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="flycam_setpoint" onPress="1" keyboard="z" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="flycam_play" onPress="1" keyboard="x" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="flycam_clear" onPress="1" keyboard="c" xboxpad="xi_y" ps3pad="pad_triangle"/>
</actionmap>
<actionmap name="vehicle_general" version="26">
<!-- vehicle keys -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_exit" onPress="1" onRelease="1" onHold="1" xboxpad="xi_y" ps3pad="pad_triangle" keyboard="f"/>
<action name="v_horn" onPress="1" onRelease="1" keyboard="h" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_lights" onPress="1" keyboard="o" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
<!-- This needs to be in vehicle_general to allow the weapons mount to fire in the hangar -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
</actionmap>
<actionmap name="vehicle_driver" version="23">
<action name="v_yaw_left" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_move_forward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="v_move_back" onPress="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="v_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_roll_left" onPress="1" onRelease="1" keyboard="q" />
<action name="v_roll_right" onPress="1" onRelease="1" keyboard="t" />
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="v_yaw" onPress="1" onRelease="1" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
</actionmap>
<actionmap name="vehicle_gunner" version="23">
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_triggerl_btn" ps3pad="pad_l1"/>
</actionmap>
<!-- STAR CITIZEN ACTION MAPS START -->
<actionmap name="spaceship" version="29">
<!-- NOTE These inputs are in ADDITION to the action map "vehicle_general" which is always initialized -->
<!-- Flight Control System Inputs, Keyboard -->
<action name="v_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="w"/>
<action name="v_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="s"/>
<action name="v_roll_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="q"/>
<action name="v_roll_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="e"/>
<action name="v_use_docking" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Head look Inputs, Keyboard -->
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="right"/>
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="left"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="up"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="down"/>
<!-- Flight Control System Inputs, Gamepad/Joystick -->
<action name="v_pitch" xboxpad="xi_thumbly" ps3pad="pad_stickly" joystick="js1_y"/>
<action name="v_pitch_gamepad" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="v_pitch_flightstick" joystick="js1_y"/>
<action name="v_yaw" xboxpad="xi_thumblx" ps3pad="pad_sticklx" joystick="js1_rotz"/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_thumblx" joystick="js1_x"/>
<!--<action name="v_throttle_up" onPress="1" onHold="1" keyboard="equals" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_throttle_down" onPress="1" onHold="1" keyboard="minus" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>-->
<action name="v_throttle" joystick="js1_throttlez"/>
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_brake" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_b" ps3pad="pad_circle" />
<!-- Camera views Inputs -->
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_triggerl_btn" joystick=""/>
<!-- Weapon System Inputs -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_a" ps3pad="pad_cross" joystick="js1_button2" />
<action name="v_weapon_cycle_firemode_fwd" onPress="1" keyboard="f" />
<action name="v_weapon_cycle_ammo_fwd" onPress="1" keyboard="b" />
<action name="v_weapon_toggle_ai" onPress="1" keyboard="l" />
<!-- Missile Inputs -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" keyboard="n" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="m" xboxpad="xi_reserved" joystick=""/>
<action name="v_weapon_launch_missile" onPress="1" keyboard="mouse2" />
<!-- Lights -->
<!--
ju - moved to vehicle_default for buggy usage
<action name="v_lights" onPress="1" keyboard="o" />
-->
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Exit -->
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l"/>
<!-- Input options -->
<options>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata input="xi_thumblx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_thumblx" />
<optiondata input="xi_thumbly" action="v_pitch" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_thumbly" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" />
</option>
</options>
<!-- LEGACY -->
<options>
<option input="xboxpad" sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata action="v_pitch" invert_cvar="cl_invertControllerFlight" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
<option input="joystick" sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata action="v_pitch" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_general" version="2">
<!-- Action map for a spaceship bits and pieces -->
<!-- Lights -->
<action name="v_toggle_cabin_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<action name="v_toggle_running_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<!-- Power managements -->
<action name="v_power_cycle_preset_fwd" onPress="1" keyboard="u" xboxpad="" joystick="" />
<action name="v_power_cycle_preset_back" onPress="1" keyboard="i" xboxpad="" joystick="" />
<!-- Exit -->
<action name="v_exit" onPress="1" onRelease="1" onHold="1" keyboard="f" xboxpad="xi_a" joystick="" />
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l" xboxpad="xi_triggerl_btn+xi_back" joystick="jsx_reserved" />
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="v_matchmaking_ui" onPress="1" keyboard="f12" />
<!-- CIG END David Campbell BHVR -->
</actionmap>
<actionmap name="spaceship_view" version="15">
<!-- Camera view -->
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_left"/>
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_right"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_aim_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_yaw_toggled_mouse" keyboard="maxis_x"/>
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_down"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_up"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_aim_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_pitch_toggled_mouse" keyboard="maxis_y"/>
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch"/>
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" joystick="js1_button6"/>
<action name="v_view_cycle_internal_fwd" onPress="1" keyboard="home" xboxpad="" joystick=""/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_triggerl_btn" joystick="jsx_reserved"/>
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_thumbr" joystick="jsx_reserved"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_up" joystick="js1_hat1_up" />
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_down" joystick="js1_hat1_down" />
<action name="v_view_interact" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_a" joystick=""/>
<action name="v_view_toggle_mouse" onRelease="1" keyboard="tab" releaseTriggerThreshold="0.25"/>
<action name="v_view_dynamic_focus_in" onPress="1" keyboard="mwheel_up"/>
<action name="v_view_dynamic_focus_out" onPress="1" keyboard="mwheel_down"/>
<action name="v_view_dynamic_focus_toggle" onPress="1" xboxpad="xi_thumbr" joystick="js1_button11"/>
<action name="v_view_track_target" onPress="1" onRelease="1" keyboard="lctrl+tab" xboxpad="" joystick=""/>
<!-- Input options -->
<options>
<!--<option sensitivity="0.0015" sensitivity_cvar="cl_sensitivity">
<optiondata input="maxis_y" invert_cvar="cl_invertMouse" />
<optiondata input="maxis_x" />
</option>-->
<option sensitivity_cvar="v_gamepadAimSensitivity" nonlinearity_cvar="v_gamepadAimNonLinearity">
<optiondata input="xi_thumbrx" action="v_view_aim_yaw" />
<optiondata input="xi_thumbry" action="v_view_aim_pitch" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_movement" version="10">
<!-- Action map for a spaceship piloting -->
<!-- IFCS (requires avionics) -->
<action name="v_pitch_up" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch_down" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch" xboxpad="xi_taxisly" joystick="js1_y"/>
<action name="v_pitch_mouse" keyboard="maxis_y"/>
<action name="v_yaw_left" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw_right" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw" xboxpad="xi_taxislx" joystick="js1_rotz"/>
<action name="v_yaw_mouse" keyboard="maxis_x"/>
<action name="v_toggle_relative_mouse_mode" onPress="1" onRelease="1" keyboard="lctrl+f" xboxpad="" joystick=""/>
<action name="v_roll_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick=""/>
<action name="v_roll_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick=""/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="js1_x"/>
<action name="v_throttle_toggle_minmax" onPress="1" keyboard="backspace" xboxpad="" joystick="" />
<action name="v_throttle_zero" onPress="1" keyboard="" joystick="" >
<xboxpad multiTap="2" input="xi_shoulderl" />
</action>
<action name="v_throttle_100" onPress="1" keyboard="" xboxpad="" joystick="jsx_reserved" />
<action name="v_throttle_up" onPress="1" onHold="1" onRelease="1" keyboard="w" xboxpad="xi_shoulderr" joystick="" />
<action name="v_throttle_down" onPress="1" onHold="1" onRelease="1" keyboard ="s" xboxpad="xi_shoulderl" joystick=""/>
<action name="v_throttle" keyboard="" xboxpad="" joystick="js1_throttlez" />
<action name="v_brake" onPress="1" onHold="1" onRelease="1" keyboard="space" xboxpad="xi_shoulderl+xi_shoulderr" joystick="jsx_reserved" />
<action name="v_target_match_vel" onPress="1" onRelease="1" keyboard="m" joystick="js1_button8" >
<xboxpad multiTap="2" input="xi_shoulderr" />
</action>
<!-- Advanced IFCS on (requires IFCS) -->
<action name="v_ifcs_toggle_vector_decoupling" onPress="1" onRelease="1" keyboard="capslock" xboxpad="xi_thumbl" joystick="jsx_reserved" />
<action name="v_strafe_up" onHold="1" onRelease="1" retriggerable="1" keyboard="e" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_down" onHold="1" onRelease="1" retriggerable="1" keyboard="q" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_vertical" xboxpad="xi_triggerl_btn+xi_taxisly" joystick="jsx_reserved" />
<action name="v_strafe_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_lateral" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="jsx_reserved" />
<action name="v_strafe_forward" onHold="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_shoulderr" joystick="jsx_reserved" />
<action name="v_strafe_back" onHold="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_shoulderl" joystick="jsx_reserved" />
<action name="v_strafe_longitudinal" joystick="jsx_reserved" />
<action name="v_newtonian_yaw" xboxpad="xi_taxislx" joystick="js1_x" />
<action name="v_newtonian_pitch" xboxpad="xi_taxisly" joystick="js1_y" />
<action name="v_newtonian_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_triggerl_btn+xi_shoulderl" joystick="jsx_reserved" />
<action name="v_ifcs_toggle_safety" onPress="1" onRelease="1" keyboard="lctrl+capslock" xboxpad="xi_triggerl_btn+xi_thumbl" joystick="jsx_reserved" />
<!-- Afterburner installed (requires IFCS) -->
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_b" joystick="js1_button7" />
<!-- Input options -->
<options>
<option invert_cvar="v_mouseInvert">
<optiondata input="maxis_y" />
</option>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<nonlinearity_curve>
<point in="0.5" out="0.15"/>
<point in="0.85" out="0.5"/>
</nonlinearity_curve>
<optiondata input="xi_taxislx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxislx" />
<optiondata input="xi_taxisly" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_taxisrx" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxisry" invert_cvar="v_gamepadInvert" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_targeting" version="4">
<!-- Action map for a spaceship targeting controls -->
<!-- Targeting computer controls (requires avionics) -->
<action name="v_target_toggle_computer_onoff" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_target_cycle_all_fwd" onPress="1" onRelease="1" keyboard="y" xboxpad="xi_dpad_up" joystick="js1_hat1_up"/>
<action name="v_target_cycle_all_back" onPress="1" onRelease="1" keyboard="lctrl+y" xboxpad="xi_dpad_down" joystick="js1_hat1_down"/>
<action name="v_target_cycle_friendly_fwd" onPress="1" onRelease="1" keyboard="h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_friendly_back" onPress="1" onRelease="1" keyboard="lctrl+h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_toggle_pinned_focused" onPress="1" onRelease="1" keyboard="g" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_target_missile_lock_focused" onPress="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
<!--Additional targeting computer controls (requires flight avionics) -->
<action name="v_target_cycle_hostile_fwd" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_dpad_right" joystick="js1_hat1_right"/>
<action name="v_target_cycle_hostile_back" onPress="1" onRelease="1" keyboard="lctrl+t" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_nearest_hostile" onPress="1" onRelease="1" keyboard="r" xboxpad="xi_dpad_left" joystick="js1_hat1_left"/>
<action name="v_target_nearest_landzone" onPress="1" onRelease="1" keyboard="n" xboxpad="" joystick=""/>
<action name="v_target_pin_reticule" onPress="1" onRelease="1" keyboard="lctrl+g" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_subsystem_fwd" onPress="1" onRelease="1" keyboard="b" xboxpad="" joystick=""/>
<action name="v_target_cycle_subsystem_back" onPress="1" onRelease="1" keyboard="lctrl+b" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_weapons" version="2">
<!-- Action map for a spaceship standard weapons controls -->
<!-- Weapons control (requires flight avionics) -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_x" joystick="js1_button2" />
<action name="v_attack1_group3" onPress="1" onRelease="1" onHold="1" keyboard="mouse4" xboxpad="xi_triggerl_btn+xi_x" joystick="js1_button3" />
<action name="v_attack1_group4" onPress="1" onRelease="1" onHold="1" keyboard="mouse5" xboxpad="xi_back+xi_x" joystick="js1_button4"/>
<action name="v_weapon_cycle_ammo_fwd" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_weapon_cycle_ammo_back" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_missiles" version="1">
<!-- Action map for a spaceship missiles -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" onRelease="1" keyboard="mwheel_up" xboxpad="" joystick="js1_button6" />
<action name="v_weapon_cycle_missile_back" onPress="1" onRelease="1" keyboard="mwheel_down" xboxpad="" joystick="" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="" xboxpad="xi_reserved" joystick="" />
<action name="v_weapon_launch_missile" onPress="1" onHold="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
</actionmap>
<actionmap name="spaceship_defensive" version="2">
<!-- Action map for a spaceship countermeasures and shields -->
<!-- Countermeasures installed (requires weapons control on) -->
<action name="v_weapon_launch_countermeasure" onPress="1" keyboard="z" xboxpad="xi_triggerl_btn+xi_y" joystick="js1_button5" />
<action name="v_weapon_cycle_countermeasure_fwd" onPress="1" keyboard="x" xboxpad="xi_reserved" joystick="js1_button8" />
<action name="v_weapon_cycle_countermeasure_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Shields control (requires flight avionics) -->
<action name="v_shield_toggle_generator_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_shield_power_up" onPress="1" keyboard="equal" xboxpad="" joystick=""/>
<action name="v_shield_power_down" onPress="1" keyboard="minus" xboxpad="" joystick=""/>
<action name="v_shield_power" keyboard="" xboxpad="" joystick=""/>
<!-- Shield management system installed -->
<action name="v_shield_boost_recharge" onPress="1" onRelease="1" keyboard="c" xboxpad="" joystick="js1_button12" />
<action name="v_shield_cycle_presets_fwd" onPress="1" keyboard="v" xboxpad="" joystick="js1_button9" />
<action name="v_shield_cycle_presets_back" onPress="1" keyboard="lctrl+v" xboxpad="" joystick="js1_button10" />
</actionmap>
<actionmap name="spaceship_auto_weapons" version="1">
<!-- Action map for a spaceship AI weapon controls -->
<!-- Automation support installed (requires weapons control on) -->
<action name="v_weapon_toggle_ai" onPress="1" keyboard="slash" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_radar" version="2">
<!-- Action map for a spaceship radar controls -->
<!-- Radar control (requires avionic) -->
<action name="v_radar_toggle_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_toggle_active_or_passive" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_fwd" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_zoom_fwd" onPress="1" keyboard="comma" xboxpad="" joystick="jsx_reserved" />
<action name="v_radar_cycle_zoom_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_fwd" onPress="1" keyboard="j" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_back" onPress="1" keyboard="k" xboxpad="" joystick=""/>
<action name="v_radar_toggle_view_focus" onPress="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_hud" version="1">
<!-- Action map for a spaceship HUD controls-->
<!-- HUD controls (general) -->
<action name="v_hud_cycle_mode_fwd" onPress="1" onRelease="1" keyboard="semicolon" xboxpad="" joystick=""/>
<action name="v_hud_cycle_mode_back" onPress="1" onRelease="1" keyboard="apostrophe" xboxpad="" joystick=""/>
<action name="v_hud_toggle_cursor_input" onHold="1" onRelease="1" holdTriggerDelay="0.25" holdRepeatDelay="-1" retriggerable="0" keyboard="tab" xboxpad="xi_start" joystick=""/>
<!-- HUD controls (quick keys) -->
<action name="v_hud_open_tab1" onPress="1" onRelease="1" keyboard="f1" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab2" onPress="1" onRelease="1" keyboard="f2" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab3" onPress="1" onRelease="1" keyboard="f3" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab4" onPress="1" onRelease="1" keyboard="f4" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab5" onPress="1" onRelease="1" keyboard="f5" xboxpad="" joystick=""/>
<action name="v_hud_open_tab6" onPress="1" onRelease="1" keyboard="f6" xboxpad="" joystick=""/>
<action name="v_hud_open_tab7" onPress="1" onRelease="1" keyboard="f7" xboxpad="" joystick=""/>
<action name="v_hud_open_tab8" onPress="1" onRelease="1" keyboard="f8" xboxpad="" joystick=""/>
<action name="v_hud_open_tab9" onPress="1" onRelease="1" keyboard="f9" xboxpad="" joystick=""/>
<action name="v_hud_open_tab10" onPress="1" onRelease="1" keyboard="f10" xboxpad="" joystick=""/>
<action name="v_hud_num_zero" onPress="1" onRelease="1" keyboard="np_0" xboxpad="" joystick=""/>
<action name="v_hud_num_del" onPress="1" onRelease="1" keyboard="np_period" xboxpad="" joystick=""/>
<action name="v_hud_num_1" onPress="1" onRelease="1" keyboard="np_1" xboxpad="" joystick=""/>
<action name="v_hud_num_2" onPress="1" onRelease="1" keyboard="np_2" xboxpad="" joystick=""/>
<action name="v_hud_num_3" onPress="1" onRelease="1" keyboard="np_3" xboxpad="" joystick=""/>
<action name="v_hud_num_4" onPress="1" onRelease="1" keyboard="np_4" xboxpad="" joystick=""/>
<action name="v_hud_num_5" onPress="1" onRelease="1" keyboard="np_5" xboxpad="" joystick=""/>
<action name="v_hud_num_6" onPress="1" onRelease="1" keyboard="np_6" xboxpad="" joystick=""/>
<action name="v_hud_num_7" onPress="1" onRelease="1" keyboard="np_7" xboxpad="" joystick=""/>
<action name="v_hud_num_8" onPress="1" onRelease="1" keyboard="np_8" xboxpad="" joystick=""/>
<action name="v_hud_num_9" onPress="1" onRelease="1" keyboard="np_9" xboxpad="" joystick=""/>
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_hud_toggle_maximised" onPress="1" onRelease="1" keyboard="f11" xboxpad="" joystick=""/>
<!-- HUD controls (interaction) -->
<action name="v_hud_confirm" onPress="1" onRelease="1" xboxpad="xi_triggerL_btn+xi_a" joystick="">
<keyboard>
<inputdata input="enter"/>
</keyboard>
</action>
<action name="v_hud_interact" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn" joystick=""/>
<action name="v_hud_cancel" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn+xi_b" joystick=""/>
<action name="v_hud_left_panel_up" onPress="1" onRelease="1" keyboard="up" xboxpad="xi_triggerl_btn+xi_dpad_up" joystick=""/>
<action name="v_hud_left_panel_down" onPress="1" onRelease="1" keyboard="down" xboxpad="xi_triggerl_btn+xi_dpad_down" joystick=""/>
<action name="v_hud_left_panel_left" onPress="1" onRelease="1" keyboard="left" xboxpad="xi_triggerl_btn+xi_dpad_left" joystick=""/>
<action name="v_hud_left_panel_right" onPress="1" onRelease="1" keyboard="right" xboxpad="xi_triggerl_btn+xi_dpad_right" joystick=""/>
<action name="v_hud_slash" onPress="1" onRelease="1" keyboard="np_divide" xboxpad="p" joystick=""/>
<action name="v_hud_star" onPress="1" onRelease="1" keyboard="np_multiply" xboxpad="" joystick=""/>
<action name="v_hud_minus" onPress="1" onRelease="1" keyboard="np_subtract" xboxpad="" joystick=""/>
<action name="v_hud_plus" onPress="1" onRelease="1" keyboard="np_add" xboxpad="" joystick=""/>
<!-- Comm system controls -->
<action name="v_comm_open_chat" onPress="1" onRelease="1" keyboard="backslash" xboxpad="" joystick=""/>
<action name="v_comm_show_chat" onPress="1" onRelease="1" keyboard="equals" xboxpad="" joystick=""/>
<action name="v_comm_open_precanned" onPress="1" onRelease="1" keyboard="lctrl+backslash" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_1" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_2" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_3" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_4" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_5" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="zero_gravity_general" version="1">
<!-- general zero-gravity keys, applies to thruster and non-thruster movement -->
<action name="z_override_joystick" onPress="1" onRelease="1" retriggerable="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="z_roll" xboxpad="xi_triggerl_btn+xi_thumblx" ps3pad="pad_l2+pad_sticklx" joystick="js1_x"/>
</actionmap>
<actionmap name="gforce_tuning_mode" version="2">
<action name="v_gforce_save" onPress="1" xboxpad="xi_start"/>
<action name="v_gforce_lock" onPress="1" onRelease="1" xboxpad="xi_thumbr"/>
<action name="v_gforce_movey" xboxpad="xi_thumbly"/>
<action name="v_gforce_movex" xboxpad="xi_thumblx"/>
<action name="v_gforce_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_a"/>
<action name="v_gforce_mag_down" onPress="1" onHold="1" xboxpad="xi_shoulderl"/>
<action name="v_gforce_mag_up" onPress="1" onHold="1" xboxpad="xi_shoulderr"/>
<action name="v_gforce_body_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_b"/>
<action name="v_gforce_head_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_x"/>
<action name="v_gforce_toggle_menu" onPress="1" onRelease="1" onHold="" xboxpad="xi_y"/>
<action name="v_gforce_menu_down" onPress="1" xboxpad="xi_dpad_down"/>
<action name="v_gforce_menu_up" onPress="1" xboxpad="xi_dpad_up"/>
<action name="v_gforce_param_inc" onPress="1" onHold ="1" xboxpad="xi_dpad_left"/>
<action name="v_gforce_param_dec" onPress="1" onHold ="1" xboxpad="xi_dpad_right"/>
</actionmap>
<actionmap name="IFCS_controls" version="2">
<action name="v_IFCS_A" onPress="1" onRelease="1" onHold="" xboxpad="xi_a" keyboard="rctrl+a"/>
<action name="v_IFCS_B" onPress="1" onRelease="1" onHold="" xboxpad="xi_b" keyboard="rctrl+b"/>
<action name="v_IFCS_X" onPress="1" onRelease="1" onHold="" xboxpad="xi_x" keyboard="rctrl+x"/>
<action name="v_IFCS_Y" onPress="1" onRelease="1" onHold="" xboxpad="xi_y" keyboard="rctrl+y"/>
</actionmap>
<actionmap name="vehicle_gforce_tuning" version="2">
<!-- vehicle keys for gforce tuning mode -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
</actionmap>
</profile>

Binary file not shown.

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Binary file not shown.

Binary file not shown.

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,714 @@
<profile version="0">
<platforms>
<PC keyboard="1" xboxpad="1" ps3pad="1" joystick="1" />
<Xbox keyboard="1" xboxpad="1" ps3pad="0" />
<PS3 keyboard="1" xboxpad="0" ps3pad="1" />
</platforms>
<actiongroup action="v_attack1">
<action name="v_attack1_group1" />
<action name="v_attack1_group2" />
<action name="v_attack1_group3" />
</actiongroup>
<actionmap name="debug" version="22">
<!-- debug keys - move to debug when we can switch devmode-->
<action name="flymode" onPress="1" noModifiers="1" keyboard="f3" />
<action name="godmode" onPress="1" noModifiers="1" keyboard="f4" />
<action name="toggleaidebugdraw" onPress="1" noModifiers="1" keyboard="f11" />
<action name="ai_DebugCenterViewAgent" onPress="1" noModifiers="1" keyboard="np_divide" />
<action name="togglepdrawhelpers" onPress="1" noModifiers="1" keyboard="f10" />
<action name="ulammo" onPress="1" noModifiers="1" keyboard="" />
<!--<action name="debug" onPress="1" keyboard="7" />-->
<!--<action name="thirdperson" onPress="1" noModifiers="1" keyboard="f1" xboxpad="xi_dpad_up" ps3pad="pad_up"/>-->
<!-- debug keys - end -->
</actionmap>
<actionmap name="multiplayer" version="24">
<!-- multiplayer specific keys -->
<action name="self_destruct" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.5" keyboard="ralt+backspace" xboxpad="" joystick="" />
<action name="respawn" onPress="1" keyboard="x" xboxpad="xi_x" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="singleplayer" version="22">
<!-- singleplayer specific keys -->
<action name="save" onPress="1" consoleCmd="1" keyboard="f5" />
<action name="loadLastSave" onPress="1" consoleCmd="1" keyboard="f9" />
<action name="load" onPress="1" consoleCmd="1" keyboard="f8" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="default" version="24">
<action name="hmd_toggle" onPress="1" keyboard="np_1" />
<action name="hmd_center" onPress="1" keyboard="np_2" />
<!-- default keys -->
<action name="screenshot" onPress="1" keyboard="f12" />
<action name="skip_cutscene" onPress="1" noModifiers="1" keyboard="space" />
<action name="cancel_cinematic" onPress="1" noModifiers="1" keyboard="space" xboxpad="xi_back"/>
<action name="cam_toggle_cinematic" onPress="1" keyboard="ralt+c" />
<action name="objectives" onPress="1" onRelease="1" noModifiers="0" keyboard="o" />
<!-- UI keys -->
<action name="ui_toggle_pause" onPress="1" xboxpad="xi_start" ps3pad="pad_start"/>
<action name="ui_start_pause" onPress="1" keyboard="escape"/>
<action name="ui_click" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross">
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<action name="ui_back" keyboard="escape" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="ui_up" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="up" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_up" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_up"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_down" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="down" />
<inputdata input="tab" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_down" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_down"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_left" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="left" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_left" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_left"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_right" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="right" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_right" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_right"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_confirm" onPress="1" onRelease="1" xboxpad="xi_y" ps3pad="pad_triangle"/>
<action name="ui_reset" onPress="1" onRelease="1" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="ui_skip_video" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Trap alt+tab to stop actions on alt or tab from firing -->
<action name="windows_tabbing" keyboard="lalt+tab" />
</actionmap>
<actionmap name="player" version="24">
<!-- player keys -->
<action name="use" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_y" ps3pad="pad_triangle" />
<action name="attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1"/>
<action name="zoom" onPress="1" onRelease="1" keyboard="mouse2" />
<action name="xi_zoom" onPress="1" onRelease="1" onHold="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="firemode" onPress="1" keyboard="x" xboxpad="xi_dpad_down" ps3pad="pad_down"/>
<action name="cycle_spectator_mode" onPress="1" keyboard="space" />
<action name="prev_spectator_target" onPress="1" keyboard="left" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="next_spectator_target" onPress="1" keyboard="right" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="revive" onPress="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="moveleft" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="moveright" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="moveforward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" />
<action name="moveback" onPress="1" onRelease="1" retriggerable="1" keyboard="s" />
<action name="jump" onPress="1" onRelease="1" keyboard="space"/>
<action name="crouch" onPress="1" onRelease="1" retriggerable="1" keyboard="c"/>
<action name="prone" onPress="1" onHold="1" keyboard="z" />
<action name="sprint" onPress="1" onRelease="1" retriggerable="1" keyboard="lshift" xboxpad="xi_thumbl" ps3pad="pad_l1" />
<action name="special" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_thumbr" />
<action name="leanleft" onPress="1" onRelease="1" onHold="1" keyboard="q" />
<action name="leanright" onPress="1" onRelease="1" onHold="1" keyboard="e" />
<action name="reload" onPress="1" keyboard="r" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="drop" onPress="1" onRelease="1" keyboard="j"/>
<action name="nextitem" onPress="1" keyboard="mwheel_up" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="previtem" onPress="1" keyboard="mwheel_down" />
<action name="small" onPress="1" keyboard="1" />
<action name="medium" onPress="1" keyboard="2" />
<action name="explosive" onPress="1" keyboard="3" />
<action name="suitmode" onPress="1" keyboard="4" />
<action name="utility" onPress="1" keyboard="5" />
<action name="handgrenade" onPress="1" keyboard="h" />
<action name="grenade" onPress="1" onRelease="1" keyboard="g" />
<action name="rotateyaw" keyboard="maxis_x" />
<action name="rotatepitch" keyboard="maxis_y" />
<action name="zoom_in" onPress="1" keyboard="mwheel_up" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="zoom_out" onPress="1" keyboard="mwheel_down" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="skip_dialogfragment" onRelease="1" noModifiers="1" xboxpad="xi_b" >
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<!-- CIG BEGIN - ernst @ IllFonic : Adding magnetic boot support. -->
<action name="toggle_magnetic_boots" onPress="1" keyboard="b" xboxpad="xi_y" ps3pad="pad_triangle"/>
<!-- CIG END -->
<!-- CONSOLE SPECIFIC CONTROLS START -->
<action name="xi_movey" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="xi_movex" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="xi_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="xi_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="xi_jump" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="xi_crouch" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<!-- CONSOLE SPECIFIC CONTROLS END -->
<action name="thirdperson" onPress="1" noModifiers="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="free_thirdperson_camera" onPress="1" onRelease="1" retriggerable="0" keyboard="g" xboxpad="xi_dpad_left"/>
<!-- HMD -->
<action name="hmd_rotateyaw" keyboard="HMD_Yaw" />
<action name="hmd_rotatepitch" keyboard="HMD_Pitch" />
<action name="hmd_rotateroll" keyboard="HMD_Roll" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="mobiglas" onPress="1" keyboard="p" />
<action name="mobiglas_entity_interaction" onPress="1" keyboard="i" />
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick=""/>
<!-- CIG END David Campbell BHVR -->
<!-- CIG BEGIN dhumphries @ Illfonic: Listen for eject hold to play cinematic camera -->
<action name="v_eject" onHold="1" keyboard="ralt+l"/>
<!-- CIG END -->
</actionmap>
<actionmap name="flycam">
<action name="flycam_movey" onPress="1" onRelease="1" keyboard="w" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="flycam_movey_neg" onPress="1" onRelease="1" keyboard="s"/>
<action name="flycam_movex" onPress="1" onRelease="1" keyboard="d" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="flycam_movex_neg" onPress="1" onRelease="1" keyboard="a"/>
<action name="flycam_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx" />
<action name="flycam_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry" />
<action name="flycam_rotateyaw_mouse" keyboard="maxis_x"/>
<action name="flycam_rotatepitch_mouse" keyboard="maxis_y" />
<action name="flycam_moveup" onPress="1" onRelease="1" keyboard="q" xboxpad="xi_triggerr" ps3pad="pad_r2" />
<action name="flycam_movedown" onPress="1" onRelease="1" keyboard="e" xboxpad="xi_triggerl" ps3pad="pad_l2" />
<action name="flycam_speedup" onPress="1" keyboard="up" xboxpad="xi_dpad_up" ps3pad="pad_up" />
<action name="flycam_speeddown" onPress="1" keyboard="down" xboxpad="xi_dpad_down" ps3pad="pad_down" />
<action name="flycam_turbo" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="flycam_setpoint" onPress="1" keyboard="z" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="flycam_play" onPress="1" keyboard="x" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="flycam_clear" onPress="1" keyboard="c" xboxpad="xi_y" ps3pad="pad_triangle"/>
</actionmap>
<actionmap name="vehicle_general" version="26">
<!-- vehicle keys -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_exit" onPress="1" onRelease="1" onHold="1" xboxpad="xi_y" ps3pad="pad_triangle" keyboard="f"/>
<action name="v_horn" onPress="1" onRelease="1" keyboard="h" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_lights" onPress="1" keyboard="o" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
<!-- This needs to be in vehicle_general to allow the weapons mount to fire in the hangar -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
</actionmap>
<actionmap name="vehicle_driver" version="23">
<action name="v_yaw_left" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_move_forward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="v_move_back" onPress="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="v_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_roll_left" onPress="1" onRelease="1" keyboard="q" />
<action name="v_roll_right" onPress="1" onRelease="1" keyboard="t" />
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="v_yaw" onPress="1" onRelease="1" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
</actionmap>
<actionmap name="vehicle_gunner" version="23">
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_triggerl_btn" ps3pad="pad_l1"/>
</actionmap>
<!-- STAR CITIZEN ACTION MAPS START -->
<actionmap name="spaceship" version="29">
<!-- NOTE These inputs are in ADDITION to the action map "vehicle_general" which is always initialized -->
<!-- Flight Control System Inputs, Keyboard -->
<action name="v_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="w"/>
<action name="v_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="s"/>
<action name="v_roll_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="q"/>
<action name="v_roll_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="e"/>
<action name="v_use_docking" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Head look Inputs, Keyboard -->
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="right"/>
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="left"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="up"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="down"/>
<!-- Flight Control System Inputs, Gamepad/Joystick -->
<action name="v_pitch" xboxpad="xi_thumbly" ps3pad="pad_stickly" joystick="js1_y"/>
<action name="v_pitch_gamepad" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="v_pitch_flightstick" joystick="js1_y"/>
<action name="v_yaw" xboxpad="xi_thumblx" ps3pad="pad_sticklx" joystick="js1_rotz"/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_thumblx" joystick="js1_x"/>
<!--<action name="v_throttle_up" onPress="1" onHold="1" keyboard="equals" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_throttle_down" onPress="1" onHold="1" keyboard="minus" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>-->
<action name="v_throttle" joystick="js1_throttlez"/>
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_brake" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_b" ps3pad="pad_circle" />
<!-- Camera views Inputs -->
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_triggerl_btn" joystick=""/>
<!-- Weapon System Inputs -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_a" ps3pad="pad_cross" joystick="js1_button2" />
<action name="v_weapon_cycle_firemode_fwd" onPress="1" keyboard="f" />
<action name="v_weapon_cycle_ammo_fwd" onPress="1" keyboard="b" />
<action name="v_weapon_toggle_ai" onPress="1" keyboard="l" />
<!-- Missile Inputs -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" keyboard="n" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="m" xboxpad="xi_reserved" joystick=""/>
<action name="v_weapon_launch_missile" onPress="1" keyboard="mouse2" />
<!-- Lights -->
<!--
ju - moved to vehicle_default for buggy usage
<action name="v_lights" onPress="1" keyboard="o" />
-->
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Exit -->
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l"/>
<!-- Input options -->
<options>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata input="xi_thumblx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_thumblx" />
<optiondata input="xi_thumbly" action="v_pitch" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_thumbly" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" />
</option>
</options>
<!-- LEGACY -->
<options>
<option input="xboxpad" sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata action="v_pitch" invert_cvar="cl_invertControllerFlight" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
<option input="joystick" sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata action="v_pitch" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_general" version="2">
<!-- Action map for a spaceship bits and pieces -->
<!-- Lights -->
<action name="v_toggle_cabin_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<action name="v_toggle_running_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<!-- Power managements -->
<action name="v_power_cycle_preset_fwd" onPress="1" keyboard="u" xboxpad="" joystick="" />
<action name="v_power_cycle_preset_back" onPress="1" keyboard="i" xboxpad="" joystick="" />
<!-- Exit -->
<action name="v_exit" onPress="1" onRelease="1" onHold="1" keyboard="f" xboxpad="xi_a" joystick="" />
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l" xboxpad="xi_triggerl_btn+xi_back" joystick="jsx_reserved" />
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="v_matchmaking_ui" onPress="1" keyboard="f12" />
<!-- CIG END David Campbell BHVR -->
</actionmap>
<actionmap name="spaceship_view" version="15">
<!-- Camera view -->
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_left"/>
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_right"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_aim_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_yaw_toggled_mouse" keyboard="maxis_x"/>
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_down"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_up"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_aim_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_pitch_toggled_mouse" keyboard="maxis_y"/>
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch"/>
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" joystick="js1_button6"/>
<action name="v_view_cycle_internal_fwd" onPress="1" keyboard="home" xboxpad="" joystick=""/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_triggerl_btn" joystick="jsx_reserved"/>
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_thumbr" joystick="jsx_reserved"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_up" joystick="js1_hat1_up" />
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_down" joystick="js1_hat1_down" />
<action name="v_view_interact" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_a" joystick=""/>
<action name="v_view_toggle_mouse" onRelease="1" keyboard="tab" releaseTriggerThreshold="0.25"/>
<action name="v_view_dynamic_focus_in" onPress="1" keyboard="mwheel_up"/>
<action name="v_view_dynamic_focus_out" onPress="1" keyboard="mwheel_down"/>
<action name="v_view_dynamic_focus_toggle" onPress="1" xboxpad="xi_thumbr" joystick="js1_button11"/>
<action name="v_view_track_target" onPress="1" onRelease="1" keyboard="lctrl+tab" xboxpad="" joystick=""/>
<!-- Input options -->
<options>
<!--<option sensitivity="0.0015" sensitivity_cvar="cl_sensitivity">
<optiondata input="maxis_y" invert_cvar="cl_invertMouse" />
<optiondata input="maxis_x" />
</option>-->
<option sensitivity_cvar="v_gamepadAimSensitivity" nonlinearity_cvar="v_gamepadAimNonLinearity">
<optiondata input="xi_thumbrx" action="v_view_aim_yaw" />
<optiondata input="xi_thumbry" action="v_view_aim_pitch" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_movement" version="10">
<!-- Action map for a spaceship piloting -->
<!-- IFCS (requires avionics) -->
<action name="v_pitch_up" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch_down" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch" xboxpad="xi_taxisly" joystick="js1_y"/>
<action name="v_pitch_mouse" keyboard="maxis_y"/>
<action name="v_yaw_left" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw_right" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw" xboxpad="xi_taxislx" joystick="js1_rotz"/>
<action name="v_yaw_mouse" keyboard="maxis_x"/>
<action name="v_toggle_relative_mouse_mode" onPress="1" onRelease="1" keyboard="lctrl+f" xboxpad="" joystick=""/>
<action name="v_roll_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick=""/>
<action name="v_roll_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick=""/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="js1_x"/>
<action name="v_throttle_toggle_minmax" onPress="1" keyboard="backspace" xboxpad="" joystick="" />
<action name="v_throttle_zero" onPress="1" keyboard="" joystick="" >
<xboxpad multiTap="2" input="xi_shoulderl" />
</action>
<action name="v_throttle_100" onPress="1" keyboard="" xboxpad="" joystick="jsx_reserved" />
<action name="v_throttle_up" onPress="1" onHold="1" onRelease="1" keyboard="w" xboxpad="xi_shoulderr" joystick="" />
<action name="v_throttle_down" onPress="1" onHold="1" onRelease="1" keyboard ="s" xboxpad="xi_shoulderl" joystick=""/>
<action name="v_throttle" keyboard="" xboxpad="" joystick="js1_throttlez" />
<action name="v_brake" onPress="1" onHold="1" onRelease="1" keyboard="space" xboxpad="xi_shoulderl+xi_shoulderr" joystick="jsx_reserved" />
<action name="v_target_match_vel" onPress="1" onRelease="1" keyboard="m" joystick="js1_button8" >
<xboxpad multiTap="2" input="xi_shoulderr" />
</action>
<!-- Advanced IFCS on (requires IFCS) -->
<action name="v_ifcs_toggle_vector_decoupling" onPress="1" onRelease="1" keyboard="capslock" xboxpad="xi_thumbl" joystick="jsx_reserved" />
<action name="v_strafe_up" onHold="1" onRelease="1" retriggerable="1" keyboard="e" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_down" onHold="1" onRelease="1" retriggerable="1" keyboard="q" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_vertical" xboxpad="xi_triggerl_btn+xi_taxisly" joystick="jsx_reserved" />
<action name="v_strafe_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_lateral" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="jsx_reserved" />
<action name="v_strafe_forward" onHold="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_shoulderr" joystick="jsx_reserved" />
<action name="v_strafe_back" onHold="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_shoulderl" joystick="jsx_reserved" />
<action name="v_strafe_longitudinal" joystick="jsx_reserved" />
<action name="v_newtonian_yaw" xboxpad="xi_taxislx" joystick="js1_x" />
<action name="v_newtonian_pitch" xboxpad="xi_taxisly" joystick="js1_y" />
<action name="v_newtonian_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_triggerl_btn+xi_shoulderl" joystick="jsx_reserved" />
<action name="v_ifcs_toggle_safety" onPress="1" onRelease="1" keyboard="lctrl+capslock" xboxpad="xi_triggerl_btn+xi_thumbl" joystick="jsx_reserved" />
<!-- Afterburner installed (requires IFCS) -->
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_b" joystick="js1_button7" />
<!-- Input options -->
<options>
<option invert_cvar="v_mouseInvert">
<optiondata input="maxis_y" />
</option>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<nonlinearity_curve>
<point in="0.5" out="0.15"/>
<point in="0.85" out="0.5"/>
</nonlinearity_curve>
<optiondata input="xi_taxislx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxislx" />
<optiondata input="xi_taxisly" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_taxisrx" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxisry" invert_cvar="v_gamepadInvert" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_targeting" version="4">
<!-- Action map for a spaceship targeting controls -->
<!-- Targeting computer controls (requires avionics) -->
<action name="v_target_toggle_computer_onoff" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_target_cycle_all_fwd" onPress="1" onRelease="1" keyboard="y" xboxpad="xi_dpad_up" joystick="js1_hat1_up"/>
<action name="v_target_cycle_all_back" onPress="1" onRelease="1" keyboard="lctrl+y" xboxpad="xi_dpad_down" joystick="js1_hat1_down"/>
<action name="v_target_cycle_friendly_fwd" onPress="1" onRelease="1" keyboard="h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_friendly_back" onPress="1" onRelease="1" keyboard="lctrl+h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_toggle_pinned_focused" onPress="1" onRelease="1" keyboard="g" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_target_missile_lock_focused" onPress="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
<!--Additional targeting computer controls (requires flight avionics) -->
<action name="v_target_cycle_hostile_fwd" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_dpad_right" joystick="js1_hat1_right"/>
<action name="v_target_cycle_hostile_back" onPress="1" onRelease="1" keyboard="lctrl+t" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_nearest_hostile" onPress="1" onRelease="1" keyboard="r" xboxpad="xi_dpad_left" joystick="js1_hat1_left"/>
<action name="v_target_nearest_landzone" onPress="1" onRelease="1" keyboard="n" xboxpad="" joystick=""/>
<action name="v_target_pin_reticule" onPress="1" onRelease="1" keyboard="lctrl+g" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_subsystem_fwd" onPress="1" onRelease="1" keyboard="b" xboxpad="" joystick=""/>
<action name="v_target_cycle_subsystem_back" onPress="1" onRelease="1" keyboard="lctrl+b" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_weapons" version="2">
<!-- Action map for a spaceship standard weapons controls -->
<!-- Weapons control (requires flight avionics) -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_x" joystick="js1_button2" />
<action name="v_attack1_group3" onPress="1" onRelease="1" onHold="1" keyboard="mouse4" xboxpad="xi_triggerl_btn+xi_x" joystick="js1_button3" />
<action name="v_attack1_group4" onPress="1" onRelease="1" onHold="1" keyboard="mouse5" xboxpad="xi_back+xi_x" joystick="js1_button4"/>
<action name="v_weapon_cycle_ammo_fwd" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_weapon_cycle_ammo_back" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_missiles" version="1">
<!-- Action map for a spaceship missiles -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" onRelease="1" keyboard="mwheel_up" xboxpad="" joystick="js1_button6" />
<action name="v_weapon_cycle_missile_back" onPress="1" onRelease="1" keyboard="mwheel_down" xboxpad="" joystick="" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="" xboxpad="xi_reserved" joystick="" />
<action name="v_weapon_launch_missile" onPress="1" onHold="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
</actionmap>
<actionmap name="spaceship_defensive" version="2">
<!-- Action map for a spaceship countermeasures and shields -->
<!-- Countermeasures installed (requires weapons control on) -->
<action name="v_weapon_launch_countermeasure" onPress="1" keyboard="z" xboxpad="xi_triggerl_btn+xi_y" joystick="js1_button5" />
<action name="v_weapon_cycle_countermeasure_fwd" onPress="1" keyboard="x" xboxpad="xi_reserved" joystick="js1_button8" />
<action name="v_weapon_cycle_countermeasure_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Shields control (requires flight avionics) -->
<action name="v_shield_toggle_generator_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_shield_power_up" onPress="1" keyboard="equal" xboxpad="" joystick=""/>
<action name="v_shield_power_down" onPress="1" keyboard="minus" xboxpad="" joystick=""/>
<action name="v_shield_power" keyboard="" xboxpad="" joystick=""/>
<!-- Shield management system installed -->
<action name="v_shield_boost_recharge" onPress="1" onRelease="1" keyboard="c" xboxpad="" joystick="js1_button12" />
<action name="v_shield_cycle_presets_fwd" onPress="1" keyboard="v" xboxpad="" joystick="js1_button9" />
<action name="v_shield_cycle_presets_back" onPress="1" keyboard="lctrl+v" xboxpad="" joystick="js1_button10" />
</actionmap>
<actionmap name="spaceship_auto_weapons" version="1">
<!-- Action map for a spaceship AI weapon controls -->
<!-- Automation support installed (requires weapons control on) -->
<action name="v_weapon_toggle_ai" onPress="1" keyboard="slash" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_radar" version="2">
<!-- Action map for a spaceship radar controls -->
<!-- Radar control (requires avionic) -->
<action name="v_radar_toggle_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_toggle_active_or_passive" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_fwd" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_zoom_fwd" onPress="1" keyboard="comma" xboxpad="" joystick="jsx_reserved" />
<action name="v_radar_cycle_zoom_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_fwd" onPress="1" keyboard="j" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_back" onPress="1" keyboard="k" xboxpad="" joystick=""/>
<action name="v_radar_toggle_view_focus" onPress="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_hud" version="1">
<!-- Action map for a spaceship HUD controls-->
<!-- HUD controls (general) -->
<action name="v_hud_cycle_mode_fwd" onPress="1" onRelease="1" keyboard="semicolon" xboxpad="" joystick=""/>
<action name="v_hud_cycle_mode_back" onPress="1" onRelease="1" keyboard="apostrophe" xboxpad="" joystick=""/>
<action name="v_hud_toggle_cursor_input" onHold="1" onRelease="1" holdTriggerDelay="0.25" holdRepeatDelay="-1" retriggerable="0" keyboard="tab" xboxpad="xi_start" joystick=""/>
<!-- HUD controls (quick keys) -->
<action name="v_hud_open_tab1" onPress="1" onRelease="1" keyboard="f1" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab2" onPress="1" onRelease="1" keyboard="f2" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab3" onPress="1" onRelease="1" keyboard="f3" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab4" onPress="1" onRelease="1" keyboard="f4" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab5" onPress="1" onRelease="1" keyboard="f5" xboxpad="" joystick=""/>
<action name="v_hud_open_tab6" onPress="1" onRelease="1" keyboard="f6" xboxpad="" joystick=""/>
<action name="v_hud_open_tab7" onPress="1" onRelease="1" keyboard="f7" xboxpad="" joystick=""/>
<action name="v_hud_open_tab8" onPress="1" onRelease="1" keyboard="f8" xboxpad="" joystick=""/>
<action name="v_hud_open_tab9" onPress="1" onRelease="1" keyboard="f9" xboxpad="" joystick=""/>
<action name="v_hud_open_tab10" onPress="1" onRelease="1" keyboard="f10" xboxpad="" joystick=""/>
<action name="v_hud_num_zero" onPress="1" onRelease="1" keyboard="np_0" xboxpad="" joystick=""/>
<action name="v_hud_num_del" onPress="1" onRelease="1" keyboard="np_period" xboxpad="" joystick=""/>
<action name="v_hud_num_1" onPress="1" onRelease="1" keyboard="np_1" xboxpad="" joystick=""/>
<action name="v_hud_num_2" onPress="1" onRelease="1" keyboard="np_2" xboxpad="" joystick=""/>
<action name="v_hud_num_3" onPress="1" onRelease="1" keyboard="np_3" xboxpad="" joystick=""/>
<action name="v_hud_num_4" onPress="1" onRelease="1" keyboard="np_4" xboxpad="" joystick=""/>
<action name="v_hud_num_5" onPress="1" onRelease="1" keyboard="np_5" xboxpad="" joystick=""/>
<action name="v_hud_num_6" onPress="1" onRelease="1" keyboard="np_6" xboxpad="" joystick=""/>
<action name="v_hud_num_7" onPress="1" onRelease="1" keyboard="np_7" xboxpad="" joystick=""/>
<action name="v_hud_num_8" onPress="1" onRelease="1" keyboard="np_8" xboxpad="" joystick=""/>
<action name="v_hud_num_9" onPress="1" onRelease="1" keyboard="np_9" xboxpad="" joystick=""/>
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_hud_toggle_maximised" onPress="1" onRelease="1" keyboard="f11" xboxpad="" joystick=""/>
<!-- HUD controls (interaction) -->
<action name="v_hud_confirm" onPress="1" onRelease="1" xboxpad="xi_triggerL_btn+xi_a" joystick="">
<keyboard>
<inputdata input="enter"/>
</keyboard>
</action>
<action name="v_hud_interact" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn" joystick=""/>
<action name="v_hud_cancel" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn+xi_b" joystick=""/>
<action name="v_hud_left_panel_up" onPress="1" onRelease="1" keyboard="up" xboxpad="xi_triggerl_btn+xi_dpad_up" joystick=""/>
<action name="v_hud_left_panel_down" onPress="1" onRelease="1" keyboard="down" xboxpad="xi_triggerl_btn+xi_dpad_down" joystick=""/>
<action name="v_hud_left_panel_left" onPress="1" onRelease="1" keyboard="left" xboxpad="xi_triggerl_btn+xi_dpad_left" joystick=""/>
<action name="v_hud_left_panel_right" onPress="1" onRelease="1" keyboard="right" xboxpad="xi_triggerl_btn+xi_dpad_right" joystick=""/>
<action name="v_hud_slash" onPress="1" onRelease="1" keyboard="np_divide" xboxpad="p" joystick=""/>
<action name="v_hud_star" onPress="1" onRelease="1" keyboard="np_multiply" xboxpad="" joystick=""/>
<action name="v_hud_minus" onPress="1" onRelease="1" keyboard="np_subtract" xboxpad="" joystick=""/>
<action name="v_hud_plus" onPress="1" onRelease="1" keyboard="np_add" xboxpad="" joystick=""/>
<!-- Comm system controls -->
<action name="v_comm_open_chat" onPress="1" onRelease="1" keyboard="backslash" xboxpad="" joystick=""/>
<action name="v_comm_show_chat" onPress="1" onRelease="1" keyboard="equals" xboxpad="" joystick=""/>
<action name="v_comm_open_precanned" onPress="1" onRelease="1" keyboard="lctrl+backslash" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_1" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_2" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_3" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_4" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_5" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="zero_gravity_general" version="1">
<!-- general zero-gravity keys, applies to thruster and non-thruster movement -->
<action name="z_override_joystick" onPress="1" onRelease="1" retriggerable="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="z_roll" xboxpad="xi_triggerl_btn+xi_thumblx" ps3pad="pad_l2+pad_sticklx" joystick="js1_x"/>
</actionmap>
<actionmap name="gforce_tuning_mode" version="2">
<action name="v_gforce_save" onPress="1" xboxpad="xi_start"/>
<action name="v_gforce_lock" onPress="1" onRelease="1" xboxpad="xi_thumbr"/>
<action name="v_gforce_movey" xboxpad="xi_thumbly"/>
<action name="v_gforce_movex" xboxpad="xi_thumblx"/>
<action name="v_gforce_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_a"/>
<action name="v_gforce_mag_down" onPress="1" onHold="1" xboxpad="xi_shoulderl"/>
<action name="v_gforce_mag_up" onPress="1" onHold="1" xboxpad="xi_shoulderr"/>
<action name="v_gforce_body_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_b"/>
<action name="v_gforce_head_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_x"/>
<action name="v_gforce_toggle_menu" onPress="1" onRelease="1" onHold="" xboxpad="xi_y"/>
<action name="v_gforce_menu_down" onPress="1" xboxpad="xi_dpad_down"/>
<action name="v_gforce_menu_up" onPress="1" xboxpad="xi_dpad_up"/>
<action name="v_gforce_param_inc" onPress="1" onHold ="1" xboxpad="xi_dpad_left"/>
<action name="v_gforce_param_dec" onPress="1" onHold ="1" xboxpad="xi_dpad_right"/>
</actionmap>
<actionmap name="IFCS_controls" version="2">
<action name="v_IFCS_A" onPress="1" onRelease="1" onHold="" xboxpad="xi_a" keyboard="rctrl+a"/>
<action name="v_IFCS_B" onPress="1" onRelease="1" onHold="" xboxpad="xi_b" keyboard="rctrl+b"/>
<action name="v_IFCS_X" onPress="1" onRelease="1" onHold="" xboxpad="xi_x" keyboard="rctrl+x"/>
<action name="v_IFCS_Y" onPress="1" onRelease="1" onHold="" xboxpad="xi_y" keyboard="rctrl+y"/>
</actionmap>
<actionmap name="vehicle_gforce_tuning" version="2">
<!-- vehicle keys for gforce tuning mode -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
</actionmap>
</profile>

@ -0,0 +1,714 @@
<profile version="0">
<platforms>
<PC keyboard="1" xboxpad="1" ps3pad="1" joystick="1" />
<Xbox keyboard="1" xboxpad="1" ps3pad="0" />
<PS3 keyboard="1" xboxpad="0" ps3pad="1" />
</platforms>
<actiongroup action="v_attack1">
<action name="v_attack1_group1" />
<action name="v_attack1_group2" />
<action name="v_attack1_group3" />
</actiongroup>
<actionmap name="debug" version="22">
<!-- debug keys - move to debug when we can switch devmode-->
<action name="flymode" onPress="1" noModifiers="1" keyboard="f3" />
<action name="godmode" onPress="1" noModifiers="1" keyboard="f4" />
<action name="toggleaidebugdraw" onPress="1" noModifiers="1" keyboard="f11" />
<action name="ai_DebugCenterViewAgent" onPress="1" noModifiers="1" keyboard="np_divide" />
<action name="togglepdrawhelpers" onPress="1" noModifiers="1" keyboard="f10" />
<action name="ulammo" onPress="1" noModifiers="1" keyboard="" />
<!--<action name="debug" onPress="1" keyboard="7" />-->
<!--<action name="thirdperson" onPress="1" noModifiers="1" keyboard="f1" xboxpad="xi_dpad_up" ps3pad="pad_up"/>-->
<!-- debug keys - end -->
</actionmap>
<actionmap name="multiplayer" version="24">
<!-- multiplayer specific keys -->
<action name="self_destruct" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.5" keyboard="ralt+backspace" xboxpad="" joystick="" />
<action name="respawn" onPress="1" keyboard="x" xboxpad="xi_x" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="singleplayer" version="22">
<!-- singleplayer specific keys -->
<action name="save" onPress="1" consoleCmd="1" keyboard="f5" />
<action name="loadLastSave" onPress="1" consoleCmd="1" keyboard="f9" />
<action name="load" onPress="1" consoleCmd="1" keyboard="f8" />
<action name="retry" onPress="1" keyboard="x" xboxpad="xi_x" />
</actionmap>
<actionmap name="default" version="24">
<action name="hmd_toggle" onPress="1" keyboard="np_1" />
<action name="hmd_center" onPress="1" keyboard="np_2" />
<!-- default keys -->
<action name="screenshot" onPress="1" keyboard="f12" />
<action name="skip_cutscene" onPress="1" noModifiers="1" keyboard="space" />
<action name="cancel_cinematic" onPress="1" noModifiers="1" keyboard="space" xboxpad="xi_back"/>
<action name="cam_toggle_cinematic" onPress="1" keyboard="ralt+c" />
<action name="objectives" onPress="1" onRelease="1" noModifiers="0" keyboard="o" />
<!-- UI keys -->
<action name="ui_toggle_pause" onPress="1" xboxpad="xi_start" ps3pad="pad_start"/>
<action name="ui_start_pause" onPress="1" keyboard="escape"/>
<action name="ui_click" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross">
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<action name="ui_back" keyboard="escape" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="ui_up" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="up" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_up" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_up"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_down" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="down" />
<inputdata input="tab" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_down" />
<inputdata input="xi_thumbly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_down"/>
<inputdata input="pad_stickly" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickry" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_left" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="left" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_left" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_left"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="-0.5" analogCompareOp="LESSTHAN" />
</ps3pad>
</action>
<action name="ui_right" onPress="1" onHold="1" holdTriggerDelay="0.15" holdRepeatDelay="0.15" >
<keyboard>
<inputdata input="right" />
</keyboard>
<xboxpad>
<inputdata input="xi_dpad_right" />
<inputdata input="xi_thumblx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="xi_thumbrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</xboxpad>
<ps3pad>
<inputdata input="pad_right"/>
<inputdata input="pad_sticklx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
<inputdata input="pad_stickrx" useAnalogCompare="1" analogCompareVal="0.5" analogCompareOp="GREATERTHAN" />
</ps3pad>
</action>
<action name="ui_confirm" onPress="1" onRelease="1" xboxpad="xi_y" ps3pad="pad_triangle"/>
<action name="ui_reset" onPress="1" onRelease="1" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="ui_skip_video" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Trap alt+tab to stop actions on alt or tab from firing -->
<action name="windows_tabbing" keyboard="lalt+tab" />
</actionmap>
<actionmap name="player" version="24">
<!-- player keys -->
<action name="use" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_y" ps3pad="pad_triangle" />
<action name="attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1"/>
<action name="zoom" onPress="1" onRelease="1" keyboard="mouse2" />
<action name="xi_zoom" onPress="1" onRelease="1" onHold="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="firemode" onPress="1" keyboard="x" xboxpad="xi_dpad_down" ps3pad="pad_down"/>
<action name="cycle_spectator_mode" onPress="1" keyboard="space" />
<action name="prev_spectator_target" onPress="1" keyboard="left" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="next_spectator_target" onPress="1" keyboard="right" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="revive" onPress="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="moveleft" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="moveright" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="moveforward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" />
<action name="moveback" onPress="1" onRelease="1" retriggerable="1" keyboard="s" />
<action name="jump" onPress="1" onRelease="1" keyboard="space"/>
<action name="crouch" onPress="1" onRelease="1" retriggerable="1" keyboard="c"/>
<action name="prone" onPress="1" onHold="1" keyboard="z" />
<action name="sprint" onPress="1" onRelease="1" retriggerable="1" keyboard="lshift" xboxpad="xi_thumbl" ps3pad="pad_l1" />
<action name="special" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_thumbr" />
<action name="leanleft" onPress="1" onRelease="1" onHold="1" keyboard="q" />
<action name="leanright" onPress="1" onRelease="1" onHold="1" keyboard="e" />
<action name="reload" onPress="1" keyboard="r" xboxpad="xi_x" ps3pad="pad_square"/>
<action name="drop" onPress="1" onRelease="1" keyboard="j"/>
<action name="nextitem" onPress="1" keyboard="mwheel_up" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="previtem" onPress="1" keyboard="mwheel_down" />
<action name="small" onPress="1" keyboard="1" />
<action name="medium" onPress="1" keyboard="2" />
<action name="explosive" onPress="1" keyboard="3" />
<action name="suitmode" onPress="1" keyboard="4" />
<action name="utility" onPress="1" keyboard="5" />
<action name="handgrenade" onPress="1" keyboard="h" />
<action name="grenade" onPress="1" onRelease="1" keyboard="g" />
<action name="rotateyaw" keyboard="maxis_x" />
<action name="rotatepitch" keyboard="maxis_y" />
<action name="zoom_in" onPress="1" keyboard="mwheel_up" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="zoom_out" onPress="1" keyboard="mwheel_down" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="skip_dialogfragment" onRelease="1" noModifiers="1" xboxpad="xi_b" >
<keyboard>
<inputdata input="enter"/>
<inputdata input="np_enter"/>
</keyboard>
</action>
<!-- CIG BEGIN - ernst @ IllFonic : Adding magnetic boot support. -->
<action name="toggle_magnetic_boots" onPress="1" keyboard="b" xboxpad="xi_y" ps3pad="pad_triangle"/>
<!-- CIG END -->
<!-- CONSOLE SPECIFIC CONTROLS START -->
<action name="xi_movey" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="xi_movex" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="xi_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="xi_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="xi_jump" onPress="1" onRelease="1" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="xi_crouch" onPress="1" onRelease="1" xboxpad="xi_b" ps3pad="pad_circle"/>
<!-- CONSOLE SPECIFIC CONTROLS END -->
<action name="thirdperson" onPress="1" noModifiers="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="free_thirdperson_camera" onPress="1" onRelease="1" retriggerable="0" keyboard="g" xboxpad="xi_dpad_left"/>
<!-- HMD -->
<action name="hmd_rotateyaw" keyboard="HMD_Yaw" />
<action name="hmd_rotatepitch" keyboard="HMD_Pitch" />
<action name="hmd_rotateroll" keyboard="HMD_Roll" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="mobiglas" onPress="1" keyboard="p" />
<action name="mobiglas_entity_interaction" onPress="1" keyboard="i" />
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick=""/>
<!-- CIG END David Campbell BHVR -->
<!-- CIG BEGIN dhumphries @ Illfonic: Listen for eject hold to play cinematic camera -->
<action name="v_eject" onHold="1" keyboard="ralt+l"/>
<!-- CIG END -->
</actionmap>
<actionmap name="flycam">
<action name="flycam_movey" onPress="1" onRelease="1" keyboard="w" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="flycam_movey_neg" onPress="1" onRelease="1" keyboard="s"/>
<action name="flycam_movex" onPress="1" onRelease="1" keyboard="d" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
<action name="flycam_movex_neg" onPress="1" onRelease="1" keyboard="a"/>
<action name="flycam_rotateyaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx" />
<action name="flycam_rotatepitch" xboxpad="xi_thumbry" ps3pad="pad_stickry" />
<action name="flycam_rotateyaw_mouse" keyboard="maxis_x"/>
<action name="flycam_rotatepitch_mouse" keyboard="maxis_y" />
<action name="flycam_moveup" onPress="1" onRelease="1" keyboard="q" xboxpad="xi_triggerr" ps3pad="pad_r2" />
<action name="flycam_movedown" onPress="1" onRelease="1" keyboard="e" xboxpad="xi_triggerl" ps3pad="pad_l2" />
<action name="flycam_speedup" onPress="1" keyboard="up" xboxpad="xi_dpad_up" ps3pad="pad_up" />
<action name="flycam_speeddown" onPress="1" keyboard="down" xboxpad="xi_dpad_down" ps3pad="pad_down" />
<action name="flycam_turbo" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<action name="flycam_setpoint" onPress="1" keyboard="z" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="flycam_play" onPress="1" keyboard="x" xboxpad="xi_b" ps3pad="pad_circle"/>
<action name="flycam_clear" onPress="1" keyboard="c" xboxpad="xi_y" ps3pad="pad_triangle"/>
</actionmap>
<actionmap name="vehicle_general" version="26">
<!-- vehicle keys -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_exit" onPress="1" onRelease="1" onHold="1" xboxpad="xi_y" ps3pad="pad_triangle" keyboard="f"/>
<action name="v_horn" onPress="1" onRelease="1" keyboard="h" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_lights" onPress="1" keyboard="o" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" ps3pad="pad_up"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_left" ps3pad="pad_left"/>
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_right" ps3pad="pad_right"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
<!-- This needs to be in vehicle_general to allow the weapons mount to fire in the hangar -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
</actionmap>
<actionmap name="vehicle_driver" version="23">
<action name="v_yaw_left" onPress="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_move_forward" onPress="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_triggerr_btn" ps3pad="pad_r2"/>
<action name="v_move_back" onPress="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="v_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_roll_left" onPress="1" onRelease="1" keyboard="q" />
<action name="v_roll_right" onPress="1" onRelease="1" keyboard="t" />
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>
<action name="v_yaw" onPress="1" onRelease="1" xboxpad="xi_thumblx" ps3pad="pad_sticklx"/>
</actionmap>
<actionmap name="vehicle_gunner" version="23">
<action name="v_attack1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r1"/>
<action name="v_attack2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_triggerl_btn" ps3pad="pad_l1"/>
</actionmap>
<!-- STAR CITIZEN ACTION MAPS START -->
<actionmap name="spaceship" version="29">
<!-- NOTE These inputs are in ADDITION to the action map "vehicle_general" which is always initialized -->
<!-- Flight Control System Inputs, Keyboard -->
<action name="v_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="a" />
<action name="v_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="d" />
<action name="v_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="w"/>
<action name="v_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="s"/>
<action name="v_roll_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="q"/>
<action name="v_roll_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="e"/>
<action name="v_use_docking" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_a" ps3pad="pad_cross"/>
<!-- Head look Inputs, Keyboard -->
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="right"/>
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="left"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="up"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard="down"/>
<!-- Flight Control System Inputs, Gamepad/Joystick -->
<action name="v_pitch" xboxpad="xi_thumbly" ps3pad="pad_stickly" joystick="js1_y"/>
<action name="v_pitch_gamepad" xboxpad="xi_thumbly" ps3pad="pad_stickly"/>
<action name="v_pitch_flightstick" joystick="js1_y"/>
<action name="v_yaw" xboxpad="xi_thumblx" ps3pad="pad_sticklx" joystick="js1_rotz"/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_thumblx" joystick="js1_x"/>
<!--<action name="v_throttle_up" onPress="1" onHold="1" keyboard="equals" xboxpad="xi_shoulderr" ps3pad="pad_r1"/>
<action name="v_throttle_down" onPress="1" onHold="1" keyboard="minus" xboxpad="xi_shoulderl" ps3pad="pad_l1"/>-->
<action name="v_throttle" joystick="js1_throttlez"/>
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_a" ps3pad="pad_cross" />
<action name="v_brake" onPress="1" onRelease="1" onHold="1" keyboard="space" xboxpad="xi_b" ps3pad="pad_circle" />
<!-- Camera views Inputs -->
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_thumbr" ps3pad="pad_r3"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_triggerl_btn" joystick=""/>
<!-- Weapon System Inputs -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" ps3pad="pad_r2" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_a" ps3pad="pad_cross" joystick="js1_button2" />
<action name="v_weapon_cycle_firemode_fwd" onPress="1" keyboard="f" />
<action name="v_weapon_cycle_ammo_fwd" onPress="1" keyboard="b" />
<action name="v_weapon_toggle_ai" onPress="1" keyboard="l" />
<!-- Missile Inputs -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" keyboard="n" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="m" xboxpad="xi_reserved" joystick=""/>
<action name="v_weapon_launch_missile" onPress="1" keyboard="mouse2" />
<!-- Lights -->
<!--
ju - moved to vehicle_default for buggy usage
<action name="v_lights" onPress="1" keyboard="o" />
-->
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- HMD -->
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw" />
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch" />
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Exit -->
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l"/>
<!-- Input options -->
<options>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata input="xi_thumblx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_thumblx" />
<optiondata input="xi_thumbly" action="v_pitch" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_thumbly" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" />
</option>
</options>
<!-- LEGACY -->
<options>
<option input="xboxpad" sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<optiondata action="v_pitch" invert_cvar="cl_invertControllerFlight" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
<option input="joystick" sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata action="v_pitch" />
<optiondata action="v_yaw" />
<optiondata action="v_roll" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_general" version="2">
<!-- Action map for a spaceship bits and pieces -->
<!-- Lights -->
<action name="v_toggle_cabin_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<action name="v_toggle_running_lights" onPress="1" keyboard="o" joystick="jsx_reserved" />
<!-- Power managements -->
<action name="v_power_cycle_preset_fwd" onPress="1" keyboard="u" xboxpad="" joystick="" />
<action name="v_power_cycle_preset_back" onPress="1" keyboard="i" xboxpad="" joystick="" />
<!-- Exit -->
<action name="v_exit" onPress="1" onRelease="1" onHold="1" keyboard="f" xboxpad="xi_a" joystick="" />
<action name="v_eject" onPress="1" onHold="1" keyboard="ralt+l" xboxpad="xi_triggerl_btn+xi_back" joystick="jsx_reserved" />
<!-- Debuging / Test Inputs -->
<action name="v_debug_1" onPress="1" onRelease="1" keyboard="" />
<!-- CIG BEGIN David Campbell BHVR -->
<action name="v_matchmaking_ui" onPress="1" keyboard="f12" />
<!-- CIG END David Campbell BHVR -->
</actionmap>
<actionmap name="spaceship_view" version="15">
<!-- Camera view -->
<action name="v_view_yaw_left" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_left"/>
<action name="v_view_yaw_right" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_right"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_aim_yaw" xboxpad="xi_thumbrx" joystick="jsx_reserved"/>
<action name="v_view_yaw_toggled_mouse" keyboard="maxis_x"/>
<action name="v_view_yaw_absolute" keyboard="HMD_Yaw"/>
<action name="v_view_pitch_up" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_down"/>
<action name="v_view_pitch_down" onPress="1" onHold ="1" onRelease="1" retriggerable="1" keyboard=" " joystick="js1_hat2_up"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_aim_pitch" xboxpad="xi_thumbry" joystick="jsx_reserved"/>
<action name="v_view_pitch_toggled_mouse" keyboard="maxis_y"/>
<action name="v_view_pitch_absolute" keyboard="HMD_Pitch"/>
<action name="v_view_roll_absolute" keyboard="HMD_Roll" />
<action name="v_view_cycle_fwd" onPress="1" keyboard="insert" xboxpad="xi_triggerl_btn+xi_thumbr" joystick="js1_button6"/>
<action name="v_view_cycle_internal_fwd" onPress="1" keyboard="home" xboxpad="" joystick=""/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="tab" xboxpad="xi_triggerl_btn" joystick="jsx_reserved"/>
<action name="v_view_mode" onPress="1" onRelease="1" keyboard="pgup" xboxpad="xi_thumbr" joystick="jsx_reserved"/>
<action name="v_view_zoom_in" onPress="1" onHold ="1" keyboard="mwheel_up" xboxpad="xi_dpad_up" joystick="js1_hat1_up" />
<action name="v_view_zoom_out" onPress="1" onHold ="1" keyboard="mwheel_down" xboxpad="xi_dpad_down" joystick="js1_hat1_down" />
<action name="v_view_interact" onPress="1" onRelease="1" keyboard="f" xboxpad="xi_a" joystick=""/>
<action name="v_view_toggle_mouse" onRelease="1" keyboard="tab" releaseTriggerThreshold="0.25"/>
<action name="v_view_dynamic_focus_in" onPress="1" keyboard="mwheel_up"/>
<action name="v_view_dynamic_focus_out" onPress="1" keyboard="mwheel_down"/>
<action name="v_view_dynamic_focus_toggle" onPress="1" xboxpad="xi_thumbr" joystick="js1_button11"/>
<action name="v_view_track_target" onPress="1" onRelease="1" keyboard="lctrl+tab" xboxpad="" joystick=""/>
<!-- Input options -->
<options>
<!--<option sensitivity="0.0015" sensitivity_cvar="cl_sensitivity">
<optiondata input="maxis_y" invert_cvar="cl_invertMouse" />
<optiondata input="maxis_x" />
</option>-->
<option sensitivity_cvar="v_gamepadAimSensitivity" nonlinearity_cvar="v_gamepadAimNonLinearity">
<optiondata input="xi_thumbrx" action="v_view_aim_yaw" />
<optiondata input="xi_thumbry" action="v_view_aim_pitch" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_movement" version="10">
<!-- Action map for a spaceship piloting -->
<!-- IFCS (requires avionics) -->
<action name="v_pitch_up" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch_down" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick=""/>
<action name="v_pitch" xboxpad="xi_taxisly" joystick="js1_y"/>
<action name="v_pitch_mouse" keyboard="maxis_y"/>
<action name="v_yaw_left" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw_right" onHold="1" onRelease="1" retriggerable="1" keyboard=" " xboxpad="" joystick="jsx_reserved" />
<action name="v_yaw" xboxpad="xi_taxislx" joystick="js1_rotz"/>
<action name="v_yaw_mouse" keyboard="maxis_x"/>
<action name="v_toggle_relative_mouse_mode" onPress="1" onRelease="1" keyboard="lctrl+f" xboxpad="" joystick=""/>
<action name="v_roll_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick=""/>
<action name="v_roll_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick=""/>
<action name="v_roll" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="js1_x"/>
<action name="v_throttle_toggle_minmax" onPress="1" keyboard="backspace" xboxpad="" joystick="" />
<action name="v_throttle_zero" onPress="1" keyboard="" joystick="" >
<xboxpad multiTap="2" input="xi_shoulderl" />
</action>
<action name="v_throttle_100" onPress="1" keyboard="" xboxpad="" joystick="jsx_reserved" />
<action name="v_throttle_up" onPress="1" onHold="1" onRelease="1" keyboard="w" xboxpad="xi_shoulderr" joystick="" />
<action name="v_throttle_down" onPress="1" onHold="1" onRelease="1" keyboard ="s" xboxpad="xi_shoulderl" joystick=""/>
<action name="v_throttle" keyboard="" xboxpad="" joystick="js1_throttlez" />
<action name="v_brake" onPress="1" onHold="1" onRelease="1" keyboard="space" xboxpad="xi_shoulderl+xi_shoulderr" joystick="jsx_reserved" />
<action name="v_target_match_vel" onPress="1" onRelease="1" keyboard="m" joystick="js1_button8" >
<xboxpad multiTap="2" input="xi_shoulderr" />
</action>
<!-- Advanced IFCS on (requires IFCS) -->
<action name="v_ifcs_toggle_vector_decoupling" onPress="1" onRelease="1" keyboard="capslock" xboxpad="xi_thumbl" joystick="jsx_reserved" />
<action name="v_strafe_up" onHold="1" onRelease="1" retriggerable="1" keyboard="e" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_down" onHold="1" onRelease="1" retriggerable="1" keyboard="q" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_vertical" xboxpad="xi_triggerl_btn+xi_taxisly" joystick="jsx_reserved" />
<action name="v_strafe_left" onHold="1" onRelease="1" retriggerable="1" keyboard="a" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_right" onHold="1" onRelease="1" retriggerable="1" keyboard="d" xboxpad="" joystick="jsx_reserved" />
<action name="v_strafe_lateral" xboxpad="xi_triggerl_btn+xi_taxislx" joystick="jsx_reserved" />
<action name="v_strafe_forward" onHold="1" onRelease="1" retriggerable="1" keyboard="w" xboxpad="xi_shoulderr" joystick="jsx_reserved" />
<action name="v_strafe_back" onHold="1" onRelease="1" retriggerable="1" keyboard="s" xboxpad="xi_shoulderl" joystick="jsx_reserved" />
<action name="v_strafe_longitudinal" joystick="jsx_reserved" />
<action name="v_newtonian_yaw" xboxpad="xi_taxislx" joystick="js1_x" />
<action name="v_newtonian_pitch" xboxpad="xi_taxisly" joystick="js1_y" />
<action name="v_newtonian_brake" onPress="1" onRelease="1" keyboard="space" xboxpad="xi_triggerl_btn+xi_shoulderl" joystick="jsx_reserved" />
<action name="v_ifcs_toggle_safety" onPress="1" onRelease="1" keyboard="lctrl+capslock" xboxpad="xi_triggerl_btn+xi_thumbl" joystick="jsx_reserved" />
<!-- Afterburner installed (requires IFCS) -->
<action name="v_afterburner" onPress="1" onRelease="1" onHold="1" keyboard="lshift" xboxpad="xi_b" joystick="js1_button7" />
<!-- Input options -->
<options>
<option invert_cvar="v_mouseInvert">
<optiondata input="maxis_y" />
</option>
<option sensitivity_cvar="v_gamepadSensitivity" nonlinearity_cvar="v_gamepadNonLinearity">
<nonlinearity_curve>
<point in="0.5" out="0.15"/>
<point in="0.85" out="0.5"/>
</nonlinearity_curve>
<optiondata input="xi_taxislx" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxislx" />
<optiondata input="xi_taxisly" invert_cvar="v_gamepadInvert" />
<optiondata input="xi_taxisrx" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="xi_taxisry" invert_cvar="v_gamepadInvert" />
</option>
<option sensitivity_cvar="v_joystickSensitivity" nonlinearity_cvar="v_joystickNonLinearity">
<optiondata input="js1_x" />
<optiondata input="js1_y" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_y" />
</option>
<option sensitivity_cvar="v_joystickTwistSensitivity" nonlinearity_cvar="v_joystickTwistNonLinearity">
<optiondata input="js1_rotz" action="v_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" action="v_newtonian_yaw" invert_cvar="cl_invertYaw" />
<optiondata input="js1_rotz" />
</option>
</options>
</actionmap>
<actionmap name="spaceship_targeting" version="4">
<!-- Action map for a spaceship targeting controls -->
<!-- Targeting computer controls (requires avionics) -->
<action name="v_target_toggle_computer_onoff" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_target_cycle_all_fwd" onPress="1" onRelease="1" keyboard="y" xboxpad="xi_dpad_up" joystick="js1_hat1_up"/>
<action name="v_target_cycle_all_back" onPress="1" onRelease="1" keyboard="lctrl+y" xboxpad="xi_dpad_down" joystick="js1_hat1_down"/>
<action name="v_target_cycle_friendly_fwd" onPress="1" onRelease="1" keyboard="h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_friendly_back" onPress="1" onRelease="1" keyboard="lctrl+h" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_toggle_pinned_focused" onPress="1" onRelease="1" keyboard="g" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_target_missile_lock_focused" onPress="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
<!--Additional targeting computer controls (requires flight avionics) -->
<action name="v_target_cycle_hostile_fwd" onPress="1" onRelease="1" keyboard="t" xboxpad="xi_dpad_right" joystick="js1_hat1_right"/>
<action name="v_target_cycle_hostile_back" onPress="1" onRelease="1" keyboard="lctrl+t" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_nearest_hostile" onPress="1" onRelease="1" keyboard="r" xboxpad="xi_dpad_left" joystick="js1_hat1_left"/>
<action name="v_target_nearest_landzone" onPress="1" onRelease="1" keyboard="n" xboxpad="" joystick=""/>
<action name="v_target_pin_reticule" onPress="1" onRelease="1" keyboard="lctrl+g" xboxpad="" joystick="jsx_reserved" />
<action name="v_target_cycle_subsystem_fwd" onPress="1" onRelease="1" keyboard="b" xboxpad="" joystick=""/>
<action name="v_target_cycle_subsystem_back" onPress="1" onRelease="1" keyboard="lctrl+b" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_weapons" version="2">
<!-- Action map for a spaceship standard weapons controls -->
<!-- Weapons control (requires flight avionics) -->
<action name="v_attack1_group1" onPress="1" onRelease="1" onHold="1" keyboard="mouse1" xboxpad="xi_triggerr_btn" joystick="js1_button1" />
<action name="v_attack1_group2" onPress="1" onRelease="1" onHold="1" keyboard="mouse2" xboxpad="xi_x" joystick="js1_button2" />
<action name="v_attack1_group3" onPress="1" onRelease="1" onHold="1" keyboard="mouse4" xboxpad="xi_triggerl_btn+xi_x" joystick="js1_button3" />
<action name="v_attack1_group4" onPress="1" onRelease="1" onHold="1" keyboard="mouse5" xboxpad="xi_back+xi_x" joystick="js1_button4"/>
<action name="v_weapon_cycle_ammo_fwd" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_weapon_cycle_ammo_back" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_missiles" version="1">
<!-- Action map for a spaceship missiles -->
<action name="v_weapon_cycle_missile_fwd" onPress="1" onRelease="1" keyboard="mwheel_up" xboxpad="" joystick="js1_button6" />
<action name="v_weapon_cycle_missile_back" onPress="1" onRelease="1" keyboard="mwheel_down" xboxpad="" joystick="" />
<action name="v_weapon_toggle_arm_missile" onPress="1" onHold="1" holdRepeatDelay="-1" holdTriggerDelay="0.4" onRelease="1" keyboard="" xboxpad="xi_reserved" joystick="" />
<action name="v_weapon_launch_missile" onPress="1" onHold="1" onRelease="1" keyboard="mouse3" xboxpad="xi_y" joystick="js1_button4" />
</actionmap>
<actionmap name="spaceship_defensive" version="2">
<!-- Action map for a spaceship countermeasures and shields -->
<!-- Countermeasures installed (requires weapons control on) -->
<action name="v_weapon_launch_countermeasure" onPress="1" keyboard="z" xboxpad="xi_triggerl_btn+xi_y" joystick="js1_button5" />
<action name="v_weapon_cycle_countermeasure_fwd" onPress="1" keyboard="x" xboxpad="xi_reserved" joystick="js1_button8" />
<action name="v_weapon_cycle_countermeasure_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<!-- Shields -->
<action name="v_shield_raise_level_forward" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_8"/>
<action name="v_shield_raise_level_back" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_2"/>
<action name="v_shield_raise_level_left" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_4"/>
<action name="v_shield_raise_level_right" onPress="1" onRelease="1" onHold="1" keyboard="rctrl+np_6"/>
<action name="v_shield_reset_level" onPress="0" onRelease="1" onHold="0" keyboard="rctrl+np_5"/>
<!-- Shields control (requires flight avionics) -->
<action name="v_shield_toggle_generator_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_shield_power_up" onPress="1" keyboard="equal" xboxpad="" joystick=""/>
<action name="v_shield_power_down" onPress="1" keyboard="minus" xboxpad="" joystick=""/>
<action name="v_shield_power" keyboard="" xboxpad="" joystick=""/>
<!-- Shield management system installed -->
<action name="v_shield_boost_recharge" onPress="1" onRelease="1" keyboard="c" xboxpad="" joystick="js1_button12" />
<action name="v_shield_cycle_presets_fwd" onPress="1" keyboard="v" xboxpad="" joystick="js1_button9" />
<action name="v_shield_cycle_presets_back" onPress="1" keyboard="lctrl+v" xboxpad="" joystick="js1_button10" />
</actionmap>
<actionmap name="spaceship_auto_weapons" version="1">
<!-- Action map for a spaceship AI weapon controls -->
<!-- Automation support installed (requires weapons control on) -->
<action name="v_weapon_toggle_ai" onPress="1" keyboard="slash" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_radar" version="2">
<!-- Action map for a spaceship radar controls -->
<!-- Radar control (requires avionic) -->
<action name="v_radar_toggle_onoff" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_toggle_active_or_passive" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_fwd" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_mode_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_zoom_fwd" onPress="1" keyboard="comma" xboxpad="" joystick="jsx_reserved" />
<action name="v_radar_cycle_zoom_back" onPress="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_fwd" onPress="1" keyboard="j" xboxpad="" joystick=""/>
<action name="v_radar_cycle_focus_back" onPress="1" keyboard="k" xboxpad="" joystick=""/>
<action name="v_radar_toggle_view_focus" onPress="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="spaceship_hud" version="1">
<!-- Action map for a spaceship HUD controls-->
<!-- HUD controls (general) -->
<action name="v_hud_cycle_mode_fwd" onPress="1" onRelease="1" keyboard="semicolon" xboxpad="" joystick=""/>
<action name="v_hud_cycle_mode_back" onPress="1" onRelease="1" keyboard="apostrophe" xboxpad="" joystick=""/>
<action name="v_hud_toggle_cursor_input" onHold="1" onRelease="1" holdTriggerDelay="0.25" holdRepeatDelay="-1" retriggerable="0" keyboard="tab" xboxpad="xi_start" joystick=""/>
<!-- HUD controls (quick keys) -->
<action name="v_hud_open_tab1" onPress="1" onRelease="1" keyboard="f1" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab2" onPress="1" onRelease="1" keyboard="f2" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab3" onPress="1" onRelease="1" keyboard="f3" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab4" onPress="1" onRelease="1" keyboard="f4" xboxpad="" joystick="jsx_reserved" />
<action name="v_hud_open_tab5" onPress="1" onRelease="1" keyboard="f5" xboxpad="" joystick=""/>
<action name="v_hud_open_tab6" onPress="1" onRelease="1" keyboard="f6" xboxpad="" joystick=""/>
<action name="v_hud_open_tab7" onPress="1" onRelease="1" keyboard="f7" xboxpad="" joystick=""/>
<action name="v_hud_open_tab8" onPress="1" onRelease="1" keyboard="f8" xboxpad="" joystick=""/>
<action name="v_hud_open_tab9" onPress="1" onRelease="1" keyboard="f9" xboxpad="" joystick=""/>
<action name="v_hud_open_tab10" onPress="1" onRelease="1" keyboard="f10" xboxpad="" joystick=""/>
<action name="v_hud_num_zero" onPress="1" onRelease="1" keyboard="np_0" xboxpad="" joystick=""/>
<action name="v_hud_num_del" onPress="1" onRelease="1" keyboard="np_period" xboxpad="" joystick=""/>
<action name="v_hud_num_1" onPress="1" onRelease="1" keyboard="np_1" xboxpad="" joystick=""/>
<action name="v_hud_num_2" onPress="1" onRelease="1" keyboard="np_2" xboxpad="" joystick=""/>
<action name="v_hud_num_3" onPress="1" onRelease="1" keyboard="np_3" xboxpad="" joystick=""/>
<action name="v_hud_num_4" onPress="1" onRelease="1" keyboard="np_4" xboxpad="" joystick=""/>
<action name="v_hud_num_5" onPress="1" onRelease="1" keyboard="np_5" xboxpad="" joystick=""/>
<action name="v_hud_num_6" onPress="1" onRelease="1" keyboard="np_6" xboxpad="" joystick=""/>
<action name="v_hud_num_7" onPress="1" onRelease="1" keyboard="np_7" xboxpad="" joystick=""/>
<action name="v_hud_num_8" onPress="1" onRelease="1" keyboard="np_8" xboxpad="" joystick=""/>
<action name="v_hud_num_9" onPress="1" onRelease="1" keyboard="np_9" xboxpad="" joystick=""/>
<action name="v_hud_open_scoreboard" onPress="1" onRelease="1" keyboard="lalt" xboxpad="xi_reserved" joystick="jsx_reserved" />
<action name="v_hud_toggle_maximised" onPress="1" onRelease="1" keyboard="f11" xboxpad="" joystick=""/>
<!-- HUD controls (interaction) -->
<action name="v_hud_confirm" onPress="1" onRelease="1" xboxpad="xi_triggerL_btn+xi_a" joystick="">
<keyboard>
<inputdata input="enter"/>
</keyboard>
</action>
<action name="v_hud_interact" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn" joystick=""/>
<action name="v_hud_cancel" onPress="1" onRelease="1" keyboard="" xboxpad="xi_triggerl_btn+xi_b" joystick=""/>
<action name="v_hud_left_panel_up" onPress="1" onRelease="1" keyboard="up" xboxpad="xi_triggerl_btn+xi_dpad_up" joystick=""/>
<action name="v_hud_left_panel_down" onPress="1" onRelease="1" keyboard="down" xboxpad="xi_triggerl_btn+xi_dpad_down" joystick=""/>
<action name="v_hud_left_panel_left" onPress="1" onRelease="1" keyboard="left" xboxpad="xi_triggerl_btn+xi_dpad_left" joystick=""/>
<action name="v_hud_left_panel_right" onPress="1" onRelease="1" keyboard="right" xboxpad="xi_triggerl_btn+xi_dpad_right" joystick=""/>
<action name="v_hud_slash" onPress="1" onRelease="1" keyboard="np_divide" xboxpad="p" joystick=""/>
<action name="v_hud_star" onPress="1" onRelease="1" keyboard="np_multiply" xboxpad="" joystick=""/>
<action name="v_hud_minus" onPress="1" onRelease="1" keyboard="np_subtract" xboxpad="" joystick=""/>
<action name="v_hud_plus" onPress="1" onRelease="1" keyboard="np_add" xboxpad="" joystick=""/>
<!-- Comm system controls -->
<action name="v_comm_open_chat" onPress="1" onRelease="1" keyboard="backslash" xboxpad="" joystick=""/>
<action name="v_comm_show_chat" onPress="1" onRelease="1" keyboard="equals" xboxpad="" joystick=""/>
<action name="v_comm_open_precanned" onPress="1" onRelease="1" keyboard="lctrl+backslash" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_1" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_2" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_3" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_4" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
<action name="v_comm_select_precanned_5" onPress="1" onRelease="1" keyboard="" xboxpad="" joystick=""/>
</actionmap>
<actionmap name="zero_gravity_general" version="1">
<!-- general zero-gravity keys, applies to thruster and non-thruster movement -->
<action name="z_override_joystick" onPress="1" onRelease="1" retriggerable="1" xboxpad="xi_triggerl_btn" ps3pad="pad_l2"/>
<action name="z_roll" xboxpad="xi_triggerl_btn+xi_thumblx" ps3pad="pad_l2+pad_sticklx" joystick="js1_x"/>
</actionmap>
<actionmap name="gforce_tuning_mode" version="2">
<action name="v_gforce_save" onPress="1" xboxpad="xi_start"/>
<action name="v_gforce_lock" onPress="1" onRelease="1" xboxpad="xi_thumbr"/>
<action name="v_gforce_movey" xboxpad="xi_thumbly"/>
<action name="v_gforce_movex" xboxpad="xi_thumblx"/>
<action name="v_gforce_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_a"/>
<action name="v_gforce_mag_down" onPress="1" onHold="1" xboxpad="xi_shoulderl"/>
<action name="v_gforce_mag_up" onPress="1" onHold="1" xboxpad="xi_shoulderr"/>
<action name="v_gforce_body_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_b"/>
<action name="v_gforce_head_toggle" onPress="1" onRelease="1" onHold="" xboxpad="xi_x"/>
<action name="v_gforce_toggle_menu" onPress="1" onRelease="1" onHold="" xboxpad="xi_y"/>
<action name="v_gforce_menu_down" onPress="1" xboxpad="xi_dpad_down"/>
<action name="v_gforce_menu_up" onPress="1" xboxpad="xi_dpad_up"/>
<action name="v_gforce_param_inc" onPress="1" onHold ="1" xboxpad="xi_dpad_left"/>
<action name="v_gforce_param_dec" onPress="1" onHold ="1" xboxpad="xi_dpad_right"/>
</actionmap>
<actionmap name="IFCS_controls" version="2">
<action name="v_IFCS_A" onPress="1" onRelease="1" onHold="" xboxpad="xi_a" keyboard="rctrl+a"/>
<action name="v_IFCS_B" onPress="1" onRelease="1" onHold="" xboxpad="xi_b" keyboard="rctrl+b"/>
<action name="v_IFCS_X" onPress="1" onRelease="1" onHold="" xboxpad="xi_x" keyboard="rctrl+x"/>
<action name="v_IFCS_Y" onPress="1" onRelease="1" onHold="" xboxpad="xi_y" keyboard="rctrl+y"/>
</actionmap>
<actionmap name="vehicle_gforce_tuning" version="2">
<!-- vehicle keys for gforce tuning mode -->
<action name="v_boost" onPress="1" onRelease="1" keyboard="lshift" xboxpad="xi_thumbr" ps3pad="pad_l1"/>
<action name="v_view_option" onPress="1" onRelease="1" keyboard="k" xboxpad="xi_thumbl" ps3pad="pad_l3"/>
<action name="v_view_yaw_mouse" keyboard="maxis_x"/>
<action name="v_view_pitch_mouse" keyboard="maxis_y"/>
<action name="v_view_yaw" xboxpad="xi_thumbrx" ps3pad="pad_stickrx"/>
<action name="v_view_pitch" xboxpad="xi_thumbry" ps3pad="pad_stickry"/>
<action name="v_enable_mouse_input" onPress="1" onRelease="0" retriggerable="0" keyboard="tab"/>
<action name="v_disable_mouse_input" onPress="0" onRelease="1" retriggerable="0" keyboard="tab"/>
<action name="v_target_cycle_all_fwd" onPress="0" onRelease="1" retriggerable="0" keyboard="lshift"/>
<action name="v_target_toggle_lock_selected" onPress="1" onHold="1" onRelease="1" retriggerable="0" keyboard="capslock"/>
</actionmap>
</profile>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,15 @@
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper-V2.csprojResolveAssemblyReference.cache
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper_V2.MainForm.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper_V2.UC_JoyPanel.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper_V2.Properties.Resources.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper-V2.csproj.GenerateResource.Cache
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SharpDX.DirectInput.dll
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SharpDX.dll
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SharpDX.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SharpDX.DirectInput.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\defaultProfile.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SCJMapper.exe.config
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SCJMapper.exe
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Debug\SCJMapper.pdb
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper.exe
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Debug\SCJMapper.pdb

Binary file not shown.

Binary file not shown.

@ -0,0 +1,14 @@
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\defaultProfile.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SharpDX.DirectInput.dll
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SharpDX.dll
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SharpDX.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SharpDX.DirectInput.xml
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper_V2.MainForm.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper_V2.UC_JoyPanel.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper_V2.Properties.Resources.resources
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper-V2.csproj.GenerateResource.Cache
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SCJMapper.exe.config
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SCJMapper.exe
D:\AA_DEVELOP\GitHub\SCJMapper-V2\bin\Release\SCJMapper.pdb
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper.exe
D:\AA_DEVELOP\GitHub\SCJMapper-V2\obj\x86\Release\SCJMapper.pdb

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save