3DS:Rehid: Difference between revisions
From Hacks Guide Wiki
More actions
add more usage |
remove line about turbo not preventing press keys from being pressed. is actually an issue with ZL and ZR |
||
| (8 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{Infobox homebrew | {{Lowercase title}}{{Infobox homebrew | ||
| title = | | title = rehid | ||
| image = rehid-Helper-banner.png | | image = rehid-Helper-banner.png | ||
| imagealt = RehidHelper | | imagealt = RehidHelper's HOME Menu banner | ||
| for3ds = 1 | | for3ds = 1 | ||
| developers = hax0kartik | | developers = hax0kartik | ||
| Line 12: | Line 12: | ||
| universaldb = 3ds/rehid | | universaldb = 3ds/rehid | ||
}} | }} | ||
'''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 === | ||
* 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 === | ||
# Power on | # Power on your console | ||
# Launch '''Universal-Updater''' | # Launch '''Universal-Updater''' | ||
# | # 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 | # 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 | ||
# Power off your | # Power off your console | ||
# While holding {{B|SELECT}}, power on your console to enter Luma3DS configuration | # While holding {{B|SELECT}}, power on your console to enter [[3DS:Luma3DS/Configuration|the Luma3DS configuration menu]] | ||
# | # Turn on '''Enable loading external FIRMs and modules''' if it is not already enabled | ||
# Press {{B|START}} to save and exit | # Press {{B|START}} to save and exit | ||
</span> | </span> | ||
|-|Manual= | |-|Manual= | ||
<span> | <span> | ||
=== | === What you need === | ||
* | * The latest release of {{GitHub|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 | ||
* [[3DS:luma3DS|Luma3DS]] | * A v13.0 or higher version of [[3DS:luma3DS|Luma3DS]]' <code>boot.firm</code> on the root of your SD card | ||
===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 61: | Line 65: | ||
# 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 | # Power off your console | ||
# While holding {{B|SELECT}}, power on your console to enter Luma3DS configuration | # While holding {{B|SELECT}}, power on your console to enter [[3DS:Luma3DS/Configuration|the Luma3DS configuration menu]] | ||
# | # Turn on '''Enable loading external FIRMs and modules''' if it is not already enabled | ||
# Press {{B|START}} to save and exit | # Press {{B|START}} to save and exit | ||
</span> | </span> | ||
</tabber> | </tabber> | ||
==Usage== | == Usage == | ||
===Adding configs=== | === Adding configs === | ||
# | # 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 | #* 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 | # 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| | # Press {{B|START}} to exit | ||
===Disabling Rehid=== | === Disabling Rehid === | ||
# | # 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 === | |||
* 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 == | ||
=== 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: | ||
: <code>"keys":</code> Maps one or more keys to press different key(s). | |||
:: Syntax: <syntaxhighlight lang="json">{ | |||
<syntaxhighlight lang="json">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight> | "keys":[ | ||
{"press":"ZR","get":"R"}, | |||
{"press":"ZL","get":"L"} | |||
<syntaxhighlight lang="json">{"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}</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. | ||
<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) | ||
:: You can use this to do custom key combos, such as the following: | |||
<syntaxhighlight lang="json">{"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}</syntaxhighlight> | ::<syntaxhighlight lang="json">{ | ||
"keys":[ | |||
<syntaxhighlight lang="json">{"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}</syntaxhighlight> | {"press":"X+Y","get":"R"}, | ||
{"press":"SELECT","get":"L+R"} | |||
] | |||
<code>"cpadtodpad":true</code> | }</syntaxhighlight> | ||
<code>"dpadtocpad":true</code> | :: 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> | : <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> | :: Syntax: <syntaxhighlight lang="json">{ | ||
"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}} sysmodules | |||
**** {{Tree icon|f}} 0004013000001D02.cxi '''''(rehid enabled)''''' | |||
**** {{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 | ||
*** {{Tree icon|d}} | *** {{Tree icon|d}} <title ID> | ||
**** {{Tree icon|f}} rehid.json | **** {{Tree icon|f}} rehid.json | ||
{{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. | |||
[[Category:Nintendo 3DS guides]] | [[Category:Nintendo 3DS guides]] | ||
[[Category:Nintendo 3DS homebrew]] | [[Category:Nintendo 3DS homebrew]] | ||