3DS:Rehid: Difference between revisions
From Hacks Guide Wiki
More actions
add "turbo" config option to →Config file: , and cleaned up some stray </p>'s |
update |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 5: | Line 5: | ||
| for3ds = 1 | | for3ds = 1 | ||
| developers = hax0kartik | | developers = hax0kartik | ||
| version = | | version = 5.0 | ||
| releasedate = | | 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 = | | 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. | ||
= | {{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.}} | ||
== 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). | |||
::Syntax: <syntaxhighlight lang="json">{ | |||
"keys":[ | |||
{"press":"ZR","get":"R"}, | |||
{"press":"ZL","get":"L"} | |||
] | |||
}</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. | |||
:::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: | |||
::<syntaxhighlight lang="json">{ | |||
"keys":[ | |||
{"press":"X+Y","get":"R"}, | |||
{"press":"SELECT","get":"L+R"} | |||
] | |||
}</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. | |||
:<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">{ | |||
"turbo":[ | |||
{"press":"ZL+ZR","get":"A","framedelay":5} | |||
] | |||
}</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. | |||
:<code>"cpad":</code> Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190. | |||
::Syntax: <syntaxhighlight lang="json">{ | |||
"cpad":[ | |||
{"press":"CUP","get":[0,190]}, | |||
{"press":"CDOWN","get":[0,-190]}, | |||
{"press":"CLEFT","get":[-190,0]}, | |||
{"press":"CRIGHT","get":[190,0]} | |||
] | |||
}</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). | |||
::Syntax: <syntaxhighlight lang="json">{ | |||
"touch":[ | |||
{"press":"LEFT+UP","get":[0,0]}, | |||
{"press":"RIGHT+DOWN","get":[320,240]} | |||
] | |||
}</syntaxhighlight> | |||
:<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">{ | |||
"touchtokeys":[ | |||
{"press":[10,20,50,100],"get":"A"} | |||
] | |||
}</syntaxhighlight> | |||
::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: | |||
::<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>"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). | |||
:All of the above options can be used at once in one remapping. For example: | |||
::<syntaxhighlight lang="json">{ | |||
"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" | |||
}</syntaxhighlight> | |||
=== SD file layout === | ===SD file layout=== | ||
{{Tree list}} | {{Tree list}} | ||
* {{Tree icon|sd}} (root) | * {{Tree icon|sd}} (root) | ||
| Line 136: | 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
![]() | |
| Developer(s) | hax0kartik |
|---|---|
| Console | Nintendo 3DS |
| Version | 5.0 (April 5, 2026) |
| Links | |
| Website | gbatemp.net/threads/585387 |
| GitHub | hax0kartik/rehid |
| Download | |
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
- A working internet connection
- Universal-Updater installed on your console
- Luma3DS updated to 13.0+
Instructions
- Power on your console
- Launch Universal-Updater
- Select the magnifying glass on the bottom screen, then search for rehid
- Press A while hovering over rehid from the list of homebrew
- Choose
rehidhelper.cia - Wait until the app finishes installing
- Close Universal-Updater
- Launch RehidHelper and select
Download Rehid - Wait for it to download and reboot, then press B to exit the app
- Power off your console
- While holding SELECT, power on your console to enter the Luma3DS configuration menu
- Turn on Enable loading external FIRMs and modules if it is not already enabled
- Press START to save and exit
What you need
- The latest release of rehid (the
0004013000001D02.cxiandrehidhelper.ciafiles) - FBI installed on your console
- A v13.0 or higher version of Luma3DS'
boot.firmon the root of your SD card
Instructions
- Copy
0004013000001D02.cxitosd:/luma/sysmodules/- Create the folder
sysmodulesif it doesn't exist
- Create the folder
- Copy
rehidhelper.ciato the root of your SD card - Reinsert your SD card into your console
- Launch FBI and select
SD->rehidhelper.cia->Install and delete CIA - Press A and wait for the CIA to install, then exit FBI
- Power off your console
- While holding SELECT, power on your console to enter the Luma3DS configuration menu
- Turn on Enable loading external FIRMs and modules if it is not already enabled
- Press START to save and exit
Usage
Adding configs
- Open the 3DS Remap Builder and configure your key mappings
- 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.jsoninto the foldersd:/rehid, orsd:/rehid/<title ID>/if you only want to remap a specific game. You can find the title ID of your game using 3dsdb
- If you are unable to scan QR codes on your console, instead click Build this remap and place the downloaded
- Power on your console and launch RehidHelper
- Select Scan QR Code and scan the generated QR code from the website
- Press 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
- Press START to exit
Disabling Rehid
- Launch RehidHelper from the HOME Menu
- Select Toggle Rehid State
- Press B to reboot
Removing configs
- For global configurations, delete
sd:/rehid/rehid.jsonor, for a configuration set to a title deletesd:/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)
- The keys you can use for this are:
- 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.
- Syntax:
"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.
- Syntax:
"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]} ] }
- Syntax:
"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]} ] }
- Syntax:
"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.
- Syntax:
- Other options include:
"cpadtodpad":trueAutomatically redirects all C-Pad inputs to the D-Pad."dpadtocpad":trueAutomatically redirects all D-Pad inputs to the C-Pad."overidecpadpro":trueStops 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
(root)
luma
sysmodules
0004013000001D02.cxi (rehid enabled)
0004013000003302.ips
rehid.cxi (rehid disabled)
rehid
rehid.json
<title ID>
rehid.json
Troubleshooting
An exception occurred
Check the Luma3DS exceptions page for information on exceptions.
