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)
m directly link to 3DS:Error screens/Luma3DS exception screen instead of a redirect
Shinobijolteon (talk | contribs)
update
 
(7 intermediate revisions by 2 users 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>


|-|Universal Updater=
|-|Universal-Updater=


<span>
<span>
=== What you need ===
=== What you need ===
* A working internet connection
* A working internet connection
* [[3DS:Universal-Updater|Universal Updater]] installed on your console
* [[3DS:Universal-Updater|Universal-Updater]] installed on your console
* [[3DS:luma3DS|Luma3DS]] updated to 13.0+
* [[3DS:luma3DS|Luma3DS]] updated to 13.0+


=== Instructions ===
=== Instructions ===
# Power on your console
# Power on your console
# Launch '''Universal Updater'''
# Launch '''Universal-Updater'''
# Select the magnifying glass on the bottom screen, then search for '''rehid'''
# Select the magnifying glass on the bottom screen, then search for '''rehid'''
# Press {{B|A}} while hovering over '''rehid''' from the list of homebrew
# Press {{B|A}} while hovering over '''rehid''' from the list of homebrew
# Choose <code>rehidhelper.cia</code>
# Choose <code>rehidhelper.cia</code>
# Wait until the app finishes installing
# Wait until the app finishes installing
# Close '''Universal Updater'''
# Close '''Universal-Updater'''
# Launch '''RehidHelper''' and select <code>Download Rehid</code>
# Launch '''RehidHelper''' and select <code>Download Rehid</code>
# Wait for it to download and reboot, then press {{B|B}} to exit the app
# Wait for it to download and reboot, then press {{B|B}} to exit the app
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">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight>
::Syntax: <syntaxhighlight lang="json">{
*: 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.
    "keys":[
*:: 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)</p>
        {"press":"ZR","get":"R"},
*: You can use this to do custom key combos, such as the following:
        {"press":"ZL","get":"L"}
*::<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.
}</syntaxhighlight>
* <code>"cpad":</code> Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190.</p>
::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.
** 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>
:::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)
* <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).
::You can use this to do custom key combos, such as the following:
** Syntax: <syntaxhighlight lang="json">{"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}</syntaxhighlight>
::<syntaxhighlight lang="json">{
* <code>"touchtokeys":</code> Maps the given area on the touch screen at the given XY coordinates to output a key press when tapped.</p>
    "keys":[
** Syntax: <syntaxhighlight lang="json">{"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}</syntaxhighlight>
        {"press":"X+Y","get":"R"},
*: The above example creates a box starting at x=10 y=20 that has a height of 50 and a width of 100.  
        {"press":"SELECT","get":"L+R"}
* Other options include:
    ]
** <code>"cpadtodpad":true</code> Automatically redirects all C-Pad inputs to the D-Pad.<br>
}</syntaxhighlight>
** <code>"dpadtocpad":true</code> Automatically redirects all D-Pad inputs to the C-Pad.<br>
::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>"overidecpadpro":true</code> Stops games from recognizing the Circle Pad Pro.<br>
:<code>"turbo":</code> Maps one or more key(s) to toggle different key(s) to be repeatedly triggered with a given delay.
** <code>"homebutton":</code> Remaps the HOME button to one or more key press(es).</p>
::Syntax: <syntaxhighlight lang="json">{
* All of the above options can be used at once in one remapping. For example:</p>
    "turbo":[
*: <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>
        {"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)
** {{Tree icon|d}} luma
** {{Tree icon|d}} luma
*** {{Tree icon|d}} sysmodules
*** {{Tree icon|d}} sysmodules
**** {{Tree icon|f}} 0004013000001D02.cxi
**** {{Tree icon|f}} 0004013000001D02.cxi '''''(rehid enabled)'''''
**** {{Tree icon|f}} 0004013000003302.ips
**** {{Tree icon|f}} 0004013000003302.ips
**** {{Tree icon|f}} rehid.cxi '''''(rehid disabled)'''''
** {{Tree icon|d}} rehid
** {{Tree icon|d}} rehid
*** {{Tree icon|f}} rehid.json
*** {{Tree icon|f}} rehid.json
Line 132: 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.