Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

3DS:Rehid: Difference between revisions

From Hacks Guide Wiki
ItsCrocoSwine (talk | contribs)
remove line about turbo not preventing press keys from being pressed. is actually an issue with ZL and ZR
Shinobijolteon (talk | contribs)
update
 
(2 intermediate revisions by one other user not shown)
Line 5: Line 5:
| for3ds = 1
| for3ds = 1
| developers = hax0kartik
| developers = hax0kartik
| version = 4.0
| version = 5.0
| releasedate = 2023-07-20
| releasedate = 2026-04-05
| website= https://gbatemp.net/threads/585387/ gbatemp.net/threads/585387
| website= https://gbatemp.net/threads/585387/ gbatemp.net/threads/585387
| github = hax0kartik/rehid
| github = hax0kartik/rehid
| githubtag = v4.0
| githubtag = v5.0
| universaldb = 3ds/rehid
| universaldb = 3ds/rehid
}}
}}
Line 15: Line 15:
'''rehid''' is a rewrite of the 3DS' hid module that allows you to flexibly remap buttons or the touch screen in 3DS titles.
'''rehid''' is a rewrite of the 3DS' hid module that allows you to flexibly remap buttons or the touch screen in 3DS titles.


== Features ==
{{critical|text=Rehid does not work outside of 3DS Mode, so DS games, DSiWare, and GBA VC cannot have its buttons remapped using it. A workaround for DS games can be found [https://shocoman.github.io/3ds_nds_remap_codegen/ here] in the form of making a custom <code>usrcheat.dat</code> cheat file. If using open_agb_firm, you can remap buttons in <code>/3ds/open_agb_firm/config.ini</code> by referring to the [https://github.com/profi200/open_agb_firm#input Input] section.}}
* '''Remapping Buttons''' - Rehid allows you to remap buttons or combinations of buttons to different buttons or combos.
* '''Remapping Directional Input''' - Rehid also lets you remap the circle pad, remap the C stick, and/or map the circle pad and D-pad to each other.
* '''Remapping Touch''' - You can assign button inputs to points on the touchscreen, or map specific parts of the touchscreen to buttons.
* '''Per-Game Remaps''' - Rehid allows you to choose between applying a remap to only one specific title or applying it to all titles at once.
* '''RehidHelper''' - Rehid features an app to help you download its sysmodules, scan QR codes to install remaps, or disable rehid entirely.


== Installation ==
==Features==
*'''Remapping Buttons''' - Rehid allows you to remap buttons or combinations of buttons to different buttons or combos.
*'''Remapping Directional Input''' - Rehid also lets you remap the circle pad, remap the C stick, and/or map the circle pad and D-pad to each other.
*'''Remapping Touch''' - You can assign button inputs to points on the touchscreen, or map specific parts of the touchscreen to buttons.
*'''Per-Game Remaps''' - Rehid allows you to choose between applying a remap to only one specific title or applying it to all titles at once.
*'''RehidHelper''' - Rehid features an app to help you download its sysmodules, scan QR codes to install remaps, or disable rehid entirely.
 
==Installation==


<tabber>
<tabber>
Line 73: Line 75:
</tabber>
</tabber>


== Usage ==
==Usage==


=== Adding configs ===
===Adding configs===
# Open the [https://mikahjc.github.io/3dsRemapBuilder/config 3DS Remap Builder] and configure your key mappings
#Open the [https://mikahjc.github.io/3dsRemapBuilder/config 3DS Remap Builder] and configure your key mappings
# When finished, click on '''Show as QR code'''
#When finished, click on '''Show as QR code'''
#* If you are unable to scan QR codes on your console, instead click '''Build this remap''' and place the downloaded <code>rehid.json</code> into the folder <code>sd:/rehid</code>, or <code>sd:/rehid/<title ID>/</code> if you only want to remap a specific game. You can find the title ID of your game using [https://3dsdb.com/ 3dsdb]
#*If you are unable to scan QR codes on your console, instead click '''Build this remap''' and place the downloaded <code>rehid.json</code> into the folder <code>sd:/rehid</code>, or <code>sd:/rehid/<title ID>/</code> if you only want to remap a specific game. You can find the title ID of your game using [https://3dsdb.com/ 3dsdb]
# Power on your console and launch '''RehidHelper'''
#Power on your console and launch '''RehidHelper'''
# Select '''Scan QR Code''' and scan the generated QR code from the website
#Select '''Scan QR Code''' and scan the generated QR code from the website
# Press {{B|A}} to proceed
#Press {{B|A}} to proceed
# Select a title from the list for the remap to be applied to, or select global to apply it to the entire console
#Select a title from the list for the remap to be applied to, or select global to apply it to the entire console
# Press {{B|START}} to exit
#Press {{B|START}} to exit


=== Disabling Rehid ===
===Disabling Rehid===
# Launch '''RehidHelper''' from the HOME Menu
#Launch '''RehidHelper''' from the HOME Menu
# Select '''Toggle Rehid State'''
#Select '''Toggle Rehid State'''
# Press {{B|B}} to reboot
#Press {{B|B}} to reboot


=== Removing configs ===
===Removing configs===
* For global configurations, delete <code>sd:/rehid/rehid.json</code> or, for a configuration set to a title delete <code>sd:/rehid/<title ID>/rehid.json</code>
*For global configurations, delete <code>sd:/rehid/rehid.json</code> or, for a configuration set to a title delete <code>sd:/rehid/<title ID>/rehid.json</code>


== Configuration ==
==Configuration==


=== Config file ===
===Config file===
Rehid stores its key mappings in <code>.json</code> files located either as <code>sd:/rehid/rehid.json</code> for global mappings or in a title ID folder within <code>sd:/rehid/</code> to use with a specific title. You can manually create your own key mappings by creating a <code>rehid.json</code> file with the key mappings you want. Possible options include:
Rehid stores its key mappings in <code>.json</code> files located either as <code>sd:/rehid/rehid.json</code> for global mappings or in a title ID folder within <code>sd:/rehid/</code> to use with a specific title. You can manually create your own key mappings by creating a <code>rehid.json</code> file with the key mappings you want. Possible options include:
: <code>"keys":</code> Maps one or more keys to press different key(s).
:<code>"keys":</code> Maps one or more keys to press different key(s).
:: Syntax: <syntaxhighlight lang="json">{
::Syntax: <syntaxhighlight lang="json">{
     "keys":[
     "keys":[
         {"press":"ZR","get":"R"},
         {"press":"ZR","get":"R"},
Line 104: Line 106:
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
:: With the above, any time you press the {{B|ZR}} key, {{B|R}} key would be triggered, and any time you press the {{B|ZL}} key, {{B|L}} key would be triggered.
::With the above, any time you press the {{B|ZR}} key, {{B|R}} key would be triggered, and any time you press the {{B|ZL}} key, {{B|L}} key would be triggered.
::: The keys you can use for this are: <code>A</code>, <code>B</code>, <code>X</code>, <code>Y</code>, <code>SELECT</code>, <code>START</code>, <code>ZL</code>, <code>ZR</code>, <code>L</code>, <code>R</code>, <code>LEFT</code>, <code>RIGHT</code>, <code>UP</code>, <code>DOWN</code>, <code>CLEFT</code>(CPAD), <code>CRIGHT</code>(CPAD), <code>CUP</code>(CPAD), <code>CDOWN</code>(C-PAD), <code>CSLEFT</code>(C-STICK), <code>CSRIGHT</code>(C-STICK), <code>CSUP</code>(C-STICK), <code>CSDOWN</code>(C-STICK)
:::The keys you can use for this are: <code>A</code>, <code>B</code>, <code>X</code>, <code>Y</code>, <code>SELECT</code>, <code>START</code>, <code>ZL</code>, <code>ZR</code>, <code>L</code>, <code>R</code>, <code>LEFT</code>, <code>RIGHT</code>, <code>UP</code>, <code>DOWN</code>, <code>CLEFT</code>(CPAD), <code>CRIGHT</code>(CPAD), <code>CUP</code>(CPAD), <code>CDOWN</code>(C-PAD), <code>CSLEFT</code>(C-STICK), <code>CSRIGHT</code>(C-STICK), <code>CSUP</code>(C-STICK), <code>CSDOWN</code>(C-STICK)
:: You can use this to do custom key combos, such as the following:
::You can use this to do custom key combos, such as the following:
::<syntaxhighlight lang="json">{
::<syntaxhighlight lang="json">{
     "keys":[
     "keys":[
Line 113: Line 115:
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
:: With this, pressing {{B|X+Y}} will trigger {{B|R}} instead, and pressing {{B|SELECT}} will trigger both {{B|L}} and {{B|R}} at the same time.
::With this, pressing {{B|X+Y}} will trigger {{B|R}} instead, and pressing {{B|SELECT}} will trigger both {{B|L}} and {{B|R}} at the same time.
: <code>"turbo":</code> Maps one or more key(s) to toggle different key(s) to be repeatedly triggered with a given delay.
:<code>"turbo":</code> Maps one or more key(s) to toggle different key(s) to be repeatedly triggered with a given delay.
:: Syntax: <syntaxhighlight lang="json">{
::Syntax: <syntaxhighlight lang="json">{
     "turbo":[
     "turbo":[
         {"press":"ZL+ZR","get":"A","framedelay":5}
         {"press":"ZL+ZR","get":"A","framedelay":5}
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
:: With the above, any time you press the {{B|ZL+ZR}} key, {{B|A}} key would be repeatedly triggered, with a HID-frame delay of 5.
::With the above, any time you press the {{B|ZL+ZR}} key, {{B|A}} key would be repeatedly triggered, with a HID-frame delay of 5.
: <code>"cpad":</code> Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190.
:<code>"cpad":</code> Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190.
:: Syntax: <syntaxhighlight lang="json">{
::Syntax: <syntaxhighlight lang="json">{
     "cpad":[
     "cpad":[
         {"press":"CUP","get":[0,190]},
         {"press":"CUP","get":[0,190]},
Line 130: Line 132:
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
: <code>"touch":</code> Maps a key press to the given XY coordinates on the touchscreen, from 0,0 (top-left corner) to 320,240 (bottom-right corner).
:<code>"touch":</code> Maps a key press to the given XY coordinates on the touchscreen, from 0,0 (top-left corner) to 320,240 (bottom-right corner).
:: Syntax: <syntaxhighlight lang="json">{
::Syntax: <syntaxhighlight lang="json">{
     "touch":[
     "touch":[
         {"press":"LEFT+UP","get":[0,0]},
         {"press":"LEFT+UP","get":[0,0]},
Line 137: Line 139:
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
: <code>"touchtokeys":</code> Maps the given area on the touch screen at the given XY coordinates to output a key press when tapped.
:<code>"touchtokeys":</code> Maps the given area on the touch screen at the given XY coordinates to output a key press when tapped.
:: Syntax: <syntaxhighlight lang="json">{
::Syntax: <syntaxhighlight lang="json">{
     "touchtokeys":[
     "touchtokeys":[
         {"press":[10,20,50,100],"get":"A"}
         {"press":[10,20,50,100],"get":"A"}
     ]
     ]
}</syntaxhighlight>
}</syntaxhighlight>
:: The above example creates a box starting at x=10 y=20 that has a height of 50 and a width of 100.  
::The above example creates a box starting at x=10 y=20 that has a height of 50 and a width of 100.
: Other options include:
:Other options include:
:: <code>"cpadtodpad":true</code> Automatically redirects all C-Pad inputs to the D-Pad.<br>
::<code>"cpadtodpad":true</code> Automatically redirects all C-Pad inputs to the D-Pad.<br>
:: <code>"dpadtocpad":true</code> Automatically redirects all D-Pad inputs to the C-Pad.<br>
::<code>"dpadtocpad":true</code> Automatically redirects all D-Pad inputs to the C-Pad.<br>
:: <code>"overidecpadpro":true</code> Stops games from recognizing the Circle Pad Pro.<br>
::<code>"overidecpadpro":true</code> Stops games from recognizing the Circle Pad Pro.<br>
:: <code>"homebutton":</code> Remaps the HOME button to one or more key press(es).
::<code>"homebutton":</code> Remaps the HOME button to one or more key press(es).
: All of the above options can be used at once in one remapping. For example:
:All of the above options can be used at once in one remapping. For example:
:: <syntaxhighlight lang="json">{
::<syntaxhighlight lang="json">{
     "keys":[
     "keys":[
         {"press":"ZR","get":"R"},
         {"press":"ZR","get":"R"},
Line 172: Line 174:
}</syntaxhighlight>
}</syntaxhighlight>


=== SD file layout ===
===SD file layout===
{{Tree list}}
{{Tree list}}
* {{Tree icon|sd}} (root)
* {{Tree icon|sd}} (root)
Line 186: Line 188:
{{Tree list/end}}
{{Tree list/end}}


== Troubleshooting ==
==Troubleshooting==


=== An exception occurred ===
===An exception occurred===


Check the [[3DS:Error screens/Luma3DS exception screen|Luma3DS exceptions page]] for information on exceptions.
Check the [[3DS:Error screens/Luma3DS exception screen|Luma3DS exceptions page]] for information on exceptions.

Latest revision as of 19:53, 5 April 2026


rehid is a rewrite of the 3DS' hid module that allows you to flexibly remap buttons or the touch screen in 3DS titles.

Critical icon Rehid does not work outside of 3DS Mode, so DS games, DSiWare, and GBA VC cannot have its buttons remapped using it. A workaround for DS games can be found here in the form of making a custom usrcheat.dat cheat file. If using open_agb_firm, you can remap buttons in /3ds/open_agb_firm/config.ini by referring to the Input section.

Features

  • Remapping Buttons - Rehid allows you to remap buttons or combinations of buttons to different buttons or combos.
  • Remapping Directional Input - Rehid also lets you remap the circle pad, remap the C stick, and/or map the circle pad and D-pad to each other.
  • Remapping Touch - You can assign button inputs to points on the touchscreen, or map specific parts of the touchscreen to buttons.
  • Per-Game Remaps - Rehid allows you to choose between applying a remap to only one specific title or applying it to all titles at once.
  • RehidHelper - Rehid features an app to help you download its sysmodules, scan QR codes to install remaps, or disable rehid entirely.

Installation

What you need

Instructions

  1. Power on your console
  2. Launch Universal-Updater
  3. Select the magnifying glass on the bottom screen, then search for rehid
  4. Press A while hovering over rehid from the list of homebrew
  5. Choose rehidhelper.cia
  6. Wait until the app finishes installing
  7. Close Universal-Updater
  8. Launch RehidHelper and select Download Rehid
  9. Wait for it to download and reboot, then press B to exit the app
  10. Power off your console
  11. While holding SELECT, power on your console to enter the Luma3DS configuration menu
  12. Turn on Enable loading external FIRMs and modules if it is not already enabled
  13. Press START to save and exit

What you need

  • The latest release of rehid (the 0004013000001D02.cxi and rehidhelper.cia files)
  • FBI installed on your console
  • A v13.0 or higher version of Luma3DS' boot.firm on the root of your SD card

Instructions

  1. Copy 0004013000001D02.cxi to sd:/luma/sysmodules/
    • Create the folder sysmodules if it doesn't exist
  2. Copy rehidhelper.cia to the root of your SD card
  3. Reinsert your SD card into your console
  4. Launch FBI and select SD -> rehidhelper.cia -> Install and delete CIA
  5. Press A and wait for the CIA to install, then exit FBI
  6. Power off your console
  7. While holding SELECT, power on your console to enter the Luma3DS configuration menu
  8. Turn on Enable loading external FIRMs and modules if it is not already enabled
  9. Press START to save and exit

Usage

Adding configs

  1. Open the 3DS Remap Builder and configure your key mappings
  2. When finished, click on Show as QR code
    • If you are unable to scan QR codes on your console, instead click Build this remap and place the downloaded rehid.json into the folder sd:/rehid, or sd:/rehid/<title ID>/ if you only want to remap a specific game. You can find the title ID of your game using 3dsdb
  3. Power on your console and launch RehidHelper
  4. Select Scan QR Code and scan the generated QR code from the website
  5. Press A to proceed
  6. Select a title from the list for the remap to be applied to, or select global to apply it to the entire console
  7. Press START to exit

Disabling Rehid

  1. Launch RehidHelper from the HOME Menu
  2. Select Toggle Rehid State
  3. Press B to reboot

Removing configs

  • For global configurations, delete sd:/rehid/rehid.json or, for a configuration set to a title delete sd:/rehid/<title ID>/rehid.json

Configuration

Config file

Rehid stores its key mappings in .json files located either as sd:/rehid/rehid.json for global mappings or in a title ID folder within sd:/rehid/ to use with a specific title. You can manually create your own key mappings by creating a rehid.json file with the key mappings you want. Possible options include:

"keys": Maps one or more keys to press different key(s).
Syntax:
{
    "keys":[
        {"press":"ZR","get":"R"},
        {"press":"ZL","get":"L"}
    ]
}
With the above, any time you press the ZR key, R key would be triggered, and any time you press the ZL key, L key would be triggered.
The keys you can use for this are: A, B, X, Y, SELECT, START, ZL, ZR, L, R, LEFT, RIGHT, UP, DOWN, CLEFT(CPAD), CRIGHT(CPAD), CUP(CPAD), CDOWN(C-PAD), CSLEFT(C-STICK), CSRIGHT(C-STICK), CSUP(C-STICK), CSDOWN(C-STICK)
You can use this to do custom key combos, such as the following:
{
    "keys":[
        {"press":"X+Y","get":"R"},
        {"press":"SELECT","get":"L+R"}
    ]
}
With this, pressing X+Y will trigger R instead, and pressing SELECT will trigger both L and R at the same time.
"turbo": Maps one or more key(s) to toggle different key(s) to be repeatedly triggered with a given delay.
Syntax:
{
    "turbo":[
        {"press":"ZL+ZR","get":"A","framedelay":5}
    ]
}
With the above, any time you press the ZL+ZR key, A key would be repeatedly triggered, with a HID-frame delay of 5.
"cpad": Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190.
Syntax:
{
    "cpad":[
        {"press":"CUP","get":[0,190]},
        {"press":"CDOWN","get":[0,-190]},
        {"press":"CLEFT","get":[-190,0]},
        {"press":"CRIGHT","get":[190,0]}
    ]
}
"touch": Maps a key press to the given XY coordinates on the touchscreen, from 0,0 (top-left corner) to 320,240 (bottom-right corner).
Syntax:
{
    "touch":[
        {"press":"LEFT+UP","get":[0,0]},
        {"press":"RIGHT+DOWN","get":[320,240]}
    ]
}
"touchtokeys": Maps the given area on the touch screen at the given XY coordinates to output a key press when tapped.
Syntax:
{
    "touchtokeys":[
        {"press":[10,20,50,100],"get":"A"}
    ]
}
The above example creates a box starting at x=10 y=20 that has a height of 50 and a width of 100.
Other options include:
"cpadtodpad":true Automatically redirects all C-Pad inputs to the D-Pad.
"dpadtocpad":true Automatically redirects all D-Pad inputs to the C-Pad.
"overidecpadpro":true Stops games from recognizing the Circle Pad Pro.
"homebutton": Remaps the HOME button to one or more key press(es).
All of the above options can be used at once in one remapping. For example:
{
    "keys":[
        {"press":"ZR","get":"R"},
        {"press":"ZL","get":"L"}
    ],
    "cpad":[
        {"press":"CUP","get":[0,190]},
        {"press":"CDOWN","get":[0,-190]}
    ],
    "touch":[
        {"press":"LEFT+UP","get":[0,0]},
        {"press":"RIGHT+DOWN","get":[320,240]}
    ],
    "touchtokeys":[
        {"press":[10,20,50,100],"get":"A"}
    ],
    "cpadtodpad":true,
    "dpadtocpad":true,
    "overridecpadpro":true,
    "homebutton":"ZR+ZL"
}

SD file layout

  • SD card icon (root)
    • Folder icon luma
      • Folder icon sysmodules
        • File icon 0004013000001D02.cxi (rehid enabled)
        • File icon 0004013000003302.ips
        • File icon rehid.cxi (rehid disabled)
    • Folder icon rehid
      • File icon rehid.json
      • Folder icon <title ID>
        • File icon rehid.json

Troubleshooting

An exception occurred

Check the Luma3DS exceptions page for information on exceptions.