Anyone else tried using a Steel Battalion controller?

I've had a Steel Battalion controller banging around in my loft for the last decade, and I keep meaning to use it for something cool with my PC.

With the coming of Elite Dangerous I figured its time had come.

Getting it set up is a bit of a pain, but there is a driver out there; (can't post links yet - search for 64 bit steel battalion)

I got it set up last weekend and was flying around in the combat tutorials with it; I was pleased to find out that the fact it doesn't have auto-centre on its main joystick wasn't a big problem, although it does mean you can drift a bit if you're not careful. The joystick on the left does auto-centre, but it only has one axis of movement - left and right.

Unfortunately the driver doesn't support the cool toggle switches on the left, possible because Windows only supports 32 buttons on a joystick; I'm not sure. It's a real shame; they'd be great for switching on landing gear etc.

One of the biggest problems is that the sticks themselves have very few buttons on; the right stick has three (one trigger and two face buttons) and the left stick has none. The little joystick on the left stick can click in, but again it's not supported by the driver. Also, although you can use the left stick for lateral thrusters etc, you can't use it for navigating UI menus, so I've not found a suitable system to do that yet. It may be possible with some external software in combination like GlovePIE or something like that.

So... basically I'd love to get this to work, but it's not quite there yet.


Has anyone else got the Steel Battalion controller working with ED?
 
I've had a Steel Battalion controller banging around in my loft for the last decade, and I keep meaning to use it for something cool with my PC.
...

Unfortunately the driver doesn't support the cool toggle switches on the left, possible because Windows only supports 32 buttons on a joystick; I'm not sure. It's a real shame; they'd be great for switching on landing gear etc.

One of the biggest problems is that the sticks themselves have very few buttons on; the right stick has three (one trigger and two face buttons) and the left stick has none. The little joystick on the left stick can click in, but again it's not supported by the driver. Also, although you can use the left stick for lateral thrusters etc, you can't use it for navigating UI menus, so I've not found a suitable system to do that yet. It may be possible with some external software in combination like GlovePIE or something like that.

So... basically I'd love to get this to work, but it's not quite there yet.


Has anyone else got the Steel Battalion controller working with ED?

Hi there -first post. New member.
I just bought this game because I finally managed to get my Steel Battalion controller working on Windows 8.1!

so... yes - i'm also using the controller with Elite. I just bought the game yesterday and i'm just trying to iron out the controller in the training missions...
The toggle switches do work. You need to edit the .cs config file that you load into SteelBattalion64. Just assign them to a keyboard key press.
They do function a bit weird though - they're not 'on' or 'off'. At least not in the .cs file i've cobbled together. There's quite a few people using SBC for MechWarrior Online and that's where i've been trying to learn from. Basically, the toggles seem to work by hitting the 'key' once every time you flip it up. Does nothing if you flip it down (i checked by testing in a Windows Notepad window). I really need to work out how to turn them into a fixed 'on' state to be really useful though. Right now, i'm flipping them up then immediately down and using them as a single key press.

The POV/stick on the left joystick does click and it is also supported by the driver. Use "ButtonEnum.LeftJoySightChange" and map it to a keypress. I've glued it to 'numlock' and then set numlock in Elite to activate Headlook mode. SO clicking the POV hat for me activates Headlook. You can use the little stick to navigate the menus too. Just do this in the control settings of Elite itself, rather than in the .cs file.

I've basically got a very minimal .cs file that activates and glues the left block toggles, and the same for the Comm5 button (which would be button 33 and therefore too many for vJoy to handle (max 32)), and initialises the various axes.
I know there's a way to increase the resolution from 255 to 32768, but I can't code in C (or any other language) so I don't understand what's going on to be able to replicate it. I've basically copied and pasted bits from other .cs files and tested each change with SteelBattalion64 before adding more lines... sloppy and hacktastic, but its working for me. ;)

I'm using the gear lever for throttle, the left stick for roll, the POV stick for lateral & vertical thrust, the right and middle pedal for forward-back thrust (which seem to be quite useful for dogfighting), the right stick for pitch and yaw, and for the life of me I can't remember what I set the left pedal axis to...

I've not found a use for the tuner dial, or how to get it to work... but haven't spent much time trying either until I can think of a worthwhile use for it.... maybe to manage to capacitors if i can work out how set the axis to use discrete positions for different toggled keys.

so... yes - got the SBC working but still trying to iron out the best config. I suppose that'll come as I learn the really critical functions of the game to map.
 
so...
I just found a great thread in the MWO forums:

Basically - a few folk on there are already using the SBC with ED and are doing so in a far more advanced way than me.
They've pasted their .cs file text, but I can't follow what they're doing because I'm utterly useless with coding.
Here's hoping they're on this forum too... maybe they can help us out.

I can't post the link because I'm too new here. I'll try and post the link when i've got the priveleges.
 
OK, I've got it working almost entirely.
I copied then modified a script posted by someone called Max Gordon across at the MWO forums. He modified his from two guys called HackNFly (who I think wrote the driver) and Von Pilsner (who made it work with MWO), as far as I can tell.
ALL credit goes to those guys. Absolute legends. Especially HackNFly, who's been helping folk out with this driver for a couple of years now.
Major kudos.

I've been messing around with various settings and methods and found that this works:
load vJoy and select all axes available, but leave POV blank, and set it to 32 buttons.
Load SteelBattalion64 and load your .cs file and start it.
Manually assign the axes in ED and some keys too. I've commented in the script as much as possible regarding what keys need to be set manually in ED. The others are glued to the default values from the Generic Joystick setting.

I prefer the lights on the controller to be lit all the time so that I can see them easily in the dark, so I altered the code a little.
It still does the cool function matrix effect of flashing up, down, left, and right when the lateral/vertical thrusters are fired.

Here's what I've got mapped:
Right block:
Right joystick - pitch/yaw
Trigger - primary fire
Lock on - secondary fire
Main weapon - hold to change function of POV hat to power divert: left (sys), right (weapon), up (engine)

Since the following button lights toggle on/off - useful indicator of the state:
Eject - FSD
Cockpit hatch - landing gear
Ignition - cargo
Start - hardpoints
MultiMon Open/close - Galaxy Map
MultiMonZoomin/out - ship lights
mode select - scanner focus

Lights always on:
MainMonIn - scanner range decrease
MainMonOut - scanner range increase

middle block - lights always on (except Comm5 (Esc))
Comm1 - Comm panel
Comm2 - prev hostile
Comm3 - highest threat
Comm4 - next hostile
Comm5 - Escape key

Lights always on (up, down, left, right go brighter on lateral/vertical thrust)
F1 - target panel focus
Tank Detach - select target ahead
FSS - system panel focus + interface focus UP
F2 - previous target + interface focus LEFT
Override - interface focus SELECT
Manipulator - next target +interface focus RIGHT
F3 - menu tab PREVIOUS
Night scope - Interface focus DOWN
LineColChange - menu tab NEXT

Lights always on:
Washing - divert power to system
Extinguisher - use shield cell
Chaff - deploy chaff
Main - target PREVIOUS subsystem
Sub - target NEXT subsystem
Magazine change - NEXT fire group

Left block:
rotation lever stick - rotate
POV Hat - thrust lateral/vertical (Alternate functions: power divert (hold MainWeapon), mouse look [direct mode] (toggle by clicking sightchange/POV)
Gear lever - throttle (forward only)

Pedals:
left pedal - engine boost
middle pedal - backward thrust
right pedal - forward thrust

The tuner dial does nothing. I can't think of anything that it would be mapped to anyway. Maybe zoom in the galaxy map? A bit pointless because all the axes required for that are covered by the other joystick axes.

Toggles - I can't work out how to get these to detect the two different states of the switch so for now they're just buttons that need to be flipped up then down to hit the keypress
Oxygen supply - silent running
FiltCtrl - throttle to zero - not working properly, maybe conflicted by gear lever throttle
VT-loc - jettison all cargo
buffer material - deploy heat sink
fuel flow rate - flight assist - Max Gordon included some code that's supposed to light up the buttons brighter/dimmer when FuelFlowRate is in on/off and had it mapped to ship lights key press, but it didn't seem to work on my system to I changed the mapping to flight assist. If anyone can work out the code then I'd love to have this working...

so... there you go. All the functions of the game mapped, with a couple of buttons that could have two functions spare.
I'll post the .cs file when I'm allowed to on this forum. I've left a posting over at MWO forum asking if its OK to post the script here. I'm sure its fine, but I'll hold off till I hear back. Those guys put so much work into this that I'd feel bad posting a script that I've just modified a little. They really should take every bit for credit for this.
 
OK, I've got it working almost entirely.
I copied then modified a script posted by someone called Max Gordon across at the MWO forums. He modified his from two guys called HackNFly (who I think wrote the driver) and Von Pilsner (who made it work with MWO), as far as I can tell.
ALL credit goes to those guys. Absolute legends. Especially HackNFly, who's been helping folk out with this driver for a couple of years now.
Major kudos.

I've been messing around with various settings and methods and found that this works:
load vJoy and select all axes available, but leave POV blank, and set it to 32 buttons.
Load SteelBattalion64 and load your .cs file and start it.
Manually assign the axes in ED and some keys too. I've commented in the script as much as possible regarding what keys need to be set manually in ED. The others are glued to the default values from the Generic Joystick setting.

I prefer the lights on the controller to be lit all the time so that I can see them easily in the dark, so I altered the code a little.
It still does the cool function matrix effect of flashing up, down, left, and right when the lateral/vertical thrusters are fired.

Here's what I've got mapped:
Right block:
Right joystick - pitch/yaw
Trigger - primary fire
Lock on - secondary fire
Main weapon - hold to change function of POV hat to power divert: left (sys), right (weapon), up (engine)

Since the following button lights toggle on/off - useful indicator of the state:
Eject - FSD
Cockpit hatch - landing gear
Ignition - cargo
Start - hardpoints
MultiMon Open/close - Galaxy Map
MultiMonZoomin/out - ship lights
mode select - scanner focus

Lights always on:
MainMonIn - scanner range decrease
MainMonOut - scanner range increase

middle block - lights always on (except Comm5 (Esc))
Comm1 - Comm panel
Comm2 - prev hostile
Comm3 - highest threat
Comm4 - next hostile
Comm5 - Escape key

Lights always on (up, down, left, right go brighter on lateral/vertical thrust)
F1 - target panel focus
Tank Detach - select target ahead
FSS - system panel focus + interface focus UP
F2 - previous target + interface focus LEFT
Override - interface focus SELECT
Manipulator - next target +interface focus RIGHT
F3 - menu tab PREVIOUS
Night scope - Interface focus DOWN
LineColChange - menu tab NEXT

Lights always on:
Washing - divert power to system
Extinguisher - use shield cell
Chaff - deploy chaff
Main - target PREVIOUS subsystem
Sub - target NEXT subsystem
Magazine change - NEXT fire group

Left block:
rotation lever stick - rotate
POV Hat - thrust lateral/vertical (Alternate functions: power divert (hold MainWeapon), mouse look [direct mode] (toggle by clicking sightchange/POV)
Gear lever - throttle (forward only)

Pedals:
left pedal - engine boost
middle pedal - backward thrust
right pedal - forward thrust

The tuner dial does nothing. I can't think of anything that it would be mapped to anyway. Maybe zoom in the galaxy map? A bit pointless because all the axes required for that are covered by the other joystick axes.

Toggles - I can't work out how to get these to detect the two different states of the switch so for now they're just buttons that need to be flipped up then down to hit the keypress
Oxygen supply - silent running
FiltCtrl - throttle to zero - not working properly, maybe conflicted by gear lever throttle
VT-loc - jettison all cargo
buffer material - deploy heat sink
fuel flow rate - flight assist - Max Gordon included some code that's supposed to light up the buttons brighter/dimmer when FuelFlowRate is in on/off and had it mapped to ship lights key press, but it didn't seem to work on my system to I changed the mapping to flight assist. If anyone can work out the code then I'd love to have this working...

so... there you go. All the functions of the game mapped, with a couple of buttons that could have two functions spare.
I'll post the .cs file when I'm allowed to on this forum. I've left a posting over at MWO forum asking if its OK to post the script here. I'm sure its fine, but I'll hold off till I hear back. Those guys put so much work into this that I'd feel bad posting a script that I've just modified a little. They really should take every bit for credit for this.

Would you happen to have a copy of that .CS file you would want to share? I've tried working with the code (I am not a coder by any means), and I didn't get that far past the simple.cs file with a few basic tweaks. I really want to try some more advanced stuff with the ED, as well as Star Citizen a d the X series.

I apologize if you already shared it somewhere else, I don't seem to see a link or anything
 
Wow, I hadn't realised anybody had replied to this thread! I'm certainly going to have to modify the .cs file for the thumbstick click and toggles, although I do find that because I okay with the oculus rift I find myself relying on voice commands more than buttons. I'll post any progress I make on here.

- - - - - Additional Content Posted / Auto Merge - - - - -

Oh, and thanks for all the info!
 
Hello there,

Hey CrackMouse,

Max Gordon here,

Good initiative, I just read your reply too late on the MWO foruums. Anyway, there is also another mod I made and put online here on the forums that will transform an android tablet into a functional ED keyboard:
I don't see why you couldn't use both, if you 32 buttons don't suffice.


So basically, yeah thanks to Hack N Fly I was able to make a decent CS file to use with the SBC controller:

Code:
using System;
using Microsoft.DirectX.DirectInput;
namespace SBC{
public class DynamicClass
{
SteelBattalionController controller;
bool currentResetValue;
bool lastResetValue;//used in assessing when to flip lights
vJoy joystick;
bool acquired;

const int refreshRate = 50;//number of milliseconds between call to mainLoop


	//this gets called once by main program
    public void Initialize()
    {
		controller = new SteelBattalionController();
		controller.Init(50);//50 is refresh rate in milliseconds
		//set all buttons by default to light up only when you press them down
		// Right Block
	
		// joystick
        controller.AddButtonKeyMapping(ButtonEnum.RightJoy  Fire, Microsoft.DirectX.DirectInput.Key.LeftControl, true); // fire primary weapon 
		controller.AddButtonKeyMapping(ButtonEnum.RightJoy  MainWeapon, Microsoft.DirectX.DirectInput.Key.RightControl,tru  e); // fire secondary weapon or next fire group
        controller.AddButtonKeyMapping(ButtonEnum.RightJoy  LockOn, Microsoft.DirectX.DirectInput.Key.Z, true); // mouselook view
        // buttons right
		controller.AddButtonKeyLightMapping(ButtonEnum.Eje  ct, false, 3, Microsoft.DirectX.DirectInput.Key.J, true); // frameshift drive
		controller.AddButtonKeyLightMapping(ButtonEnum.Coc  kpitHatch, false, 3, Microsoft.DirectX.DirectInput.Key.Insert, true); // Landing gear
        controller.AddButtonKeyLightMapping(ButtonEnum.Ign  ition, false, 3, Microsoft.DirectX.DirectInput.Key.Home, true); // cargo scoop
        controller.AddButtonKeyLightMapping(ButtonEnum.Sta  rt, false, 3, Microsoft.DirectX.DirectInput.Key.U, true); //deploy/stow hardpoints
		// buttons middle
		controller.AddButtonKeyLightMapping(ButtonEnum.Mul  tiMonOpenClose, false, 3, Microsoft.DirectX.DirectInput.Key.M, true);  // open galaxy map
        
		controller.AddButtonKeyLightMapping(ButtonEnum.Mul  tiMonMapZoomInOut, false, 3, Microsoft.DirectX.DirectInput.Key.D2, true); //Scanner Focus
        
		controller.AddButtonKeyLightMapping(ButtonEnum.Mul  tiMonModeSelect, false, 3, Microsoft.DirectX.DirectInput.Key.D3, true);
       
		controller.AddButtonKeyLightMapping(ButtonEnum.Mul  tiMonSubMonitor, false, 3, Microsoft.DirectX.DirectInput.Key.B, true);

		controller.AddButtonKeyLightMapping(ButtonEnum.Mai  nMonZoomIn, false, 3, Microsoft.DirectX.DirectInput.Key.PageDown, true);  // scanner zoom in
        controller.AddButtonKeyLightMapping(ButtonEnum.Mai  nMonZoomOut, false, 3, Microsoft.DirectX.DirectInput.Key.PageUp, true);   // scanner zoom out
	
	// Center Block
		
		// Function matrix
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionF1, false, 3, Microsoft.DirectX.DirectInput.Key.D1, true);  //Navigation screen (left)
        controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionTankDetach, false, 3, Microsoft.DirectX.DirectInput.Key.W, true); //go menu up
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionFSS, false, 3, Microsoft.DirectX.DirectInput.Key.D4, true); //System screen (right)
		
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionF2, false, 3, Microsoft.DirectX.DirectInput.Key.A, true); //go menu left
        controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionOverride, false, 3, Microsoft.DirectX.DirectInput.Key.Space, true); // menu select enter
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionManipulator, false, 3, Microsoft.DirectX.DirectInput.Key.D, true); // go menu right
		
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionF3, false, 3, Microsoft.DirectX.DirectInput.Key.Q, true);  // go previous menu tab
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionNightScope, false, 3, Microsoft.DirectX.DirectInput.Key.S, true); // go menu down
		controller.AddButtonKeyLightMapping(ButtonEnum.Fun  ctionLineColorChange, false, 3, Microsoft.DirectX.DirectInput.Key.E, true);  //go next menu tab
        
		// buttons bottom
		controller.AddButtonKeyLightMapping(ButtonEnum.Was  hing, false, 3, Microsoft.DirectX.DirectInput.Key.I, true);  // previous hostile
        controller.AddButtonKeyLightMapping(ButtonEnum.Ext  inguisher, false, 3, Microsoft.DirectX.DirectInput.Key.T, true); // target ahead
        controller.AddButtonKeyLightMapping(ButtonEnum.Cha  ff, false, 3, Microsoft.DirectX.DirectInput.Key.H, true); // next hostile
		controller.AddButtonKeyLightMapping(ButtonEnum.Wea  ponConMain, false, 3, Microsoft.DirectX.DirectInput.Key.K, true); // previous subsystem
        controller.AddButtonKeyLightMapping(ButtonEnum.Wea  ponConSub, false, 3, Microsoft.DirectX.DirectInput.Key.Y, true); // Next subsystem
		controller.AddButtonKeyLightMapping(ButtonEnum.Wea  ponConMagazine, false, 3, Microsoft.DirectX.DirectInput.Key.N, true); // next firegroup
		
		controller.AddButtonKeyLightMapping(ButtonEnum.Com  m1, false, 3, Microsoft.DirectX.DirectInput.Key.F1, true); //escape key
		controller.AddButtonKeyLightMapping(ButtonEnum.Com  m2, false, 3, Microsoft.DirectX.DirectInput.Key.F2, true);
		controller.AddButtonKeyLightMapping(ButtonEnum.Com  m3, false, 3, Microsoft.DirectX.DirectInput.Key.F3, true);
		controller.AddButtonKeyLightMapping(ButtonEnum.Com  m4, false, 3, Microsoft.DirectX.DirectInput.Key.F4, true);
		controller.AddButtonKeyLightMapping(ButtonEnum.Com  m5, false, 3, Microsoft.DirectX.DirectInput.Key.F5, true); 
		
	// Left Block	
		controller.AddButtonKeyMapping(ButtonEnum.ToggleBu  fferMaterial,  Microsoft.DirectX.DirectInput.Key.V, true); // fire heatsink
		controller.AddButtonKeyMapping(ButtonEnum.ToggleFi  lterControl,   Microsoft.DirectX.DirectInput.Key.Delete, true); // flight assist
		controller.AddButtonKeyMapping(ButtonEnum.ToggleOx  ygenSupply,    Microsoft.DirectX.DirectInput.Key.D0, true); // silent running 
		controller.AddButtonKeyMapping(ButtonEnum.ToggleFu  elFlowRate,  Microsoft.DirectX.DirectInput.Key.L, true);
		
		int litIntensity = 3;
		int baseLineIntensity = 7;
				for(int i=1;i<=32;i++)
				{		
		
					if (controller.GetButtonState(ButtonEnum.ToggleFuelFl  owRate))
						
						controller.SetLEDState((ControllerLEDEnum)(i), baseLineIntensity, true);
						                      
					else
						
						controller.SetLEDState((ControllerLEDEnum)(i), litIntensity, true);
						
				}
		
		
		
		
		
		
		/*
		int baseLineIntensity = 15;//just an average value for LED intensity
        //int emergencyLightIntensity = 15;//for stuff like eject,cockpit Hatch,Ignition, and Start
		int litIntensity = 10;
		
		for(int i=1;i<=32;i++)
		{
			 if ((bool)controller.GetButtonState(i + 1))
                                        controller.SetLEDState((ControllerLEDEnum)(i), litIntensity, false);
                                else
                                {
                                        if (controller.GetButtonState(ButtonEnum.ToggleFuelFl  owRate))
                                          controller.SetLEDState((ControllerLEDEnum)(i), baseLineIntensity, true);
                                        else
                                         controller.SetLEDState((ControllerLEDEnum)(i), 0, true);
                                }

		}
		*/
         //controller.AddButtonKeyLightMapping(ButtonEnum.Coc  kpitHatch, true, 10, Microsoft.DirectX.DirectInput.Key.A, true);//last true means if you hold down the button,		
		 joystick = new vJoy();
		 acquired = joystick.acquireVJD(1);
		 joystick.resetAll();//have to reset before we use it
	}
	
	//this is necessary, as main program calls this to know how often to call mainLoop
	public int getRefreshRate()
	{
		return refreshRate;
	}
	
	private uint getDegrees(double x,double y)
	{
		uint temp = (uint)(System.Math.Atan(y/x)* (180/Math.PI));
		if(x < 0)
			temp +=180;
		if(x > 0 && y < 0)
			temp += 360;
			
		temp += 90;//origin is vertical on POV not horizontal
			
		if(temp > 360)//by adding 90 we may have gone over 360
			temp -=360;
		
		temp*=100;
		
		if (temp > 35999)
			temp = 35999;
		if (temp < 0)
			temp = 0;
		return temp;
	}

	//this gets called once every refreshRate milliseconds by main program
	public void mainLoop()
	{
		
		joystick.setAxis(1,controller.AimingX,HID_USAGES.H  ID_USAGE_X);
		joystick.setAxis(1,controller.AimingY,HID_USAGES.H  ID_USAGE_Y);
		joystick.setAxis(1,(controller.RightPedal - controller.MiddlePedal),HID_USAGES.HID_USAGE_Z);//throttle
		joystick.setAxis(1,controller.RotationLever,HID_US  AGES.HID_USAGE_RZ);
		joystick.setAxis(1,controller.SightChangeX,HID_USA  GES.HID_USAGE_SL0);		
		joystick.setAxis(1,controller.SightChangeY,HID_USA  GES.HID_USAGE_RX);				
		joystick.setAxis(1,controller.LeftPedal,HID_USAGES  .HID_USAGE_RY);						
		joystick.setAxis(1,controller.GearLever,HID_USAGES  .HID_USAGE_SL1);
		joystick.setContPov(1,getDegrees(controller.SightC  hangeX,controller.SightChangeY),1);
		// comment from here to calibrate the axis in windows usb controller screen.
		if (controller.GetButtonState(ButtonEnum.RightJoyMain  Weapon))
				{
				
				int thumbstickDeadZone = 75;
				SBC.POVdirection lastDirection = controller.POVhat;
					// picks up the direction you are switching the POV or ...
					if (((Math.Abs(controller.SightChangeX) > thumbstickDeadZone) || (Math.Abs(controller.SightChangeY) > thumbstickDeadZone)))
					{
						if (Math.Abs(controller.SightChangeX) > Math.Abs(controller.SightChangeY))
							if (controller.SightChangeX < 0)
								controller.POVhat = SBC.POVdirection.LEFT;
							else
								controller.POVhat = SBC.POVdirection.RIGHT;
						else
							if (controller.SightChangeY < 0)
								controller.POVhat = SBC.POVdirection.DOWN;
						else
							controller.POVhat = SBC.POVdirection.UP;

					}
					else // ... centers it
					{
						controller.POVhat = SBC.POVdirection.CENTER;
					}
					// POWER DISTRIBUTION
						{
						switch (controller.POVhat)
							{
							case SBC.POVdirection.LEFT:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.Left);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Left);
								break;
							case SBC.POVdirection.RIGHT:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.Right);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Right);
								break;
							case SBC.POVdirection.DOWN:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.Up);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Up);
								break;
							case SBC.POVdirection.UP:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.Down);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Down);
								break;
							case SBC.POVdirection.CENTER:
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Up);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Right);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Left);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Down);
								break;
							}
						}
				}
        else
				{

				int thumbstickDeadZone = 75;
				SBC.POVdirection lastDirection = controller.POVhat;
				if (((Math.Abs(controller.SightChangeX) > thumbstickDeadZone) || (Math.Abs(controller.SightChangeY) > thumbstickDeadZone)))
					{
						if (Math.Abs(controller.SightChangeX) > Math.Abs(controller.SightChangeY))
							if (controller.SightChangeX < 0)
								controller.POVhat = SBC.POVdirection.LEFT;
							else
								controller.POVhat = SBC.POVdirection.RIGHT;
						else
							if (controller.SightChangeY < 0)
								controller.POVhat = SBC.POVdirection.DOWN;
						else
							controller.POVhat = SBC.POVdirection.UP;

					}
					else // ... centers it
					{
						controller.POVhat = SBC.POVdirection.CENTER;
					}
						{
				// LATERAL/VERTICAL THRUST
						switch (controller.POVhat)
						
							{
							
							case SBC.POVdirection.LEFT:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.Q);
									int LEDNum_LFT = (int)(ButtonEnum.FunctionF2) + 1;
									controller.SetLEDState((ControllerLEDEnum)(LEDNum_  LFT),15,true);
								break;
							case SBC.POVdirection.RIGHT:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.E);
									int LEDNum_RGT = (int)(ButtonEnum.FunctionManipulator) + 1;
									controller.SetLEDState((ControllerLEDEnum)(LEDNum_  RGT),15,true);
								break;
							case SBC.POVdirection.DOWN:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.R);
									int LEDNum_DWN = (int)(ButtonEnum.FunctionTankDetach) + 1;
									controller.SetLEDState((ControllerLEDEnum)(LEDNum_  DWN),15,true);
								break;
							case SBC.POVdirection.UP:
								controller.sendKeyDown(Microsoft.DirectX.DirectInp  ut.Key.F);
									int LEDNum_UP = (int)(ButtonEnum.FunctionNightScope) + 1;
									controller.SetLEDState((ControllerLEDEnum)(LEDNum_  UP),15,true);
								break;
							case SBC.POVdirection.CENTER:
								int LEDNum_Center = (int)(ButtonEnum.FunctionOverride) + 1;
								controller.SetLEDState((ControllerLEDEnum)(LEDNum_  Center),10,true);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.F);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.R);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.E);
								controller.sendKeyUp(Microsoft.DirectX.DirectInput  .Key.Q);
								int LEDNum_UP2 = (int)(ButtonEnum.FunctionNightScope) + 1;
								int LEDNum_DWN2 = (int)(ButtonEnum.FunctionTankDetach) + 1;
								int LEDNum_RGT2 = (int)(ButtonEnum.FunctionManipulator) + 1;
								int LEDNum_LFT2 = (int)(ButtonEnum.FunctionF2) + 1;
								controller.SetLEDState((ControllerLEDEnum)(LEDNum_  UP2),5,true);
								controller.SetLEDState((ControllerLEDEnum)(LEDNum_  DWN2),5,true);
								controller.SetLEDState((ControllerLEDEnum)(LEDNum_  RGT2),5,true);
								controller.SetLEDState((ControllerLEDEnum)(LEDNum_  LFT2),5,true);
								break;
							}
						}
				}
				
				/*
				if (controller.GetButtonState(ButtonEnum.ToggleFuelFl  owRate)) //ToggleFuelFlowRate turns on the lights
				{
				controller.AddButtonKeyMapping(ButtonEnum.ToggleFu  elFlowRate,    Microsoft.DirectX.DirectInput.Key.L, true);
				}
			else	//ToggleFuelFlowRate turns off the lights
				{
				controller.AddButtonKeyMapping(ButtonEnum.ToggleFu  elFlowRate,    Microsoft.DirectX.DirectInput.Key.L, false);
				}
				*/

        // toggle switching buttons
		/*
        if (controller.GetButtonState(ButtonEnum.ToggleFuelFl  owRate)) //ToggleFuelFlowRate to JoyFire
        {
            if (controller.GetButtonState(ButtonEnum.RightJoyFire  ))
                joystick.setButton(controller.GetButtonState(Butto  nEnum.RightJoyFire), 1, 5);
        }
        else
        {
            if (controller.GetButtonState(ButtonEnum.RightJoyFire  ))
            joystick.setButton(controller.GetButtonState(Butto  nEnum.RightJoyFire), 1, 1);
        }

        currentResetValue = controller.GetButtonState((int)ButtonEnum.ToggleVT  Location);
        if (currentResetValue != lastResetValue && currentResetValue)
        {
            controller.TestLEDs(1);//reset lights
        }
		*/
        lastResetValue = currentResetValue;


        //Toggles Management (toggle = 1 button mapp on key )
        //controller.AddButtonKeyLightMapping(ButtonEnum.Tog  gleFilterControl, true, 10, Microsoft.DirectX.DirectInput.Key.F1, true);
        //controller.AddButtonKeyLightMapping(ButtonEnum.Tog  gleOxygenSupply, true, 10, Microsoft.DirectX.DirectInput.Key.F2, true);

		//Toggles Management (toggle = 1 button mapp on key )
       // controller.AddButtonKeyMapping(ButtonEnum.ToggleFi  lterControl,Microsoft.DirectX.DirectInput.Key.F1, true);
       // controller.AddButtonKeyMapping(ButtonEnum.ToggleOx  ygenSupply, Microsoft.DirectX.DirectInput.Key.F2, true);
		
		joystick.sendUpdate(1);

	}
	
	//this gets called at the end of the program and must be present, as it cleans up resources
	public void shutDown()
	{
		controller.UnInit();
		joystick.Release(1);
	}
	
}
}

Download and install notepad++ and copy paste this into a new document and save as a CS file. You can also use notepad regular, but It might leave some extra unwanted characters.

Another word of warning: the cable (microsoft to usb) should be the 3 foot version, not the longer one since it will not work.
Plug in the USB cable DIRECTLY to your PC not via a usb hub, since it will not work.

All in all have a look at these forum pages, (read the last entries from page 14 to the end) and read them carefully.

http://mwomercs.com/forums/topic/7801-steel-battalion-controller-and-win-7-64-bit-drivers/page__st__300

Since you can map 2 buttons to 1 control in the ED control options, I would strongly advise to map the boost button to the 'lockon + a pedal' instead of just the pedal. I use the right pedal for thrusting backwards, and have the left pedal set for forward.

Anyways here is a copy of my explanation of how my setup works and is configured.

Set all deadzones in the ED controllers' options to nil for best effect.

Txt copied for MWO forums:

I have taken the time to comment the ingame bind of each keypress, so you will get the idea.

What I also noticed is that one control can be mapped to two or three keys pressed at once ingame, in the ED config screen. Below you will find some examples in which this is a paramount requirement.

In ED there is forward thrust and forward throttle. Forward throttle is constant, forward thrust is not, it will only work as long as you keep the control pressed. You use forward throttle to fly around, but docking for example needs little amounts of thrust to get above the correct position above the landing pad.

Now, since I want to keep the script nice and simple I am just using 2 pedals and not the middle one.

I have experimented with different setups, and this IMHO is the most workable settings in ED control config screen:

- Right pedal: throttle (forward only, inverted)

Forward only, meaning the same pedal does not control reverse; and I don't need to judge where to hover the pedal midway on its axis to come to a halt and fully depress it to go full forward and letting it go to go backward. I judge that flying backwards constantly using throttle is not necessary, but that's just me talking.
Inverted: This means you don't have to hold the throttle all the time to go forward (works a bit like an automatic transmission) and you have to press it completely to come to a halt. The SB pedals require quite some muscle if used constantly, and I don't need a workout (yet) during gaming.

- Left pedal + Lockon button: Boost

ED has an override set of controls for landing (basically when the landing gear is completely down) the pedals can be assigned to forward and backward thrust. Of course since those controls only kick in when the landing gear is fully deployed and not just when the landing light is on, having the left pedal alone mapped to "Engage Boosters" without the gear down is a big NO-NO which will definitely at some point result in an unvoluntary boost when you don't need it; inside the docking bay. As long as ED has not solved that the override kicks in when the landing light is active, I am not using the overrides.
However I have solved this differently, and using these two buttons will engage boost. Perfectly safe.

- Right pedal solo: Rear Thrust

Rear thrust is needed for combat situations (to not overshoot the target once you boost after it) and also is usful if you overshot the landing pad, this time without having to worry about the full extension of the landing gear and unvoluntary boost.

- Left stick: Roll
I set the deadzone to zero in the ED config screen. No further explanation required.

- Right Stick: x-axis Yaw; y-axis Pitch (inverted)

Inverted here since this is not an xbox controller, and pushing the stick down should make the ships nose go down, not the other way round.

- POV (solo): thrust UP/DOWN/LEFT/RIGHT

I have mapped the POV switch on their own to different keypresses. These keypresses are assigned to Thrust Up, Thrust Left, Thrust Right, and Thrust Down in the ED config screen.

- POV + mainweapon button: Power distribution settings

Left: power to systems / Right: power to weapons / Up; power to engines / Down: power balanced.

Extra Note:

By assigning the mouselook view to a button on the SB controller, you can also use one of the two POV keysettings to look around the cockpit. I haven't got any track IR and I am waiting for a proper Oculus Rift release, so still playing on a 23' monitor.

- The keys in the config are the defaults used by ED after installation, so minimum reconfig of the ingame buttons is required.

- When calibrating this in windows, I found it that commenting out the keys for the pov helps a lot with the calibration. Uncomment again when calibration is complete, and then launch the game.

Now if this thing would have force feedback, it would really rock, but I am pretty happy about the results so far.

Here is the movie of it in action a while back:

[video=youtube;HBDnex1-lZs]https://www.youtube.com/watch?v=HBDnex1-lZs[/video]

The dial has me eluded too, and if working correctly could be used to go back and forth between the different screens on both sides, or even up and down using a second button pressed while turning the dial.

Anyways, hope this info is useful and fly safe out there.
 
Last edited:
Many thanks, Korben Dallas/Max Gordon!
I saw your android tablet thing you mention over on the MWO online forum. Very cool stuff.

Phalkon13 and GuruGeorge - I'm at work just now, but if I nip home for lunch then I'll upload the .cs file or copy and paste the script.
It's pretty much what Korben Dallas has posted with a few changes for my preference - e.g using the analogue axis of the hat for thrust, some pedal change, and lighting changes, as well as different button mapping. If you look at the script you'll see i've tried to comment about what buttons need mapped in ED and which ones are glued to the default values.
Combine that with my post from 22nd Dec and you should have a nicely working system with, as far as I can tell, complete functionality of the game mapped to the controller.
I use a small wireless keyboard/trackpad that I can grab easily to use in commodities market/galaxy map etc because I much prefer mouse/cursor control in those aspects. You could even use a phone or tablet for that if you install the right remote control/trackpad app.

If I can't post up the .cs file at lunchtime then I'll do it when I get home later tonight.
 
here's the link to the .cs file:
http://www.filedropper.com/crackmouse

It's still got some legacy comments that probably no longer make sense, but I've tried to make it as understandable to people like myself who can't code.
It took me a few days of research and testing to understand enough to edit it and to get a nicely working system.
Hopefully this .cs file, combined with my post from 22nd Dec, will allow anyone that was in my situation will be able to get it working nicely for them sooner.
Make sure to try out Korben Dallas' original script too. Its what I based mine on and will help you understand whats going on if you want to make modifications.

Have fun! :)
 
Hey, no worries CrackMouse,

I did not map the throttle to use it with ED since it crashes the exe file for the controller. Therefore I have not mapped it.

For all those of you who are interested in making a customized MFD for Elite Dangerous here is the complete explanation.

https://forums.frontier.co.uk/showthread.php?t=46614

The only downside of the app is that you cannot share control schemes you made up with your friends so you have to download the buttons and create it yourself... sorry.

This would be great for a seperate control pad for the galaxy map, although the buttons would need to show different text. The buttons were made in Calc (the free alternative to excel) and after printscreen they were cut in Gimp. It is thus easy to make your own.

I had the android pad setup to work as an extra to the Xbox controller I used at first to play ED. Then I got all functions replaced on the SBC controller, and I am not using it anymore.

I didn't get that many responses on the LCARs interface, that's the major reason I didn't post my setup of the SBC controller in these forums.

Glad someone has use for them.

Have a good game all
 
Last edited:
I've been using my SB controller for a few days now. It's a lot of fun. Using it with fixed wapons is quite a workout on the arms though. I don't suggest fixed weapons.

I've been using the last posted profile on the MWO forums because I like the setup. Works great on my desktop. I tried using it on my laptop but it crashes with errors. So after doing some digging, my friend and I found a different method of setting everything up that worked.

(I can't post links)
It's at www . starcitizen . fr / forum
Search for the heading "Faire Fonctioner le SteelBattalion Controller"

The guide is in french and has pictures. The Translate this addon for firefox did a pretty good job with the page. It uses different versions of the same software. The profile is nicely done and it has a corresponding ED keybind profile so you don't need to do all the work of mapping it out. Just wanted to share the info in case others were going through what I went through.

The error I was getting was the "plugged in to a repeater" error a few others were getting. I don't have a repeater in my laptop. So I don't know why I was getting the error. It worked once and then never again.
 
I also wanted to add that when I was on the "plug in the SB controller" step, the drivers would not install (for the laptop and desktop). So I did the "update drivers" step on the "unknown device" detected in hardware manager.
 
Setting up ED contollers is not a plug-and-play affair, especially for the SBC stick. There are Caveats, be sure to read up on them here. As I said in an earlier post, it pays off to READ the (complete) MWO thread I posted in one of my previous posts here and read it carefully, heck read the whole 16 pages, it's quite entertaining.

Driver and software download and installation instructions can be found here

https://code.google.com/p/steel-batallion-64/wiki/Installation

Follow the steps on that page and read my post carefully; you should not have problems or errors. I have no qualms about people using or copying this on other sites like the RSI website, but proper credit must be given as CrackMouse did here and on the MWO forums.

Here are another couple of links that HackNFly shared with me in the MWO forums that will help with coding (knowing the right button names) and keyboard codes in general.
If you use my cs file you will see that they are all commented.

Here are a few links that will clear up how the SBC controller buttons are named and the second one is a link that tells you what keycodes you can use to map in your CS file.


https://code.google.com/p/steel-batallion-64/wiki/Configuration
http://msdn.microsoft.com/en-us/library/windows/desktop/bb321074%28v=vs.85%29.aspx

Good Hunting

- - - - - Additional Content Posted / Auto Merge - - - - -

I want one of these.


there is one for sale on Ebay:

http://www.ebay.com/itm/Steel-Battalion-w-Controller-and-Controller-Manual-FREE-SHIP-Xbox-2002-/171576882834?pt=LH_DefaultDomain_0&hash=item27f2c77692

That is about the price I paid here 250 Euros.


It would be interesting to see people posting videos using this and their different setups. Don't be shy to share.
 
Last edited:
That's very true. There's so much information in that thread. I've read the MWO thread, start to finish, mulltiple times. I've read and watched HnF's install instructions multiple times (Some of it is out of date and you don't catch that until the mid of the MWO thread). I've installed every version of HnF's setup to multiple computers multiple times. But I have ran in to errors. Like you said, it's not a simple plug and play. Sharing my experiences with the software available may help others who have had the luck I've had.

The alternate install version I'm using on my laptop is written by Nydo. It is based off of HnF's work. The steps are almost identical. The key differences is that Nydo uses the 128 button version of vjoy and doesn't install vjoy aps (outdated step?)

- Device drivers not recognized when plugging in the controller for the first time - update the unknown device's drivers with the drivers found in the LibUSB64 folder

- "c:\controllers\Steel-Batallion-64\BvP-MWO.cs(56,46) : error CS0117: 'SBC.ButtonEnum' does not contain a definition for 'RightJoyMainFire'" or the "usb hub error", first reported by Max Gordon - Disconnect it from the hub and plug in directly. OR Plug the controller in to an unshared port (Issue with my desktop). OR Try a higher voltage USB port (Issue with my laptop)

- "System.Reflection.TargetInvocationException ..." using 2.1 - Try HnF's 2.0.1 or Nydo's version
 
Last edited:
here's the link to the .cs file:
h t t p : // www . filedropper . com / crackmouse
It's still got some legacy comments that probably no longer make sense, but I've tried to make it as understandable to people like myself who can't code.
It took me a few days of research and testing to understand enough to edit it and to get a nicely working system.
Hopefully this .cs file, combined with my post from 22nd Dec, will allow anyone that was in my situation will be able to get it working nicely for them sooner.
Make sure to try out Korben Dallas' original script too. Its what I based mine on and will help you understand whats going on if you want to make modifications.

Have fun! :)


For some reason, the link just sends me to the main FileDropper website, and not the specific .cs file.
 
Hey Crackmouse, can you repost or email me your .cs file. The link does not seem to be working. Also with the steel battalion controller, do you have to reconfigure it everytime you start the computer or just once? thanks.
 
Korben, what would I change in your .cs file to make the right pedal the forward throttle, and the left pedal the reverse throttle?
thanks
 
Back
Top Bottom