3DS:Rehid: Difference between revisions

From Hacks Guide Wiki
m (directly link to 3DS:Error screens/Luma3DS exception screen instead of a redirect)
(fixed touchtokeys explanation)
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Lowercase title}}{{Infobox homebrew
{{Infobox homebrew
| title = rehid
| title = Rehid
| image = rehid-Helper-banner.png
| image = rehid-Helper-banner.png
| imagealt = RehidHelper's HOME Menu banner
| imagealt = RehidHelper banner as used on the HOME Menu
| for3ds = 1
| for3ds = 1
| developers = hax0kartik
| developers = hax0kartik
| version = 4.0
| version = 4.0
| releasedate = 2023-07-20
| releasedate = 2023-07-20
| website= https://gbatemp.net/threads/585387/ gbatemp.net/threads/585387
| github = hax0kartik/rehid
| github = hax0kartik/rehid
| githubtag = v4.0
| githubtag = v4.0
| universaldb = 3ds/rehid
| universaldb = 3ds/rehid
}}
}}
'''Rehid''' is a rewrite of the 3DS' hid module, to allow for the remapping of buttons or the touch screen.


'''rehid''' is a rewrite of the 3DS' hid module that allows you to flexibly remap buttons or the touch screen in 3DS titles.
=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 the console
# Launch '''Universal Updater'''
# Launch '''Universal-Updater'''
# Select the magnifying glass on the bottom screen, then search for '''rehid'''
# Tap 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 installs
# 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
# Power off your console
# Power off your Console
# While holding {{B|SELECT}}, power on your console to enter [[3DS:Luma3DS/Configuration|the Luma3DS configuration menu]]
# While holding {{B|SELECT}}, power on your console to enter Luma3DS configuration
# Turn on '''Enable loading external FIRMs and modules''' if it is not already enabled
# Ensure that "'''Enable loading external FIRMs and modules'''" is selected
# Press {{B|START}} to save and exit
# Press {{B|START}} to save and exit
</span>
</span>


|-|Manual=
|-|Manual=
<span>
<span>
=== What you need ===
===what you need===
* The latest release of {{GitHub|hax0kartik/rehid/releases/latest|'''rehid'''}} (the <code>0004013000001D02.cxi</code> and <code>rehidhelper.cia</code> files)
* the latest release of [https://github.com/hax0kartik/rehid/releases/latest Rehid] (the <code>0004013000001D02.cxi</code> and <code>rehidhelper.cia</code> files)
* [[3DS:FBI|FBI]] installed on your console
* [[3DS:FBI|FBI]] installed on your console
* A v13.0 or higher version of [[3DS:luma3DS|Luma3DS]]' <code>boot.firm</code> on the root of your SD card
* [[3DS:luma3DS|Luma3DS]] updated to 13.0+


=== Instructions ===
===Instructions===
# Copy <code>0004013000001D02.cxi</code> to <code>sd:/luma/sysmodules/</code>
# Copy <code>0004013000001D02.cxi</code> to <code>sd:/luma/sysmodules/</code>
#* Create the folder <code>sysmodules</code> if it doesn't exist
#* Create the folder <code>sysmodules</code> if it doesn't exist
Line 65: Line 53:
# Launch '''FBI''' and select <code>SD</code> -> <code>rehidhelper.cia</code> -> <code>Install and delete CIA</code>
# Launch '''FBI''' and select <code>SD</code> -> <code>rehidhelper.cia</code> -> <code>Install and delete CIA</code>
# Press {{B|A}} and wait for the CIA to install, then exit '''FBI'''
# Press {{B|A}} and wait for the CIA to install, then exit '''FBI'''
# Power off your console
# Power off your Console
# While holding {{B|SELECT}}, power on your console to enter [[3DS:Luma3DS/Configuration|the Luma3DS configuration menu]]
# While holding {{B|SELECT}}, power on your console to enter Luma3DS configuration
# Turn on '''Enable loading external FIRMs and modules''' if it is not already enabled
# Ensure that "'''Enable loading external FIRMs and modules'''" is selected
# Press {{B|START}} to save and exit
# Press {{B|START}} to save and exit
</span>
</span>
</tabber>
</tabber>


== Usage ==
==Remapping buttons==
 
<tabber>
=== Adding configs ===
|-|Generated=
# Open the [https://mikahjc.github.io/3dsRemapBuilder/config 3DS Remap Builder] and configure your key mappings
<span>
# When finished, click on '''Show as QR code'''
# Go to [https://mikahjc.github.io/3dsRemapBuilder/config 3DS Remap Builder] to generate your remappings
#* 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]
# When finished click on '''Show as QR code'''
# Power on your console and launch '''RehidHelper'''
#* 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 a <code>rehid</code> folder on the root of your SD card, or <code>rehid/(title ID)/</code> to remap a specific game. You can find the title ID of your game using [https://3dsdb.com/ 3dsdb]
# Select '''Scan QR Code''' and scan the generated QR code from the website
# Power on your console and launch RehidHelper
# 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 for all titles
# Press {{B|START}} to exit
# Press {{B|start}} to exit
</span>


=== Disabling Rehid ===
|-|Manual=
# Launch '''RehidHelper''' from the HOME Menu
<span>
# Select '''Toggle Rehid State'''
<ol>
# Press {{B|B}} to reboot
<li><p>Create a <code>rehid.json</code> file with the remappings you want. possible options include:</p>
 
<p><code>"keys":</code> which maps a key press to another key press.<br>Possible Keys 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>
=== Removing configs ===
<syntaxhighlight lang="json">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight>
* 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>
<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.</p>
 
<p>You can also do custom key combos;</p>
== Configuration ==
<syntaxhighlight lang="json">{"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}</syntaxhighlight>
 
<p>With this any time you press {{B|X+Y}}, {{B|R}} key would be triggered, and any time you press the {{B|SELECT}} button, both {{B|L}} and {{B|R}} would be triggered.</p>
=== Config file ===
<p><code>"cpad":</code>, which maps a key press to a circle pad x and y coordinate from -190 to 190;</p>
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:
<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>"keys":</code> Maps one or more keys to press different key(s).
<p><code>"touch":</code>, which maps a key press to a given x,y coordinate on the touchscreen from 0,0 top left to 320,240 bottom right;</p>
** Syntax: <syntaxhighlight lang="json">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight>
<syntaxhighlight lang="json">{"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}</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.
<p><code>"touchtokeys":</code> which maps a box starting at a given x,y coordinate, with a given height and width, that when tapped will output a key press;</p>
*:: 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>
<syntaxhighlight lang="json">{"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}</syntaxhighlight>
*: You can use this to do custom key combos, such as the following:
<p>For this example, it creates a box starting at x=10 y=20, with a height of 50 and a width of 100.</p>
*::<syntaxhighlight lang="json">{"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}</syntaxhighlight>
<p>Other options include:<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>"cpadtodpad":true</code> maps the C-pad with D-pad key presses<br>
* <code>"cpad":</code> Maps a key press to the given XY coordinates on the Circle Pad, between -190 and 190.</p>
<code>"dpadtocpad":true</code> maps the D-pad with C-pad key presses<br>
** 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>"overidecpadpro":true</code> makes it so games don't recognize the circle pad pro<br>
* <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>"homebutton":</code> maps the HOME button to a key press</p>
** Syntax: <syntaxhighlight lang="json">{"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}</syntaxhighlight>
<p>These Options can be strung together into a single line, for example:</p>
* <code>"touchtokeys":</code> Maps the given area on the touch screen at the given XY coordinates to output a key press when tapped.</p>
<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>
** Syntax: <syntaxhighlight lang="json">{"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}</syntaxhighlight>
</li>
*: The above example creates a box starting at x=10 y=20 that has a height of 50 and a width of 100.  
<li>Copy <code>rehid.json</code> to a <code>rehid</code> folder on the root of your SD card
* Other options include:
<ul>
** <code>"cpadtodpad":true</code> Automatically redirects all C-Pad inputs to the D-Pad.<br>
<li>If you want to the remapping to be used for a specific title, copy <code>rehid.json</code> to <code>rihid/(title ID)/</code> instead. You can find the title ID of your game using [https://3dsdb.com/ 3dsdb]</li></ul>
** <code>"dpadtocpad":true</code> Automatically redirects all D-Pad inputs to the C-Pad.<br>
</li>
** <code>"overidecpadpro":true</code> Stops games from recognizing the Circle Pad Pro.<br>
</ol>
** <code>"homebutton":</code> Remaps the HOME button to one or more key press(es).</p>
</span>
* All of the above options can be used at once in one remapping. For example:</p>
</tabber>
*: <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 ===
{{Tree list}}
* {{Tree icon|sd}} (root)
** {{Tree icon|d}} luma
*** {{Tree icon|d}} sysmodules
**** {{Tree icon|f}} 0004013000001D02.cxi
**** {{Tree icon|f}} 0004013000003302.ips
** {{Tree icon|d}} rehid
*** {{Tree icon|f}} rehid.json
*** {{Tree icon|d}} <title ID>
**** {{Tree icon|f}} rehid.json
{{Tree list/end}}


== Troubleshooting ==
==Troubleshooting==


=== An exception occurred ===
===An exception occurred===
If your console crashes while booting with "an exception occurred" and the "current proccess:" is hid, you may have an old version of Rehid thats causing issues. Look for and delete <code>/luma/titles/0004013000001D02</code> and <code>/luma/titles/0004013000003302</code>. If these don't exist, you may have a more serious hardware issue, join the [https://discord.gg/C29hYvh Nintendo Homebrew Discord] and ask, in English, for help.


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


[[Category:Nintendo 3DS guides]]
[[Category:Nintendo 3DS guides]]
[[Category:Nintendo 3DS homebrew]]
[[Category:Nintendo 3DS homebrew]]

Revision as of 21:21, 27 March 2024

Rehid is a rewrite of the 3DS' hid module, to allow for the remapping of buttons or the touch screen.

Installation

what you need

instructions

  1. Power on the console
  2. Launch Universal-Updater
  3. Tap 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 installs
  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 Luma3DS configuration
  12. Ensure that "Enable loading external FIRMs and modules" is selected
  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
  • Luma3DS updated to 13.0+

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 Luma3DS configuration
  8. Ensure that "Enable loading external FIRMs and modules" is selected
  9. Press START to save and exit

Remapping buttons

  1. Go to 3DS Remap Builder to generate your remappings
  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 a rehid folder on the root of your SD card, or rehid/(title ID)/ 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 for all titles
  7. Press start to exit

  1. Create a rehid.json file with the remappings you want. possible options include:

    "keys": which maps a key press to another key press.
    Possible Keys 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)

    {"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.

    You can also do custom key combos;

    {"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}
    

    With this any time you press X+Y, R key would be triggered, and any time you press the SELECT button, both L and R would be triggered.

    "cpad":, which maps a key press to a circle pad x and y coordinate from -190 to 190;

    {"cpad":[{"press":"CUP","get":[0,190]},{"press":"CDOWN","get":[0,-190]},{"press":"CLEFT","get":[-190,0]},{"press":"CRIGHT","get":[190,0]}]}
    

    "touch":, which maps a key press to a given x,y coordinate on the touchscreen from 0,0 top left to 320,240 bottom right;

    {"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}
    

    "touchtokeys": which maps a box starting at a given x,y coordinate, with a given height and width, that when tapped will output a key press;

    {"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}
    

    For this example, it creates a box starting at x=10 y=20, with a height of 50 and a width of 100.

    Other options include:
    "cpadtodpad":true maps the C-pad with D-pad key presses
    "dpadtocpad":true maps the D-pad with C-pad key presses
    "overidecpadpro":true makes it so games don't recognize the circle pad pro
    "homebutton": maps the HOME button to a key press

    These Options can be strung together into a single line, 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"}
    
  2. Copy rehid.json to a rehid folder on the root of your SD card
    • If you want to the remapping to be used for a specific title, copy rehid.json to rihid/(title ID)/ instead. You can find the title ID of your game using 3dsdb

Troubleshooting

An exception occurred

If your console crashes while booting with "an exception occurred" and the "current proccess:" is hid, you may have an old version of Rehid thats causing issues. Look for and delete /luma/titles/0004013000001D02 and /luma/titles/0004013000003302. If these don't exist, you may have a more serious hardware issue, join the Nintendo Homebrew Discord and ask, in English, for help.