Tutorial: Making older gamepads work in GameMaker

Discussion in 'Legacy GameMaker Community Tech Support' started by foldupgames, Jul 21, 2016.

  1. foldupgames

    foldupgames Guest

    Hey guys, I recently got an NES-style gamepad for a work-related project. It doesn't work on the new gamepad functions, but the old joystick commands will make it behave. I wanted to share for future reference.

    Those joystick inputs seem a little more limited, but are working! Here's the reference in the GM manul: https://docs.yoyogames.com/source/d... and other controls/joystick input/index.html

    One big limitation is that it does not seem to have a "key press" or a "key release" type function, so you'll need to work around it. Your code will have to be more like a button check to see if the button is active. Think of it a "keyboard_check_direct" for everything and you'll get it. Here are a few tips on writing code for it.

    1) MAKE SURE WINDOWS SEES IT

    You should be seeing it work under your USB Controller settings. This is really helpful because you can also get a read on what it considers to be the button's numbers. It won't tell you the D-Pad's direction number, but it will give you a number for every other button. You'll want that

    2) CHECK TO SEE IF GM DETECTS THE GAMEPAD

    if joystick_exists(1)

    That's the catch-all to use at the start of any gamepad code or if you want to draw something to confirm. Mind you, this can lead to game slowdowns if you have it in a STEP event, so you will do better to create a global variable and have it check it periodically on an alarm somewhere, such as a main control object. If it pings every few seconds, you should be fine.

    3) CHECK D-PAD DIRECTIONS

    You can have Game Maker draw what it's seeing as Direction Pad inputs with this bit of code:
    draw_text(x,y,joystick_direction(id))

    For mine:
    101=no direction, 100=left, 104=up, 102=right, 98=down, 103=up left, 105=up+right, 97=down+left, 99=down+right

    To put it to use, you'd do something like this:
    if joystick_direction(id)=102 //pressing right
    hspeed=10 //move right

    4) CHECK BUTTON PRESSES

    Remember up in Step 1 when you checked inputs? Let's put them to use
    joystick_check_button(1, 1)

    What that means (the pad you're using, the button being pushed)

    Example of jump code
    if (joystick_check_button(1, 1) or joystick_check_button(1, 2)) //If they press B OR A
    vspeed=-10

    CONCLUSION

    That's all. I hope it helps someone in the future!
     
    Zerb Games and Husi012 like this.
  2. Zerb Games

    Zerb Games Member

    Joined:
    Jun 27, 2016
    Posts:
    259
    Thanks man!
     
  3. rocky balboa

    rocky balboa Member

    Joined:
    Jan 28, 2019
    Posts:
    6
    Thanks for the tutorial.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice