Illusion: Honey Select 2 and Koikatsu Sunshine - SR6 BepinEx Plugin

Hi everyone,

Groax here. First time poster, long time lurker.

Based on the work done by hs2_robotics ( GitHub - hs2robotics/HS2_SexRobotController: Honey Select 2 Sex Robot Controller Plugin · GitHub ), I’ve taken this code and updated it for Honey Select 2 (HS2).
In addition to that, I was also able to make the code work for Koikatsu Sunshine (KKS).
This Plugin enables the usage of multi-axis using the SR6 (I assume OSR would also work, I don’t have one, so can’t test it) via Serial (i.e. you need a USB-Cable).
It works in the Main game (HS2, KKS), Free-H (KKS) and VR (HS2, KKS).

HS2 Plugin Settings:

KKS Plugin Settings:

What is the main difference between this and the original HS2_SexRobotController?

First of all, the original is only for Honey Select 2 and didn’t include all the positions. I’ve taken all the names (which I have) and with these updated the list (including adding footjob).

Secondly, I’ve added a second multiplier for the L0/Stroke, as I found some positions to be way too slow (barely moving) and a select few to be too fast (Anal Piledriver). The issue here is that the movement mapped onto the SR6 is correct, but the movement in game is too short for it to be properly mapped into a noticeable sensation. Thus the second multiplier option. To switch between the two while in the scene itself, I’ve added an option under the female Clothing menu.

HS2:

KKS:

As an addendum to that, what must also be said is that for a lot of positions, the movements feel more like strokes and only a select few might give that true “multi-axis” sensation.

I’ve also added the option to read animations from file, so that animation names that aren’t included in the Plugin library can be included without needing to rebuild it.

I set the maximum multiplier value to 5, as going above 5 made it stop moving (the original had 10).

What isn't supported/not available?

HS2 Studio isn’t supported, nor do I plan on implementing support for it (I don’t use it).
The same goes for KKS, but for KKS a Studio version is being developed: For the Koikatu CharaStudio provides link osr2 sr6 plug-ins as well as script playback procedures .

Wireless is not supported (Bluetooth/WiFi), I also don’t plan on implementing that.

That being said, feel free to fork or a make a pull request if you would like to implement these.

How do I add it to the game?

Assuming the installation path is for example C:\\Illusion, then you need to go to C:\\Illusion\\HoneySelect2\\BepInEx\\plugins. My recommendation is to create a folder for the Library: HS2_SexRobotController or KKS_SexRobotController and add the library file (*.dll) here.

Start the game, open the Plugin Settings (F1), search for “robot” and enable “Connect via Serial” and select the relevant COM Port. Adjust the speed ranges as needed. Keyboard Shortcut for connecting/disconnecting is Shift + S.

There is also a secondary button in the clothing menu, which switches between the two speed multipliers. The settings menu contains some of the shortcut buttons (not present in KKS VR).

HS2 Menu:

KKS Menu (will first be displayed after a sex scene is started/loaded):

Adding animations/positions to be read from file

When enabling the option to read from file, a file which contains the known animations/positions will be created (“sexRobotController.txt”). The file is only created if it doesn’t exists to serve as a template, you can delete everything in the file if you want to. However, the file with this name must be present for your positions to be read.

The animations are divided into positions (i.e. what body part should be tracked). One of these values must be used in the pairing.

  • ORAL
  • BREASTS
  • LEFTHAND / RIGHTHAND
  • INTERCRURAL
  • VAGINAL
  • ANAL
  • LEFTFOOT / RIGHTFOOT / BOTH_FEET

Threesome:

  • ORALSWAP
  • BREASTSWAP
  • LEFTHANDSWAP / RIGHTHANDSWAP
  • INTERCRURALSWAP
  • VAGINALSWAP
  • LEFTFOOTSWAP / RIGHTFOOTSWAP

As can be seen in the file, these are in the format:
<animationName>, <bodypart>

Some examples:

Handjob, LEFTHAND
Sitting Titjob, BREASTS
Sitting side, VAGINAL

This need to be a match with the list above, if not there will be no movement. For example, if the right hand is used in a handjob and the left hand is set to be tracked, there will be no movement, since the part tracked isn’t moving. Animations that aren’t listed/known can be printed in the terminal, hence why I recommend first enabling the BepInEx Logging (Plugin settingsBepInExLogging.DiskEnabled). Then, under the SexRobotController Plugin settings, enable BepInEx Debug: Print position (console).

For HS, all the Foreplay (Receiving) are not included, the same is true for KKS.In addition, for KKS, the idle animation name will be printed too: 立ち愛撫 (this can be ignored).

You don’t need to restart the game to use the newly added animations, but you do need to execute the following steps to load the recently added animations:

  1. Open Plugin settings and for the SexRobotController, disable and then re-enable the “Read positions from file” option.
  2. Select a different animation to read the content from file (the content of the file is read once, on animation change)

If after adding a new position (and you’ve disabled and re-enabled the Reaad positions from file), check the BepInEx Log (found in <GameDir>\BepInEx) for errors. Here is an example of how an error could look like, if an invalid value was added (in this example, the value INVALID was set for the body part, which doesn’t exist).

[Info   :HS2_SexRobotController] Error updating Animation dictionary: System.ArgumentException: Requested value 'INVALID' was not found.
  at HS2_SexRobotController.FileHandler.readPositionsFromFile () [0x0007c] in <ca2677a8d684461c82753f125094d4f9>:0
  at HS2_SexRobotController.SerialPortConnection.CheckButtonAndSerialConnState () [0x0001a] in <ca2677a8d684461c82753f125094d4f9>:0
Can I use this in Linux?

Short answer: Yes, using Steam + Proton.

To ensure the translations are loaded, add the following to Launch options:
WINEDLLOVERRIDES="winhttp=n,b" %command%

Steam menuGamesAdd Non-steam Game to my library<addYourGame>.
After adding: PropertiesCompatibilitySteam Proton (I recommend 10 or 11).

The COM Port can be a tad more tricky, as per default it usually sets my SR6 to be mapped to COM33. Further complicating things is that sometimes it switches between /dev/ttyUSB0 and /dev/ttyUSB1 if the cable is temporarily removed. I have therefore added a udev rule to map my SR6, which in turn I’ve used to map the COM Port in Steam.

Create UDEV RULE

Get the device info:

lsusb | grep -i uart
Bus 003 Device 005: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

udevadm info --attribute-walk /dev/bus/usb/003/005 > /tmp/sr6.txt

cat /tmp/sr6.txt |less
    KERNEL=="3-1"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ...
    ATTR{idProduct}=="ea60"
    ATTR{idVendor}=="10c4"
    ATTR{ltm_capable}=="no"
    ATTR{manufacturer}=="Silicon Labs"
    ATTR{product}=="CP2102 USB to UART Bridge Controller"
    ATTR{serial}=="0001"
    ...

Create a rule:

sudo vim /usr/lib/udev/rules.d/60-sr6.rules && sudo udevadm control --reload-rules

Content of /usr/lib/udev/rules.d/60-sr6.rules:

# deviceID 10c4:ea60
# SYMLINK: /dev/sr6USB
# Kernel adjusted, see:
# https://askubuntu.com/questions/1021547/writing-udev-rule-for-usb-device
KERNEL=="ttyUSB*" SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="sr6USB", ATTRS{serial}=="0001", ATTRS{product}=="CP2102 USB to UART Bridge Controller"

Trigger rule (optional, will cause a slight lag for the next 5-10 seconds):

sudo udevadm trigger

Verify rule was executed successfully:

ll /dev/sr6USB
lrwxrwxrwx 1 root root 7 20. Dez 09:35 /dev/sr6USB -> ttyUSB0

Then, you need to find the identifier for the game you previously added.

cd $HOME/.local/share/Steam/steamapps/compatdata/

Find the folder containing the game (mine is without spaces)

grep -ri 'honeyselect2' -m1

As an example, let’s say my ID for HS2 is ‘123’:

steamID=123
vim $HOME/.local/share/Steam/steamapps/compatdata/$steamID/pfx/system.reg

Search for the following line:

[Software\\Wine\\Ports]

Below this line (or below the content, if any), add the following:

[Software\\Wine\\Ports]
"com1"="/dev/sr6USB"
"com33"="/dev/sr6USB"

Note that the latter part (editing the System registry key for Proton) needs to be done for both games separately (if you have both HS2 and KKS).

The current version for HS2 is v2.2 and for KKS it is v1.9. Rename the files by removing the *.txtfrom the filename.
HS2_SexRobotController.dll.txt (62.5 KB)
KKS_SexRobotController.dll.txt (71.5 KB)

Although i consider myself done developing these, I’ve linked here my GitHub repositories. If any updates are made later on, these can be found here.

10 Likes

Hey man,

Your plugin is really impressive! It perfectly solves the multi-axis limitation that has existed in Illusion games for so long. I’m currently testing it with Koikatsu Sunshine and will actively report any bugs or suggestions I encounter.

That being said, may I ask if it’s possible to port the plugin to the original Koikatsu as well?

Koikatsu has been out for a very long time and has developed an enormous ecosystem with tons of mods and character cards, making it significantly more replayable than Sunshine for many players. Although I’m not very familiar with the technical differences between the two games, it feels like Illusion basically used the same engine to release the new version. So I assume the SR6 connection process should be quite similar.

If you have the time and interest, it would be great if you could consider supporting Koikatsu too. Of course, this is just a friendly suggestion — feel free to take it or leave it.

Thank you again for creating such an awesome plugin!

2 Likes

Thank you, that was precisely the reason for why I made them. After I built my SR6 and went from VAM back to HS2 / KKS, the difference was just that noticeable. Granted, for a lot of the animations, the difference might be low, but those “random” shakes or movements just makes that much more of a difference.

As for Koikatsu, I don’t have that one, so I can’t really develop a plugin for that one. What I have done is to take the code that I had for KKS and just replaced the referenced libraries from “KKS” to “KK”. I cannot guarantee that this will work/run, nor do I personally have the time/interest in doing a deep dive into KK (KKS was a nightmare to get working).

Should anyone be interested, I have pushed the code into a separate repository. Please note, that I will not develop the KK Plugin nor can I aid in resolving any problems that could arise (hence why I’ve archived the repository and tagged the DLL as “Pre-Release”). The intention (as written in the README) is mostly to allow someone who’d like to make the Plugin code work for KK get there “faster” (as in, at least have code that builds).

Doesn’t love machine support koikatsu? I haven’t been able to start delving into this stuff yet but iirc version 4 now supports multi axis, ofc idk how good the tracking is though…