|
|
| (6 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> |
| 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. |