From 43df492d699239211cee22c3e5d2ce4e41143ee4 Mon Sep 17 00:00:00 2001 From: Scribbler Date: Thu, 8 Feb 2024 22:53:34 +0000 Subject: [PATCH] yubideck and tasoller sections done, brokenithm still unfinished --- docs/games/chunithmsunplus/controllers.md | 86 +++++++++++++++++--- docs/img/chunithmsunplus/chuniio_onedll.png | Bin 0 -> 9692 bytes docs/img/chunithmsunplus/chuniio_twodll.png | Bin 0 -> 10281 bytes 3 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 docs/img/chunithmsunplus/chuniio_onedll.png create mode 100644 docs/img/chunithmsunplus/chuniio_twodll.png diff --git a/docs/games/chunithmsunplus/controllers.md b/docs/games/chunithmsunplus/controllers.md index 4c52273..f00d915 100644 --- a/docs/games/chunithmsunplus/controllers.md +++ b/docs/games/chunithmsunplus/controllers.md @@ -2,20 +2,82 @@ -Keyboard (sucks) +### How Controller Input works with segatools -Brokenithm --iPad --Android +!!! note "segatools:" + `segatools`, the loader used to run CHUNITHM, does not come with any built-in controller support. By default it will only accept keyboard input. + The controller you plan on using with the game should also be provided with IO files, in the form of `*.dll`. If unsure, you can check the support section of the site you purchased your controller from, or email the vendor directly. + Alternate options for the most common controllers are listed below. + These `dll` files should be copied to your `\App\bin\` folder, alongside `chusanApp.exe`, and referenced in your `segatools.ini`. -Tasoller --AMD --Intel +!!! tip "" + The input files you wish to use need to be referenced in the `[chuniio]` section of `segatools.ini`. + If the `dll` files you plan to use consist of 2 files, with names ending in `_x86.dll` and `_x64.dll`, uncomment the `path32` and `path64` lines by removing the `;` from the beginning. Add your file names after the `=`. -Yubideck + -chuni-hands (?) --webcam airs, does anyone actually use this seriously. +!!! tip "" + If the input file you wish to use consists of a single `*.dll`, uncomment only the `path` line, and enter the dll name after the `=`. -chusan-touch (?) --like brokenithm but you block your view of the game. \ No newline at end of file + + +*** + +!!! note "Controllers:" + Below is a quick introduction and setup guide for the commonly used input methods. + +### Keyboard + +!!! tip "" + Keyboard is the default input method, and while not recommended for playing the game, it is useful for testing purposes. + The default layout uses `SDFGHJKL` for the slider input, and `Space Bar` for the AIRs. + If you wish to change the default keybinds, an explanation for how to set these is included above the `[io3]` section in your `segatools.ini`. + +### Brokenithm + +!!! note "Brokenithm:" + Brokenithm allows you to use an Android tablet or iPad as a controller for CHUNITHM. It uses the bottom half of the screen as the touch slider, and sliding from the bottom section into the top section of the screen activates the AIR sensors. + +!!! tip "" + todo: + android + ipad + +### Tasoller + +!!! note "Tasoller:" + The Tasoller is an arcade accurate controller, produced by DJ-DAO. + Out of the box, the Tasoller will only offer keyboard input, with no lighting support. To get full compatability with CHUNITHM, you will need to install [custom firmware](https://pixeldrain.com/u/DajSPEoa). Instructions on how to install the firmware are included in the archive. + +!!! danger "Warning:" + The Tasoller custom firmware is only compatabile with controllers running the DJ-DAO 2.0 firmware. If your controller was purchased after January 2022, it should have shipped with the update already applied. + If your Tasoller was purchased before 2022, and is still using the original firmware it shipped with, you will need to first update to 2.0 by following the guide on [DJ-DAO's website](https://www.dj-dao.com/en/support/11.html). + Once you've updated your controller to the DJ-DAO 2.0 firmware, you can follow the instructions included with the Custom Firmware as normal. + +!!! tip "" + DJ-DAO doesn't directly provide any input assistance for customers wanting to play on data. Thankfully there are community members creating open source alternatives. + There are two up to date drivers available for the Tasoller, with full support for Dniel97's segatools fork. Functionally these work the same as eachother, with the only difference being the language they are written in. + + [chuniio-tasoller](https://gitea.tendokyu.moe/Scribbler/chuniio-tasoller) written in `zig`. + [chuniio-rs](https://gitea.tendokyu.moe/beerpsi/chuniio-rs) written in `rust`. + + Head to the `Releases` tab for your chosen driver, and download the latest package. For `chuniio-rs` make sure you download the `chusan.zip`. + Extract the `*.dll` files to your `\App\bin\` folder. + Make the required changes to `segatools.ini`, as shown in the `Configuration` section of the readme for the driver you have downloaded. + +### YubiDeck + +!!! note "YubiDeck:" + The YubiDeck is an arcade accurate controller, produced by ZhouSensor and sold by YubiParts. It also includes a built in Aime card scanner. + +!!! tip "" + YubiDeck firmware updates are provided in the support section of the YubiParts website. Unfortunately the IO driver they provide is no longer available for download. + + An open source alternative is available, [chuniio-yubideck](https://gitea.tendokyu.moe/beerpsi/chuniio-yubideck). + Head to the `Releases` tab and download the latest package. Extract the `*.dll` files to your `\App\bin\` folder. + Make the required changes to `segatools.ini`, as shown in the `Configuration` section of the chuniio-yubideck readme. + + If you want to make use of the built-in card scanner, add the following line to the `[aimeio]` section in `segatools.ini`. + ```json + path=aimeio_yubideck.dll + ``` \ No newline at end of file diff --git a/docs/img/chunithmsunplus/chuniio_onedll.png b/docs/img/chunithmsunplus/chuniio_onedll.png new file mode 100644 index 0000000000000000000000000000000000000000..87c33ce0bfe81eb8b4f247fb93a4fcd7c072274f GIT binary patch literal 9692 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 J)$*1R{{v#W1!n*N literal 0 HcmV?d00001 diff --git a/docs/img/chunithmsunplus/chuniio_twodll.png b/docs/img/chunithmsunplus/chuniio_twodll.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9d1c4b39c7d301c9f21a249c82d7164474465b GIT binary patch literal 10281 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 P`~u0oRf3dDehBy