ENIGMA Forums

Sharing is caring => Tips, Tutorials, Examples => Topic started by: hpg678 on December 06, 2018, 07:24:16 am

Title: Using Joystick Functions in your game
Post by: hpg678 on December 06, 2018, 07:24:16 am
When developing your game/project, adding control for your gamepad can greatly enhance the fun playing. After all you may not want to use your keyboard all the time........at least for me anyways.


The gamepad functions don't work, you'll have to use the joystick functions. I did a short example using an Xbox One Classic controller which was modded for USB. My usual PS2 controller wasn't working well so i had to opt for this one. However a few days later, a friend brought one for me, so I now have two to use.


having written the code I did realize is that the Dpad and  Analog Sticks functions are very much the same for both controllers. The buttons assignment are different however. Bear that in mind when you assign buttons for either controller. You can create an options screen to do this.


To write the code, i used a program called 'jstest' on Linux a joystick/Gamepad diagnostic tool, which showed me the assignments for the buttons and analog sticks. From there I was able to match up what was what in the functions list and have it working.


the main segment of the code, i placed in the Draw event, as I wanted text to be written when I applied an action. Since then I had added graphics tp provide a better and more pleasant appearance. The code looks like this


Code: [Select]
draw_self();


if (joystick_exists(0))
 {
var name;
name = joystick_name(0); //gets the name of the controller
// show_message(name + " is connected.");
draw_set_color(c_lime);
draw_text(64, 32, name + " is connected.")
draw_set_color(c_black);
draw_text(65,33, name + " is connected.");


}
if !(joystick_exists(0))
{
  show_message("Joystick is not connected");
  //draw_set_color(c_red)
  //draw_text(64, 32, "Joystick is not connected")
}
// ///////////////////////////////////////////////////////////////////////////////


draw_set_color(c_white)
if (joystick_check_button(0, 0))
{
   //draw_text(448, 96, " 'A' button is pressed")
   draw_sprite(spr_highlight,0, 330, 200)
   draw_sprite( spr_highlight2,0, 462, 90)
   
}


if (joystick_check_button(0, 1))
{
   //draw_text(448, 128, " 'B' button is pressed")
   draw_sprite( spr_highlight,0, 360, 169)
   draw_sprite( spr_highlight2,0, 462, 129)
}


if (joystick_check_button(0, 2))
{
   //draw_text(448, 128, " 'Black ' button is pressed")
   draw_sprite( spr_highlight,0, 364, 229)
   draw_sprite( spr_highlight2,0, 462, 363)
}


if (joystick_check_button(0, 3))
{
   //draw_text(448, 128, " 'X' button is pressed")
   draw_sprite( spr_highlight,0, 299, 170)
   draw_sprite( spr_highlight2,0, 462, 168)
}


if (joystick_check_button(0, 4))
{
   //draw_text(448, 128, " 'Y' button is pressed")
   draw_sprite( spr_highlight,0, 330, 139)
   draw_sprite( spr_highlight2,0, 462, 207)
}


if (joystick_check_button(0, 5))
{
   //draw_text(64, 128, " 'White' button is pressed")
   draw_sprite( spr_highlight,0, 334, 252)
   draw_sprite( spr_highlight2,0, 462, 324)
}


if (joystick_check_button(0, 6))
{
   //draw_text(64, 128, " 'Back' button is pressed")
   draw_sprite( spr_highlight,0, 64, 213)
   draw_sprite( spr_highlight2,0, 462, 285)
}


if (joystick_check_button(0, 7))
{
   //draw_text(64, 128, " 'Start' button is pressed")
   draw_sprite( spr_highlight,0, 84, 239)
   draw_sprite( spr_highlight2,0, 462, 246)
}
]



Remember this was originally written using an Xbox One controller which has 8-Axis and 10 button assignments. My PS2 clone gamepad (DragonRise Inc. Generic USB  joystick) has 7-Axis and 12 buttons.


if you want you can use the code as a starting point. Feel free to improve it and use it as you want. hope it has been a little helpful to you.
Title: Re: Using Joystick Functions in your game
Post by: ProtoLink[Glyphic Enigma] on December 06, 2018, 11:12:11 am
This is helpful when coding controller support, yes, but there are a couple of issues with this;

1. This only works if everyone who plays the game is using the exact same controller model
2. This doesn't take into account controller reassignment (which would ultimately fix the first issue).

Im going to work on making a controller reassignment script and/or object and Ill post the tutorial on my Youtube channel. I may even post it here as well.