|
|
(8 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| {{Infobox homebrew | | {{Lowercase title}}{{Infobox homebrew |
| | title = Rehid | | | title = rehid |
| | image = rehid-Helper-banner.png | | | image = rehid-Helper-banner.png |
| | imagealt = RehidHelper banner as used on the HOME Menu | | | 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 allow for the remapping of buttons or the touch screen in 3DS titles.
| |
|
| |
|
| ==Features==
| | '''rehid''' is a rewrite of the 3DS' hid module that allows you to flexibly remap buttons or the touch screen in 3DS titles. |
| * '''Remapping Buttons''' - Rehid allows for the remapping of buttons or button combos to different buttons or combos.
| |
| * '''Remapping Directional Input''' - Rehid also lets you remap the circle pad or the C stick, and can map the circle pad or D-pad to each other.
| |
| * '''Remapping Touch''' - You can assign button inputs to points on the touchscreen, or map certain areas on the touchscreen to button.
| |
| * '''Per Game Remaps''' - Rehid allows you to save configurations to a specific title, or set a remap to be used globally.
| |
| * '''RehidHelper''' - Rehid features an app to help you download Rehid's sysmodules, scan QR codes to install configurations, or disable Rehid.
| |
|
| |
|
| ==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 the console | | # Power on your console |
| # Launch '''Universal-Updater''' | | # Launch '''Universal-Updater''' |
| # Tap 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 installs | | # 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 Console | | # 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]] |
| # Ensure that "'''Enable loading external FIRMs and modules'''" is selected | | # 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=== | | === What you need === |
| * the latest release of [https://github.com/hax0kartik/rehid/releases/latest Rehid] (the <code>0004013000001D02.cxi</code> and <code>rehidhelper.cia</code> files) | | * 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]] updated to 13.0+ | | * 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 Console | | # 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]] |
| # Ensure that "'''Enable loading external FIRMs and modules'''" is selected | | # 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 == |
| ===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 configure your key mappings | | #* 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''' |
| # 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 for all titles | | # Select a title from the list for the remap to be applied to, or select global to apply it to the entire console |
| #* Remaps applied to a specific title will take priority over global | | # Press {{B|START}} to exit |
| # Press {{B|start}} to exit | | |
| </span> | | === Disabling Rehid === |
| | # Launch '''RehidHelper''' from the HOME Menu |
| | # Select '''Toggle Rehid State''' |
| | # 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 == |
|
| |
|
| |-|Generated(broken camera)=
| | === Config file === |
| <span> | | 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: |
| <ol> | | * <code>"keys":</code> Maps one or more keys to press different key(s). |
| <li>Go to [https://mikahjc.github.io/3dsRemapBuilder/config 3DS Remap Builder] to configure your key mappings</li> | | ** Syntax: <syntaxhighlight lang="json">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight> |
| <li>When finished click on '''Build this remap''' and download <code>rehid.json</code></li> | | *: 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. |
| <li>Copy <code>rehid.json</code> to a <code>rehid</code> folder on the root of your SD card | | *:: 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) |
| <ul> | | *: You can use this to do custom key combos, such as the following: |
| <li>If you want the remap 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> | | *::<syntaxhighlight lang="json">{"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}</syntaxhighlight> |
| <li>Remaps applied to a specific title will take priority over global</li></ul> | | *: 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. |
| </li> | | * <code>"turbo":</code> Maps one or more key(s) to toggle different key(s) to be repeatedly triggered with a given delay. |
| </ol> | | ** Syntax: <syntaxhighlight lang="json">{"turbo":[{"press":"ZL+ZR","get":"A","framedelay":5}]}</syntaxhighlight> |
| </span> | | *: 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. Unlike other options, "turbo" does not prevent the "press" key(s) from triggering. |
| | * <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> |
|
| |
|
| |-|Manual=
| | === SD file layout === |
| <span>
| | {{Tree list}} |
| <ol>
| | * {{Tree icon|sd}} (root) |
| <li><p>Create a <code>rehid.json</code> file with the key mappings you want. possible options include:</p>
| | ** {{Tree icon|d}} luma |
| <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>
| | *** {{Tree icon|d}} sysmodules |
| <syntaxhighlight lang="json">{"keys":[{"press":"ZR","get":"R"},{"press":"ZL","get":"L"}]}</syntaxhighlight>
| | **** {{Tree icon|f}} 0004013000001D02.cxi '''''(rehid enabled)''''' |
| <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>
| | **** {{Tree icon|f}} 0004013000003302.ips |
| <p>You can also do custom key combos;</p>
| | **** {{Tree icon|f}} rehid.cxi '''''(rehid disabled)''''' |
| <syntaxhighlight lang="json">{"keys":[{"press":"X+Y","get":"R"},{"press":"SELECT","get":"L+R"}]}</syntaxhighlight>
| | ** {{Tree icon|d}} rehid |
| <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>
| | *** {{Tree icon|f}} rehid.json |
| <p><code>"cpad":</code>, which maps a key press to a circle pad x and y coordinate from -190 to 190;</p>
| | *** {{Tree icon|d}} <title ID> |
| <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>
| | **** {{Tree icon|f}} rehid.json |
| <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>
| | {{Tree list/end}} |
| <syntaxhighlight lang="json">{"touch":[{"press":"LEFT+UP","get":[0,0]},{"press":"RIGHT+DOWN","get":[320,240]}]}</syntaxhighlight>
| |
| <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>
| |
| <syntaxhighlight lang="json">{"touchtokeys":[{"press":[10,20,50,100],"get":"A"}]}</syntaxhighlight>
| |
| <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>
| |
| <p>Other options include:<br>
| |
| <code>"cpadtodpad":true</code> maps the C-pad with D-pad key presses<br>
| |
| <code>"dpadtocpad":true</code> maps the D-pad with C-pad key presses<br>
| |
| <code>"overidecpadpro":true</code> makes it so games don't recognize the circle pad pro<br>
| |
| <code>"homebutton":</code> maps the HOME button to a key press</p>
| |
| <p>These Options can be strung together into a single line, for example:</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>
| |
| </li>
| |
| <li>Copy <code>rehid.json</code> to a <code>rehid</code> folder on the root of your SD card
| |
| <ul>
| |
| <li>If you want the remap 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>
| |
| <li>Remaps applied to a specific title will take priority over global</li></ul>
| |
| </li>
| |
| </ol>
| |
| </span>
| |
| </tabber>
| |
|
| |
|
| ==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]] |