Discussion: Profile Converter

Share and discuss profiles
Post Reply
Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Discussion: Profile Converter

Post by Primal Fear »

Here is a possibility to submit the button order of your controller, so Oke_Doke can add it to the converter. Please also leave a post here, that you have entered your controller data into the form (as I don't check the spreadsheet, where form saves the data, regularly).

1.Load the following profile and open the form.

Code: Select all

;--- Xpadder Profile Data ---
DataType=Profile
Version=2012.01.19
Name=form profile for converter
KeyTapTime=4
Set1DPadMode=FourWay
Set1Button1Name=1
Set1Button1Slots=Home,PAUSE 0.01s,Tab
Set1Button2Name=2
Set1Button2Slots=Home,PAUSE 0.00s,2,PAUSE 0.01s,Tab
Set1Button3Name=3
Set1Button3Slots=Home,PAUSE 0.00s,3,PAUSE 0.01s,Tab
Set1Button4Name=4
Set1Button4Slots=Home,PAUSE 0.00s,4,PAUSE 0.01s,Tab
Set1Button5Name=5
Set1Button5Slots=Home,PAUSE 0.00s,5,PAUSE 0.01s,Tab
Set1Button6Name=6
Set1Button6Slots=Home,PAUSE 0.00s,6,PAUSE 0.01s,Tab
Set1Button7Name=7
Set1Button7Slots=Home,PAUSE 0.00s,7,PAUSE 0.01s,Tab
Set1Button8Name=8
Set1Button8Slots=Home,PAUSE 0.00s,8,PAUSE 0.01s,Tab
Set1Button9Name=9
Set1Button9Slots=Home,PAUSE 0.00s,9,PAUSE 0.01s,Tab
Set1Button10Name=10
Set1Button10Slots=Home,PAUSE 0.00s,1,PAUSE 0.00s,0,PAUSE 0.01s,Tab
Set1Button11Name=11
Set1Button11Slots=Tab,PAUSE 0.01s,Home,PAUSE 0.00s,1,PAUSE 0.00s,1
Set1Button12Name=12
Set1Button12Slots=Tab,PAUSE 0.01s,Home,PAUSE 0.00s,1,PAUSE 0.00s,2
Set1Button13Name=13
Set1Button13Slots=Tab,PAUSE 0.01s,Home,PAUSE 0.00s,1,PAUSE 0.00s,3
Set1Button14Name=14
Set1Button14Slots=Tab,PAUSE 0.01s,Home,PAUSE 0.00s,1,PAUSE 0.00s,4
Set1DPadUpName=up
Set1DPadUpSlots=Left Shift,Tab
Set1DPadRightName=Submit (hold)
Set1DPadRightSlots=HOLD ZONE 0.70s,Enter,HOLD ZONE 0.10s
Set1DPadDownName=down, start typing
Set1DPadDownSlots=Tab
Set1TriggerLeftName=analogue
Set1TriggerLeftSlots=Home,PAUSE 0.00s,A,PAUSE 0.01s,Tab
Set1TriggerRightName=analogue
Set1TriggerRightSlots=Home,PAUSE 0.00s,A,PAUSE 0.01s,Tab
2.Use your keyboard to type the name of your controller in the first cell. Do not press Enter!
3.Then press DPad down once and start pressing the stated buttons. Under the name of each button is a explanation of it, if you shouldn't know where this button is located on the Xbox360pad. Xpadder will select the number of this button and causes automatically to switch to the next button. If you should have made a mistake, then you can use the Dpad (up and down) to go back to this button to change it.
4.When your are done with all buttons, the "Send" button should be selected. So simply hold Dpad right to send the data.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Yea good idea with the spreadsheet. You probably know that Images can be included in the controller data. Only it's just a little to large [understatement] to fit in a post. There are a few solutions here.

1. Find the most common layout conventions and present a layout file for each.
2. Rename the elements so that the buttons are identifiable in the controller settings window and [as a bonus] in the title of the assignment window. [Example code below]
3. Since layout is related to the controller type and therefore the controller image. Perhaps the layout code or file could be included in the controller database? That way, we're fairly certain that for a given controller type the buttons will map correctly.

Code: Select all

;--- Xpadder Controller Data ---
DataType=Controller
Version=2011.06.24
Name=Xbox360StarterLayout
Button1Location=385,135
Button2Location=424,93
Button3Location=344,94
Button4Location=384,55
Button5Location=85,7
Button6Location=384,7
Button7Location=184,96
Button8Location=291,95
Button9Location=86,91
Button10Location=305,180
DPadUpLocation=159,145
DPadRightLocation=191,177
DPadDownLocation=159,209
DPadLeftLocation=127,177
Stick1UpLocation=86,59
Stick1RightLocation=118,91
Stick1DownLocation=86,123
Stick1LeftLocation=54,91
Stick2UpLocation=305,148
Stick2RightLocation=337,180
Stick2DownLocation=305,212
Stick2LeftLocation=273,180
TriggerLeftLocation=6,7
TriggerRightLocation=475,7
DPadUpAccess=POV
DPadRightAccess=POV
DPadDownAccess=POV
DPadLeftAccess=POV
Stick1XAccess=Axis X
Stick1YAccess=Axis Y
Stick2XAccess=Axis RX
Stick2YAccess=Axis RY
TriggerLeftAccess=Axis Z
TriggerRightAccess=Axis Z -
Button1Name=A
Button2Name=B
Button3Name=X
Button4Name=Y
Button5Name=L. Button
Button6Name=R. Button
Button7Name=Back
Button8Name=Start
Button9Name=L. Stick Button
Button10Name=R. stick Button
DPadName=DPad
DPadUpName=Up
DPadRightName=Right
DPadDownName=Down
DPadLeftName=Left
Stick1Name=L. Stick
Stick2Name=R. Stick
StickUpName=Up
StickRightName=Right
StickDownName=Down
StickLeftName=Left
TriggerLeftName=Trigger Left
TriggerRightName=Trigger Right
:Testers wanted:
Xbox360StarterLayout with image
right click and save link as

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

I have a crazy idea how to convert profiles automatically.
In principle it's only about editing a text file (the profile) automatically according to a certain scheme. I'm pretty sure that this is possible with a batch file and I'm pretty sure I'm able to write one that can do that. I have already planned the whole work routine, so I guess I will give it a try.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

I have something working to convert Xbox360 profiles. It's a spreadsheet :lol:.
https://docs.google.com/spreadsheet/ccc ... k5USVYtLWc

You can use it by downloading it (File->Downlaod as->Excel OR OpenOffice), open it, removing my profile from the Xbox360 column (I will remove the need for this step later, currently the profile is good for testing) and pasting the Xbox360 profile you want to convert instead.
You can copy&paste the whole column for your controller into Xpadder. Xpadder will simply ignore the first two lines (name of the controller and note) as it doesn't know what that is.

I would prefer something like pasting the Xbox360 profile directly into the spreadsheet and then copying the wanted output profile from there, but I couldn't find a way to make this possible without allowing everybody to mess up the formulas.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

We could use some simple javascript and a form to do this same thing so its both online and foolproof.
Javascript Replace.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Looks good, especially that it would perform the whole work process for the whole profile at once and not separately for every single line. How to do the form for the profile input?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Something like this should work.

Code: Select all

<html>
<title>Xpadder Xbox to Ps3 (Alpha2)</title>
<head>
<script type="text/JavaScript">
<!--
function xboxToPs3() 
{
//get the posted text from xboxInput
	var profile = document.getElementById("xboxInput").value;
//begin conversion using replace()
//Xbox360 to PS3


//button9 to button11
	profile = profile.replace("Button9Name", "Button11Name");
	profile = profile.replace("Button9Slots", "Button11Slots");
//button7 to button9
	profile = profile.replace("Button7Name", "Button9Name");
	profile = profile.replace("Button7Slots", "Button9Slots");
//button5 to button7
	profile = profile.replace("Button5Name", "Button7Name");
	profile = profile.replace("Button5Slots", "Button7Slots");
//button10 to button12
	profile = profile.replace("Button10Name", "Button12Name");
	profile = profile.replace("Button10Slots", "Button12Slots");
//button8 to button10
	profile = profile.replace("Button8Name", "Button10Name");
	profile = profile.replace("Button8Slots", "Button10Slots");
//button6 to button8
	profile = profile.replace("Button6Name", "Button8Name");
	profile = profile.replace("Button6Slots", "Button8Slots");

//button4 to button1
	profile = profile.replace("Button4Name", "Button1Name");
	profile = profile.replace("Button4Slots", "Button1Slots");
//button3 to button4
	profile = profile.replace("Button3Name", "Button4Name");
	profile = profile.replace("Button3Slots", "Button4Slots");
//button2 to button2 
	//is the same button
//button1 to button3
	profile = profile.replace("Button1Name", "Button3Name");
	profile = profile.replace("Button1Slots", "Button3Slots");	

// pass converted profile data back to profile
document.getElementById("ps3Output").value = profile;
}
//-->
</script>
</head>

</body>
<h1>Xpadder</h1>
<h2>Xbox360 To PS3 profile converter (Alpha2)</h1>
<form name="form1" method="post">
<textarea id="xboxInput"></textarea>
<input type="button" name="Convert" value="Convert xbox To Ps3" onClick="xboxToPs3()">
<textarea id="ps3Output"></textarea>
</form>
</body>
</html>
Xbox360 to Ps3 profile converter Alpha2
Last edited by Oke_Doke on 18 Nov 2011, 20:23, edited 1 time in total.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Todo:
Adding rumble, turbo, toggle and set selection

Code: Select all

profile = profile.replace("Button#Toggle", "Button#Toggle");
Making the replace command global, to cover all Sets.

Code: Select all

    //button8 to button10
       profile = profile.replace(/Button8Name/g, "Button10Name");
       profile = profile.replace(/Button8Slots/g, "Button10Slots");
I could do these two things and you could improve the interface. For example more controllers (like in my spreadsheet) I can make the conversion for, larger input and output area, "select all" or "copy" button for the output.

How about that?

Edit: Another question, do you have a PS3 pad?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Yep I have a ps3 controller* I can use for testing.

Knock yourself out, I'll add some "from" and "to" selection options and populate them to what you have so far. For simplicity I'll use the Xbox360 mapping as the key step for translating between profiles.

As for the design, i'll slap on a few styles for usability and worry about the theme later.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

I have simplified the whole conversion process. It also works for everything (Sets, turbo,...).
Edit: Removed one line in the conversion, that was useless but didn't hurt.

Code: Select all

    <html>
    <title>Xpadder Xbox to Ps3 (Alpha2)</title>
    <head>
    <script type="text/JavaScript">
    <!--
    function xboxToPs3()
    {
    //get the posted text from xboxInput
       var profile = document.getElementById("xboxInput").value;
    //begin conversion using replace()
    //Xbox360 to PS3

    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button3 to button4
       profile = profile.replace(/Button3/g, "Button4");
    //button2 to button2
       //is the same button
    //button1 to button3
       profile = profile.replace(/Button1/g, "Button3");
    //buttonFOUR to button1
       profile = profile.replace(/ButtonFOUR/g, "Button1");
    //buttonTEN to button12
       profile = profile.replace(/ButtonTEN/g, "Button12");
    //button9 to button11
       profile = profile.replace(/Button9/g, "Button11");
    //button7 to button9
       profile = profile.replace(/Button7/g, "Button9");
    //button5 to button7
       profile = profile.replace(/Button5/g, "Button7");
    //button8 to button10
       profile = profile.replace(/Button8/g, "Button10");
    //button6 to button8
       profile = profile.replace(/Button6/g, "Button8");


    // pass converted profile data back to profile
    document.getElementById("ps3Output").value = profile;
    }
    //-->
    </script>
    </head>

    </body>
    <h1>Xpadder</h1>
    <h2>Xbox360 To PS3 profile converter (Alpha2)</h1>
    <form name="form1" method="post">
    <textarea id="xboxInput"></textarea>
    <input type="button" name="Convert" value="Convert xbox To Ps3" onClick="xboxToPs3()">
    <textarea id="ps3Output"></textarea>
    </form>
    </body>
    </html>
Oke_Doke wrote:As for the design, i'll slap on a few styles for usability and worry about the theme later.
Who cares for a theme, I think all we need are practical functions. White background is beautiful. :lol:


As for the PS3pad, I have a small problem with the left trigger. It is always slightly over zero, that's the reason why I have added the DeadZone entries in front in my spreadsheet (hidden lines). Do you have the same problem with the left trigger? I think the reason for it is motioninjoy and not the controller.
Last edited by Primal Fear on 17 Nov 2011, 22:45, edited 2 times in total.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

the ps3 triggers are insanely sensitive on 0 deadzones I can shake the controller and the triggers will fire. Good idea with including DeaDzones for motioninjoys. We can add that if we want. Now that we have a technique manipulating the profile with javascript is a no brainer. :keen:

Good idea again with simplifying the replace strings. I was being overly cautious I guess.

This is ridiculously easy. I'll finish up tomorrow. Then we can throw together what we have.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

The replace part for all three controller and (PS3 typical).
Code: Show

Code: Select all

//Xbox360 to PS3(direct)


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button3 to button4
       profile = profile.replace(/Button3/g, "Button4");
    //button2 to button2
       //is the same button
    //button1 to button3
       profile = profile.replace(/Button1/g, "Button3");
    //buttonFOUR to button1
       profile = profile.replace(/ButtonFOUR/g, "Button1");
    //buttonTEN to button12
       profile = profile.replace(/ButtonTEN/g, "Button12");
    //button9 to button11
       profile = profile.replace(/Button9/g, "Button11");
    //button7 to button9
       profile = profile.replace(/Button7/g, "Button9");
    //button8 to button10
       profile = profile.replace(/Button8/g, "Button10");
    //button5 to button7
       profile = profile.replace(/Button5/g, "Button7");
    //button6 to button8
       profile = profile.replace(/Button6/g, "Button8");

Code: Select all

//Xbox360 to PS3(typical)


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button3 to button4
       profile = profile.replace(/Button3/g, "Button4");
    //button2 to button2
       //is the same button
    //button1 to button3
       profile = profile.replace(/Button1/g, "Button3");
    //buttonFOUR to button1
       profile = profile.replace(/ButtonFOUR/g, "Button1");
    //buttonTEN to button12
       profile = profile.replace(/ButtonTEN/g, "Button12");
    //button9 to button11
       profile = profile.replace(/Button9/g, "Button11");
    //button7 to button9
       profile = profile.replace(/Button7/g, "Button9");
    //button8 to button10
       profile = profile.replace(/Button8/g, "Button10");
    //button5 to buttonFIVE
       profile = profile.replace(/Button5/g, "ButtonFIVE");
    //button6 to buttonSIX
       profile = profile.replace(/Button6/g, "ButtonSIX");
    //TriggerLeft to Button7
       profile = profile.replace(/TriggerLeft/g, "Button7");
    //TriggerRight to Button8
       profile = profile.replace(/TriggerRight/g, "Button8");
    //buttonFIVE to TriggerLeft
       profile = profile.replace(/ButtonFIVE/g, "TriggerLeft");
    //buttonSIX to TriggerRight
       profile = profile.replace(/ButtonSIX/g, "TriggerRight");

Code: Select all

//Xbox360 to PS2


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button3 to button4
       profile = profile.replace(/Button3/g, "Button4");
    //button2 to button2
       //is the same button
    //button1 to button3
       profile = profile.replace(/Button1/g, "Button3");
    //buttonFOUR to button1
       profile = profile.replace(/ButtonFOUR/g, "Button1");
    //buttonTEN to button12
       profile = profile.replace(/ButtonTEN/g, "Button12");
    //button9 to button11
       profile = profile.replace(/Button9/g, "Button11");
    //button7 to button9
       profile = profile.replace(/Button7/g, "Button9");
    //button8 to button10
       profile = profile.replace(/Button8/g, "Button10");
    //button5 to button7
       profile = profile.replace(/Button5/g, "Button7");
    //button6 to button8
       profile = profile.replace(/Button6/g, "Button8");
    //TriggerLeft to Button5
       profile = profile.replace(/TriggerLeft/g, "Button5");
    //TriggerRight to Button6
       profile = profile.replace(/TriggerRight/g, "Button6");

Code: Select all

//Xbox360 to Rumblepad2


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button3 to buttonTHREE
       profile = profile.replace(/Button3/g, "ButtonTHREE");
    //button2 to button3
       profile = profile.replace(/Button2/g, "Button3");
    //button1 to button2
       profile = profile.replace(/Button1/g, "Button2");
    //buttonTHREE to button1
       profile = profile.replace(/ButtonTHREE/g, "Button1");
    //button4 to button4
       //is the same button
    //buttonTEN to button12
       profile = profile.replace(/ButtonTEN/g, "Button12");
    //button9 to button11
       profile = profile.replace(/Button9/g, "Button11");
    //button7 to button9
       profile = profile.replace(/Button7/g, "Button9");
    //button8 to button10
       profile = profile.replace(/Button8/g, "Button10");
    //button5 to button5
       //is the same button
    //button6 to button6
       //is the same button
    //TriggerLeft to Button7
       profile = profile.replace(/TriggerLeft/g, "Button7");
    //TriggerRight to Button8
       profile = profile.replace(/TriggerRight/g, "Button8");
Oke_Doke wrote:For simplicity I'll use the Xbox360 mapping as the key step for translating between profiles.
So the next thing for me to do are four converting schemes from the respective controller back to Xbox360.

As for the PS3 Controller:
I don't have such sensitive triggers, even if I set the L2/R2 DeadZone in Motioninjoy to 0. My problems is that when none of the triggers is pressed, the raw input data is at 32768. The Xbox360pad (Xinput Scanning disabled) has 32767, so only one less. The Xbox360pad is perfectly in the middle, while on the PS3pad the left trigger is slightly pressed. For my problem a 1% DeadZone would be enough, but as the standard DeadZone in Motioninjoy for the triggers is 25%. I suppose that the usual user won't change these settings in motioninjoy, so we can go up to this value depending on how much you need.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

And the back convertions
Code: Show

Code: Select all

//PS3(direct) to Xbox360


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button11 to buttonELEVEN
       profile = profile.replace(/Button11/g, "ButtonELEVEN");
    //button12 to buttonTWELVE
       profile = profile.replace(/Button12/g, "ButtonTWELVE");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button1 to button4
       profile = profile.replace(/Button1/g, "Button4");
    //button3 to button1
       profile = profile.replace(/Button3/g, "Button1");
    //button2 to button2
       //is the same button
    //buttonFOUR to button3
       profile = profile.replace(/ButtonFOUR/g, "Button3");
    //button7 to button5
       profile = profile.replace(/Button7/g, "Button5");
    //button8 to button6
       profile = profile.replace(/Button8/g, "Button6");
    //button9 to button7
       profile = profile.replace(/Button9/g, "Button7");
    //buttonTEN to button8
       profile = profile.replace(/ButtonTEN/g, "Button8");
    //buttonELEVEN to button9
       profile = profile.replace(/ButtonELEVEN/g, "Button9");
    //buttonTWELVE to button10
       profile = profile.replace(/ButtonTWELVE/g, "Button10");

Code: Select all

//PS3(typical) to Xbox360


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button11 to buttonELEVEN
       profile = profile.replace(/Button11/g, "ButtonELEVEN");
    //button12 to buttonTWELVE
       profile = profile.replace(/Button12/g, "ButtonTWELVE");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button1 to button4
       profile = profile.replace(/Button1/g, "Button4");
    //button3 to button1
       profile = profile.replace(/Button3/g, "Button1");
    //button2 to button2
       //is the same button
    //buttonFOUR to button3
       profile = profile.replace(/ButtonFOUR/g, "Button3");
    //TriggerLeft to Button5
       profile = profile.replace(/TriggerLeft/g, "Button5");
    //TriggerRight to Button6
       profile = profile.replace(/TriggerRight/g, "Button6")
    //button7 to TriggerLeft
       profile = profile.replace(/Button7/g, "TriggerLeft");
    //button8 to TriggerRight
       profile = profile.replace(/Button8/g, "TriggerRight");
    //button9 to button7
       profile = profile.replace(/Button9/g, "Button7");
    //buttonTEN to button8
       profile = profile.replace(/ButtonTEN/g, "Button8");
    //buttonELEVEN to button9
       profile = profile.replace(/ButtonELEVEN/g, "Button9");
    //buttonTWELVE to button10
       profile = profile.replace(/ButtonTWELVE/g, "Button10");

Code: Select all

//PS2 to Xbox360


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button11 to buttonELEVEN
       profile = profile.replace(/Button11/g, "ButtonELEVEN");
    //button12 to buttonTWELVE
       profile = profile.replace(/Button12/g, "ButtonTWELVE");
    //button4 to buttonFOUR 
       profile = profile.replace(/Button4/g, "ButtonFOUR");
    //button1 to button4
       profile = profile.replace(/Button1/g, "Button4");
    //button3 to button1
       profile = profile.replace(/Button3/g, "Button1");
    //button2 to button2
       //is the same button
    //buttonFOUR to button3
       profile = profile.replace(/ButtonFOUR/g, "Button3");
    //button5 to TriggerLeft
       profile = profile.replace(/Button5/g, "TriggerLeft");
    //button6 to TriggerRight
       profile = profile.replace(/Button6/g, "TriggeRight");
    //button7 to Button5
       profile = profile.replace(/Button7/g, "Button5");
    //button8 to Button6
       profile = profile.replace(/Button8/g, "Button6");
    //button9 to button7
       profile = profile.replace(/Button9/g, "Button7");
    //buttonTEN to button8
       profile = profile.replace(/ButtonTEN/g, "Button8");
    //buttonELEVEN to button9
       profile = profile.replace(/ButtonELEVEN/g, "Button9");
    //buttonTWELVE to button10
       profile = profile.replace(/ButtonTWELVE/g, "Button10");

Code: Select all

//RumblePad2 to Xbox360


    //button10 to buttonTEN
       profile = profile.replace(/Button10/g, "ButtonTEN");
    //button11 to buttonELEVEN
       profile = profile.replace(/Button11/g, "ButtonELEVEN");
    //button12 to buttonTWELVE
       profile = profile.replace(/Button12/g, "ButtonTWELVE");
    //button3 to buttonTHREE 
       profile = profile.replace(/Button3/g, "ButtonTHREE");
    //button1 to button3
       profile = profile.replace(/Button1/g, "Button3");
    //button2 to button1
       profile = profile.replace(/Button2/g, "Button1");
    //button4 to button4
       //is the same button
    //buttonTHREE to button2
       profile = profile.replace(/ButtonTHREE/g, "Button2");
    //button5 to button5
       //is the same button
    //button6 to button6
       //is the same button
    //button7 to TriggerLeft
       profile = profile.replace(/Button7/g, "TriggerLeft");
    //button8 to TriggerRight
       profile = profile.replace(/Button8/g, "TriggeRight");
    //button9 to button7
       profile = profile.replace(/Button9/g, "Button7");
    //buttonTEN to button8
       profile = profile.replace(/ButtonTEN/g, "Button8");
    //buttonELEVEN to button9
       profile = profile.replace(/ButtonELEVEN/g, "Button9");
    //buttonTWELVE to button10
       profile = profile.replace(/ButtonTWELVE/g, "Button10");

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Thanks for the great idea naming problem variables "NUMBER" instead of "#";

This Array based conversion. uses an imaginary "KEY" profile as the base translation between profiles. Arrays means it will be easier to add new controllers to the listed conversion arrays.

Code: Select all

<html><head><title>XpadderProfileConverterAlpha3</title><script type="text/javascript">
<!--//

function convert()
{
//pass in source profile and converstion options
	var profile = document.getElementById("input").value;
	var from = document.form1.from.value;
	var to = document.form1.to.value;
	var swap = document.form1.swap.checked;

//converting the profile into key
	profile = updateProfile(profile,window[from](),Key());

//shoulder swap check 
	var type = profile.search("DataType=Profile");
	if ( swap == true && type != -1) 
	{
		profile = swapShoulders(profile); 
	}

//converting back to target then back to target
profile = updateProfile(profile,Key(),window[to]());
	
//pass converted profile to output textarea
	document.getElementById("output").value = profile;	
}


// proceduraly replaces strings.
function updateProfile(profile,was,is)
{
	var n=12;
	var isNew = is[n];
	var wasRx = new RegExp(was[n],"g");
	while (n>= 0) {
		wasRx = new RegExp(was[n],"g");
			isNew = is[n];
			profile = profile.replace(wasRx, isNew);
			n--; }
 return profile;
}


// should swap shoulder buttons
function swapShoulders(profile)
{
		profile = profile.replace(/KeyTriggerONE1/g,"KeyHolderONE1");
		profile = profile.replace(/KeyTriggerTWO2/g,"KeyHolderTWO2");
		profile = profile.replace(/KeyFIVE5/g,"KeyTriggerONE1");
		profile = profile.replace(/KeySIX6/g,"KeyTriggerTWO2");
		profile = profile.replace(/KeyHolderONE1/g,"KeyFIVE5");
		profile = profile.replace(/KeyHolderTWO2/g,"KeySIX6");
return profile;
}

// -------------------- conversion arrays -------------------------


function Key()
{
var key = new Array();
	key[0] = "KeyNAME";
	key[1] = "KeyONE1";
	key[2] = "KeyTWO2";
	key[3] = "KeyTHREE3";
	key[4] = "KeyFOUR4";
	key[5] = "KeyFIVE5";
	key[6] = "KeySIX6";
	key[7] = "KeyTriggerONE1";
	key[8] = "KeyTriggerTWO2";
	key[9] = "KeySEVEN7";
	key[10] = "KeyEight8";
	key[11] = "KeyNINE9";
	key[12] = "KeyTEN10";
return key;
}



function Xbox360()
{
	var Xbox360 = new Array();
	Xbox360[0] = "Xbox360";
	Xbox360[1] = "Button1";
	Xbox360[2] = "Button2";
	Xbox360[3] = "Button3";
	Xbox360[4] = "Button4";
	Xbox360[5] = "Button5";
	Xbox360[6] = "Button6";
	Xbox360[7] = "TriggerLeft";
	Xbox360[8] = "TriggerRight";
	Xbox360[9] = "Button7";
	Xbox360[10] = "Button8";
	Xbox360[11] = "Button9";
	Xbox360[12] = "Button10";
return Xbox360;
}



function PS3()
{
	var PS3 = new Array();
	PS3[0] = "PlayStation3";
	PS3[1] = "Button3";
	PS3[2] = "Button2";
	PS3[3] = "Button4";
	PS3[4] = "Button1";
	PS3[5] = "Button7";
	PS3[6] = "Button8";
	PS3[7] = "TriggerLeft";
	PS3[8] = "TriggerRight";
	PS3[9] = "Button9";
	PS3[10] = "Button10";
	PS3[11] = "Button11";
	PS3[12] = "Button12";
return PS3;
}

function PS2()
{
	var PS2 = PS3();
	PS2[0] = "PlayStation2"
	PS2[7] = "Button5";
	PS2[8] = "Button6";
return PS2;
}

function Rumblepad2()
{
	var Rumblepad2 = new Array();
	Rumblepad2[0] = "Rumblepad2";
	Rumblepad2[1] = "Button2";
	Rumblepad2[2] = "Button3";
	Rumblepad2[3] = "Button1";
	Rumblepad2[4] = "Button4";
	Rumblepad2[5] = "Button5";
	Rumblepad2[6] = "Button6";
	Rumblepad2[7] = "Button7";
	Rumblepad2[8] = "Button8";
	Rumblepad2[9] = "Button9";
	Rumblepad2[10] = "Button10";
	Rumblepad2[11] = "Button11";
	Rumblepad2[12] = "Button12";
return Rumblepad2;
}


function DualSFXEv()
{
var key = new Array();
	key[0] = "DualSFX Evolution";
	key[1] = "Button2";
	key[2] = "Button4";
	key[3] = "Button1";
	key[4] = "Button3";
	key[5] = "Button5";
	key[6] = "Button6";
	key[7] = "Button7";
	key[8] = "Button8";
	key[9] = "Button9";
	key[10] = "Button10";
	key[11] = "Button11";
	key[12] = "Button12";
return key;
}

function NykoAirFloPC()
{
var key = new Array();
	key[0] = "Nyko AirFlo PC";
	key[1] = "Button1";
	key[2] = "Button2";
	key[3] = "Button3";
	key[4] = "Button4";
	key[5] = "Button5";
	key[6] = "Button6";
	key[7] = "Button7";
	key[8] = "Button8";
	key[9] = "Button9";
	key[10] = "Button10";
	key[11] = "Button11";
	key[12] = "Button12";
return key;
}

//-->
</script>


<style type="text/css">
.profile{display:block; float:left; width:410px; height:80%; resize:none;}
.middle{float:left; width:120px; margin:0 10px;}
#wrapper {width:960px; margin:0 auto;}
</style>
</head>

<body>
<div id="wrapper">
	<h1>Xpadder</h1>
    <h2>Profile & Layout converter (Alpha4)</h1>	
	<form name="form1" >
		<textarea id="input" class="profile"></textarea>
		<div class="middle">
			<div><<<<<< From:</div>
			<select name="from">
				<option value="Xbox360">Xbox360</option> 
				<option value="PS3">PlayStation 3</option> 
				<option value="PS2">PlayStation 2</option> 
				<option value="Rumblepad2">Rumblepad 2</option>
				<option value="DualSFXEv">DualSFX Evolution</option>
				<option value="NykoAirFloPC">NykoAirFloPC</option>
			</select><br />
			<div>To: >>>>>>>>></div>
			<select name="to">
				<option value="Xbox360">Xbox360</option> 
				<option value="PS3">PlayStation 3</option> 
				<option value="PS2">PlayStation 2</option> 
				<option value="Rumblepad2">Rumblepad 2</option>
				<option value="DualSFXEv">DualSFX Evolution</option>
				<option value="NykoAirFloPC">Nyko AirFlo PC</option>
				<option value="Key">Key Inspector</option>
			</select><br />
			<input type="button" value="Convert" onClick='convert()'/>
			<div><input type="checkbox" name="swap"/>Swap Shoulder and Trigger Assignments.(Profiles Only)</div>
		</div>
		<textarea id="output" class="profile"></textarea>
	</form>
<!-- endwrapper --></div>
</body></html>
EDIT: confused triggers for sticks (fixed?);
EDIT: Flipped Loop to avoid counting problem.
EDIT: added trigger to shoulder button swap option
EDIT: added DualSFXEvoluiton, Nyko AirFlo PC, Key Inspector

::Testers Wanted::
XpadderProfileConverter_Alpha4.html
Last edited by Oke_Doke on 19 Nov 2011, 13:01, edited 4 times in total.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

I have converted a Xbox360 profile to PS3 and the right stick button (8->10) is missing. When I convert the profile back to Xbox360 the right stick button is back, but therefore the left stick button (11->9) and Start (10->8) are missing.
Edit: At the end Buton8 (Start) is Button40 and Buton9 (LST) Button41.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Could you post your input profile? I'm sure it has something to do with the regular expressions. that thing was kicking my but for hours. (fixing)
EDIT: Arggh of course it replacing Button1 from Button10.... :shock:
:x

Code: Select all

var suffix = suffix();
var s = 3
= RegExp(was[n]+suffix[s],"g");
~
//~~~~~~~~~~~~
function suffix() {
var suffix = new Array();
suffix[0] = "N" 
suffix[1] = "R"
suffix[2] = "S"
return suffix;
}
Last edited by Oke_Doke on 18 Nov 2011, 21:09, edited 2 times in total.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

The problem should be that you start converting the profile with button1 into something else. But that is also affecting button 10, 11 and 12. So they don't exist anymore when they going to be converted. So if you convert for example a Xbox360 profile into a PS3 profile, Button10 becomes Button30 (Button1->3).
You have start on the other end to bring the buttons10-12 out of the way before converting Button1.
Edit:
Oke_Doke wrote:EDIT: Arggh of course it replacing Button1 from Button10.... :shock:
:x
Yes :mrgreen:

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

your right reverse order should solve that. i was thinking about appending the expression but just flipping the loop is better.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Seems to work now. I have converted a profile from Xbox360 to PS3, to PS2 and back to Xbox360. The output for every controller was flawless. :leftthumbup:

What's with alternative PS3 layout?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

What's with alternative PS3 layout?
How do you mean?

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Like in my spreadsheet, switching L1 with L2 and R1 with R2. Because it isn't possible to press both trigger at the same time, which is necessary in certain profiles. Also this seems to be usual on the PS3, Fire=R1;Aim=L1 (I don't have any shooter on my PS3, so I cannot 100% confirm this) .

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

ah yes the damn z axis. I guess Thats why you see what is essentially the ps2 profile on the ps3 controller. Sacrificing analogue input in favor of digital to eliminate mutually exclusive triggers.

Here's where I cheat a little with the button assignments. I double assign the triggers as both digital (Button 5 and 6) and analog (TriggerLeft & TriggerRight). (You may need to add L2 and R2 to Button5 and 6 in motioninjoy.) This is great because i can set a switch, turbo or toggle for one assignment while still using the same input for analog control.

I don't know how many other controllers with analog triggers have this option.
My old Saitek Rumble P3200 had digital inputs at the bottom of the triggers.

I would recommend the digital/analogue setup or just use the ps2 profile on the controller. I don't think i understand the point of swapping the 1st and 2nd shoulder buttons. :?

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Well, it's actually not for me as I wouldn't use this misconstruction of a controller (I use a SplitFish Dual SFX Evolution on my PS3). But I think that real PS3 gamers will have a problem with having L2/R2 as main shoulder buttons. If you look on the PS3 and even the PS2 profiles here in the forum, you will see that almost all profiles have fire/attack on R1 and Aim/Block on L1.
Also Distance Zones are really rarely used on triggers.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

I think the best solution here is a (swap shoulders/triggers) option. Then they can chose which profile type they want to have this configuration on.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Yes, totally perfect. The best for all controllers.


Hey, I would also have use of it if you add my DualSFX Evolution (I have added it to the controller spreadsheet). I have switched the shoulder buttons with the controller software, so it is more like a Xbox360 controller in PS3 games. But that is also affection how it works on PC, so with a converted Xbox360 profile it would be again like usual on PS3.
The stars on the action buttons mean that it is my interpretation for what would be the best, as they are arranged in a "2/3 circle" around the right stick instead as usual on most controllers.

As for the Nyko AirFlo, I couldn't figure out the number of the stick buttons.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

I guessed by the pattern that its button 11 and 12.

Errol
Xpadder Xpert
Posts: 306
Joined: 02 Oct 2011, 19:48
Location: Strange Place
Contact:

Re: Layout Conventions

Post by Errol »

Good Morning to you guys Primal & Oke_Doke. Its now 8:10 Am over here thats why I'm saying Morning. I've been following your thing so far and since you started and I don't have a clue as to what you all are trying to do and I also wish to be with you guys to throw in my contribution. I've changed my name from Errol to Smiley for personal reasons...anyway I have right now three different controllers at my disposal an X360, Logitech Rumble Gamepad F510 and a Logitech Rumblepad 2. If there be anything I can contribute with just tell me what and how to do it, I'll be more than happy to assist.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Layout Conventions

Post by Primal Fear »

Oke_Doke wrote:I guessed by the pattern that its button 11 and 12.
No. The equivalent for the PS-Button is Button11, so my guess would be Button12 and 13.
But I wouldn't call it save enough to put any work in it. On the other hand, it's your work so you decide.

BTW: Your new links in the first post aren't working. There is a / missing in [/url]
Edit: I made a form for other users, to add the data of their controller directly to the sheet (assuming they know how to open the game controller control panel).
https://docs.google.com/spreadsheet/vie ... bG5TbWc6MQ

@Smiley
I will explain it for you:
Let's say we have a profile for a Xbox360 (out of the forum, for example) and we want to use it on a different controller that is similar, let's say the Rumblepad2. But if you simply load the Xbox360 profile on the RumblePad, the buttons will be mixed up an the triggers are missing. You can try that with your controllers.
The reason for is that the gamepad manufacturers use different layout for their controller. Every button has a number and these can vary from controller to controller. I have noted these button numbers here in my spreadsheet, of the controllers I know or I could figure out.
PGP has (or better must have) some kind of conversion integrated. For Xpadder this is not really an option as Jonathan wants it as lightweight as possible. And having the data for dozens controllers integrated means much more data, so much higher program size.
I think converting the profiles directly in the browser, without handling any files, is the perfect solution for that. The only thing that could improve what Oke_Doke already made, would be the possibility to directly select for what controller you want to have the profile. But therefore a real DataBase would be necessary.

You can do one thing. As you have a RumblePad2, you can test the conversion for it. Convert one of your Xbox360 profile with the converter and check if the outcome is a exact copy. Try also the "Swap Shoulder and Trigger Assignments" option.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Layout Conventions

Post by Oke_Doke »

Primal Fear wrote: For Xpadder this is not really an option as Jonathan wants it as lightweight as possible. And having the data for dozens controllers integrated means much more data, so much higher program size.
I would imagine it would also be a headache to keep up to date.
Primal Fear wrote:The only thing that could improve what Oke_Doke already made, would be the possibility to directly select for what controller you want to have the profile. But therefore a real DataBase would be necessary.
:idea: Oh that's awesome! The spreadsheets could just be that database. Since profiles are added through a form, we will actually never need to write to this "database". Publish it and target the cells with url parameters. After that I'm sure we can find a way to pass the content of a cell into the converter, and there we have it. a complete (albeit ad-hoc ) system for registering profiles and making them available to any controller. :ugeek:

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Profile Converter (Alpha)

Post by Primal Fear »

First: I have tested the converter for my DualSFX Evolution and didn't find any problems.
Oke_Doke wrote: :idea: Oh that's awesome! The spreadsheets could just be that database. Since profiles are added through a form, we will actually never need to write to this "database". Publish it and target the cells with url parameters. After that I'm sure we can find a way to pass the content of a cell into the converter, and there we have it. a complete (albeit ad-hoc ) system for registering profiles and making them available to any controller. :ugeek:
These forms are not really good this purpose. Pasting a profile in only one line is already not really nice, but typing some text with explanations and possible technical advices in only one line would be simply horrible.
Also, how do you imagine to "target cells with url parameters"?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Profile Converter (Alpha)

Post by Oke_Doke »

By selecting "Publish to the Web" your given options to display the contents of the spreadsheet into a variety of formats (WebPage,Html embed, CSV, TXT,PDF,ATOM,RSS,XLS,ODS). You also have control over which cells to display. The document format and which cells are displayed in the page are determined by the parameters in the url.
A form can be designed to Allow public Submissions while keeping access of the document itself private.
EXAMPLE: Submit a profile

Code: Select all

https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AncPVXd70lRQdEJIenVUcnNqYzJrUllMVmVGeDZRelE&single=true&gid=0&range=D1%3AD10&output=html
Example Profile Manager Spreadsheet D1:D10* column
Example Profile Manager Spreadsheet D2:D2* 1 cell

EDIT: So its just a matter of dynamically generating the url and finding the correct technique for passing the information around.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Profile Converter (Alpha)

Post by Oke_Doke »

I'll be away from the planet for a while I hope to be back in the spring to continue on some of these ideas about editing and managing profiles with javascript. Happy Hollidays Everyone.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Profile Converter (Alpha)

Post by Primal Fear »

Heading to Kepler-22b? :lol:

Errol
Xpadder Xpert
Posts: 306
Joined: 02 Oct 2011, 19:48
Location: Strange Place
Contact:

Re: Profile Converter (Alpha)

Post by Errol »

I was going to say the same thing too Primal :lol:
Oke_Doke enjoy your well deserved break.
And a happy holidays to you.

Jonathan
Xpadder creator
Posts: 1737
Joined: 24 Aug 2009, 11:33
Location: England
Contact:

Re: Profile Converter (Alpha)

Post by Jonathan »

:shock: This is awesome! Stickied

RandomClown
Posts: 14
Joined: 14 Nov 2009, 06:27

Re: Profile Converter (Alpha)

Post by RandomClown »

Super

Another thing that can be done:
- 1 profile with every button name is set to a character [button1=A, etc]
- The person then loads that profile to any gamepad & press the physical buttons in a specific order in a web-form/program
- The conversion engine then compares the diff & swaps the keys correctly
This way, no magic table is required. As a programmer, I hate magic constants [if you know what I mean].


Is there a list of all the button names?
<Edit>
As far as I can tell, these are the only buttons:

Code: Select all

Button*
Stick*[Up|Down|Left|Right]
Trigger[Left|Right]
DPad[Up|Down|Left|Right]
Are there more I dont know of?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Profile Converter (Alpha)

Post by Oke_Doke »

RandomClown wrote:Super

Another thing that can be done:
- 1 profile with every button name is set to a character [button1=A, etc]
- The person then loads that profile to any gamepad & press the physical buttons in a specific order in a web-form/program
- The conversion engine then compares the diff & swaps the keys correctly
This way, no magic table is required. As a programmer, I hate magic constants [if you know what I mean].
A converter wizard is something I've also considered. I'm training my self up on the subject of input.
RandomClown wrote: Is there a list of all the button names?
<Edit>
As far as I can tell, these are the only buttons:

Code: Select all

Button*
Stick*[Up|Down|Left|Right]
Trigger[Left|Right]
DPad[Up|Down|Left|Right]
Are there more I dont know of?
There's set numbers to take into account if were looking to do set management as well.
But other than that, it seems to be everything.

Embarrassingly I've kind of attacked this without planing ahead. (prone to infatuation with novelty)
I need to draw a road map to understand what I really want to accomplish here and do so in an orderly fashion.

I'll not be playing the mastermind on this little tool.
You or anyone else are welcome to take action on any ideas one might have.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Profile Converter (Alpha)

Post by Primal Fear »

RandomClown wrote: Is there a list of all the button names?
<Edit>
As far as I can tell, these are the only buttons:

Code: Select all

Button*
Stick*[Up|Down|Left|Right]
Trigger[Left|Right]
DPad[Up|Down|Left|Right]
Are there more I dont know of?
Actually the Dpad and the Sticks doesn't matter in the conversion as they are the same in every controller layout (at least if is a controller with a similar layout to the Xbox360pad, which is anyways the plan).
RandomClown wrote: Another thing that can be done:
- 1 profile with every button name is set to a character [button1=A, etc]
- The person then loads that profile to any gamepad & press the physical buttons in a specific order in a web-form/program
- The conversion engine then compares the diff & swaps the keys correctly
This way, no magic table is required. As a programmer, I hate magic constants [if you know what I mean].
Do you really think the need to load a profile and to fill out a form evertime before using the converter would be a good idea? My plan is currently, if someone wants to have his controller added he posts the button numbers in this post or fills out this form (btw, I really could make a profile for it) so Oke_Doke can add this controller to the converter. But that doesn't seem to be pretty popular.

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Profile Converter (Alpha)

Post by Primal Fear »

I have added profile to enter the button order of other controllers into the for form (including a manual and a link to the form, of course). If we should have sometimes some more controllers, I guess we should create groups that contain controller with the same button order. But at the moment it doesn't look anyways like there would be any need for this.


@Oke_Doke: What do you think about tidying up this topic. I would delete every post that had to do with the original development of your alpha version and only leave comment that where for this alpha version. I would either start here (Jonathan's post) with leaving the posts or here (my post).

In another matter, I have added the Thrustmaster Run'n'Drive to the spreadsheet. It's layout is also used for a number of other Thrustmaster controllers in the same style (long handles).

Errol
Xpadder Xpert
Posts: 306
Joined: 02 Oct 2011, 19:48
Location: Strange Place
Contact:

Re: Profile Converter (Alpha)

Post by Errol »

Primal Fear wrote:...What do you think about tidying up this topic. I would delete every post that had to do with the original development of your alpha version and only leave comment that where for this alpha version. I would either start here (Jonathan's post) with leaving the posts or here (my post).
Primal I personally believe its a great idea. You can start from here and just leave the important stuff. I don't even mind if you delete my thread in this same post and even Jonathan's because his only contribution
Jonathan wrote:This is awesome! Stickied
Lets keep it tidy and clean so Oke_Doke can keep updating this post, and even better yet if you can close this post so no one else can create any more threads or reply.

SGTCableDog
Xpadder Xpert
Posts: 1118
Joined: 27 Aug 2009, 03:35
Location: Minnesota, USA
Contact:

Re: Profile Converter (Alpha)

Post by SGTCableDog »

Primal, You could spit this topic into a main topic and a discussion topic.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter

Post by Oke_Doke »

Split the Profile Converter topic into this Discussion thread. The app's development status thread is here.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter Next Version

Post by Oke_Doke »

The idea of manual controller conversion popped into my mind yesterday and primal brought up RandomClown's previous proposal to use a test profile to generate a unique conversion for less popular controllers. There's no reason why we can't have it both ways.

Giving the user power to make custom conversion types and share them if they choose would be very usefull and eliminate the need to update the conversion types as popular controllers and drivers change. I'm too lazy at the moment to add a proper DMS to this little app. So Instead the converter should output a code, like a fingerprint, unique to their type of controller containing the key for it's button arrangement after the user completes a manual conversion wizard. Others could use this code to skip the wizard altogether if someone else has already posted their controller's code in the forums.

The most common controller codes would still be available from a dropdown list. Just as it is now.

The application doesn't sound like it would change much in the way it works.
  • A wizard button with instructions.
  • A new label in the profile's head with a short string of characters (the controller's fingerprint).
  • An advanced option with a two column matrix for manually entering or checking the conversion key
Conversion Wizard's Profile: Show

Code: Select all

;--- Xpadder Profile Data ---
DataType=Profile
Version=2012.05.01
Name=Wizard_(x123456789abcdefghijklmnopqrstuvw)
Set1Button1Slots=1
Set1Button2Slots=2
Set1Button3Slots=3
Set1Button4Slots=4
Set1Button5Slots=5
Set1Button6Slots=6
Set1Button7Slots=7
Set1Button8Slots=8
Set1Button9Slots=9
Set1Button10Slots=A
Set1Button11Slots=B
Set1Button12Slots=C
Set1Button13Slots=D
Set1Button14Slots=E
Set1Button15Slots=F
Set1Button16Slots=G
Set1Button17Slots=H
Set1Button18Slots=I
Set1Button19Slots=J
Set1Button20Slots=K
Set1Button21Slots=L
Set1Button22Slots=M
Set1Button23Slots=N
Set1Button24Slots=O
Set1Button25Slots=P
Set1Button26Slots=Q
Set1Button27Slots=R
Set1Button28Slots=S
Set1Button29Slots=T
Set1Button30Slots=U
Set1Button31Slots=V
Set1Button32Slots=W
EDIT: Looks like Xpadder eats the Fingerprint label. I guess we could always put the code in the profile name?

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter

Post by Oke_Doke »

OK here's another quirky idea. Pasting in a Controller layout from xpadder, if the buttons where arranged according to a standard diagnostic image. (triggers go here, face buttons go here, etc..)
The converter could then determine the buttons purpose by reading the coordinates. This generates a code to use in converting profiles for it.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter Hypothetical Wizard scenario

Post by Oke_Doke »

Wizard [X](close overlay)

Before using this Wizard, Connect the gamepad you want to use to your pc. Open Xpadder and make sure the sticks Dpad buttons and triggers have been added to Xpadders controller "layout". Then [helplink]paste in[/helplink] this special Wizard Profile.
Wizard Profile: Show

Code: Select all

;--- Xpadder Profile Data ---
DataType=Profile
Version=2012.05.01
Name=Wizard_(x123456789abcdefghijklmnopqrstuvw)
Set1Button1Slots=1
Set1Button2Slots=2
Set1Button3Slots=3
Set1Button4Slots=4
Set1Button5Slots=5
Set1Button6Slots=6
Set1Button7Slots=7
Set1Button8Slots=8
Set1Button9Slots=9
Set1Button10Slots=A
Set1Button11Slots=B
Set1Button12Slots=C
Set1Button13Slots=D
Set1Button14Slots=E
Set1Button15Slots=F
Set1Button16Slots=G
Set1Button17Slots=H
Set1Button18Slots=I
Set1Button19Slots=J
Set1Button20Slots=K
Set1Button21Slots=L
Set1Button22Slots=M
Set1Button23Slots=N
Set1Button24Slots=O
Set1Button25Slots=P
Set1Button26Slots=Q
Set1Button27Slots=R
Set1Button28Slots=S
Set1Button29Slots=T
Set1Button30Slots=U
Set1Button31Slots=V
Set1Button32Slots=W
wireframe: Show
Image
TAB through the fields on the diagram and press the equivilent buttons on your controller as they appear in the wizard, If your controller's anatomy doesn't match the diagaram decide which buttons would work best for your situation. blank buttons will not be explicitly defined in the generated key. "0"

[Exploded GamePad Diagram]

[]Top Face Button

[]Right Face Button

[]Bottom Face Button

[]Left Face Button

"If the face buttons are not arranged in this manner or you have a diffrent number of face buttons, you may use which ever mapping suits you best."

[]Left Button "shoulders"

[]Right Button

[]Left Trigger "If nothing happens, the triggers may be analog only. In this case you may skip these."

[]Right Trigger

[]Select/Back

[]Start

[]Left Stick button

[]Right Stick button

[Generate] "You can test your generated keycode by pressing your controller buttons, the diagram will highlight up the corresponding buttons pressed. Adjust the fields as you wish and hit generate again."

Primal Fear
Xpadder Xpert
Posts: 2437
Joined: 09 Feb 2010, 16:41
Location: Germany
Contact:

Re: Discussion: Profile Converter

Post by Primal Fear »

The idea with the code is really good. It would be if the user could save a bookmark that includes this code (like "http://oke-doke.com/Xpadder/XpadderProf ... 100ba.html". That way the user wouldn't have to save the code somewhere else, and could directly of the profile converter with his special code. But I don't know if this is anyways possible.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter

Post by Oke_Doke »

Yup that's possible with parameters. Something like Converter.html?xc=892046c100ba the profile can just get if it's there. easy.

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter

Post by Oke_Doke »

Jeeze, that code idea would work really well why didn´t you follow up on it, Oke_Doke? ;-)

Oke_Doke
Xpadder Xpert
Posts: 327
Joined: 21 Dec 2009, 16:17
Location: jupiter
Contact:

Re: Discussion: Profile Converter

Post by Oke_Doke »

Oke_Doke wrote:Jeeze, that code idea would work really well why didn´t you follow up on it, Oke_Doke? ;-)

Whelp, better late than never. Weekend Project! :shifty:

Calyx
Posts: 2
Joined: 06 Mar 2015, 12:31

Re: Discussion: Profile Converter

Post by Calyx »

I have a Logitech F310 Controller.
When filling out your form X, L. Stick Button, R. Stick Button are left blank.

Post Reply

Return to “Game Profiles”