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).
In v2.2 I 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. This included a button found under the female clothing menu for switching between the two speeds.
In v2.3, this option was replaced with multipliers based on the in-game speed/LoopType (Idle, Weak, Strong, Orgasm, Climax). Furthermore, they are separated into Service and Insertion (Vaginal, Anal). This means a total of 8x sliders for adjusting the L0-/Stroke-Axis.
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. v2.3 includes the option to write animations which isn’t included in the Plugin to a separate file for easier copy/paste.
I set the maximum multiplier value to 5, as going above 5 made it stop moving (the original had 10).
Plugin Settings: Short explanations to the various settings
-
BepinEx Debug: Console output: Prints to console (and log) the current values and T-Code command being generated/sent (debugging). -
Read animations from file: When enabled, a file namedSexRobotController.txtwill be generated. Requires the plugin to be within a folder calledHS2_SexRobotController/KKS_SexRobotController. The file contains all the animation names included in the plugin. For more, see the below section “Adding animations/positions to be read from file”. -
Write animation names to file?: If the current animation that is playing isn’t part of the plugin, the name will be printed to console. To avoid having to search the BepinEx Log for entries containing missing animations, you can enable this option and have them written to a separate file instead. For HS2, all animation names in the Plugin is in English. For KKS, it’s mixed. Therefore, if you are using a non-English game version, you will most likely need to add these yourself to fileSexRobotController.txt. Please note that enabling this option doesn’t add the animation to this file, but instead creates a new file calledSRC_UnknownAnimations.txt. -
Sex Robot (L0) Section: Controls how much the device moves going up/down on the L0-Axis. Weak, Strong, Orgasm are the three main states during the sex animation. Orgasm is the last one (last third of the “progress bar”). Climax being the finish (in-game orgasm). -
Sex Robot (L*/R*) * min/max: These sliders can be left as-is (* = L0,L1, R0,R1; Stroke, Twist, …).. These just sets the limit for what the minimum and maximum range of movement is on the given axis. For example, if L0 Max was set to 0.5, it would mean that instead of going all the way to the top, it would only go halfway (50%).
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.
Adding animations/positions to be read from file
The option Read animations from file is something I added to account for the following two scenarios:
- I have not unlocked all scenes/animations (or I may have missed some)
- Players using a non-English version may end up with nothing happening, due to the displayed animations not matching what is included in the plugin.
When enabling this option, all the Plugin included animations/positions will be written to a file called SexRobotController.txt. This requires the plugin to be located within a folder called HS2_SexRobotController/ KKS_SexRobotController. The file is only created if it doesn’t already exist and you can delete everything within the file if you want to. However, the filename must be sexRobotController.txt for the plugin to read/load the added the animations.
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
Threesome:
- ORALSWAP
- BREASTSWAP
- LEFTHANDSWAP / RIGHTHANDSWAP
- INTERCRURALSWAP
- VAGINALSWAP
- LEFTFOOTSWAP / RIGHTFOOTSWAP
As can be seen in the file sexRobotController.txt, 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 settings → BepInEx → Logging.Disk → Enabled). Then, under the SexRobotController Plugin settings, enable BepInEx Debug: Print position (console).
For HS2, all the “Foreplay (Receiving)” are not included, the same is true for KKS.
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:
- Open Plugin settings and search for “robot”
- Within the settings for the SexRobotController, disable and then re-enable the
Read positions from fileoption. - Select a different animation, to ensure that the content from file is read (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 Read animations 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 menu → Games → Add Non-steam Game to my library → <addYourGame>.
After adding: Properties → Compatibility → Steam 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).
Troubleshooting
Troubleshooting
This is intended to be a short section covering known issues and problems.
First of all, I recommend enabling the BepinEx Logging: Plugin settings → BepInEx → Logging.Disk → Enabled. The below referenced Log file is found in <GameDir>\BepInEx\LogOutput.log.
Should none of the below suggestions work for you, please feel free to ask for help. See the section I need help with making the Plugin work for questions that I would like you to answer.
The Plugin does not show up in the BepinEx Menu
Check the Console/Log file to see if any errors are listed for the Plugin. Also verify that the Plugin is added to the correct folder and the path: <gamedir>\BepInEx\plugins\HS2_SexRobotController / <gamedir>\BepInEx\plugins\KKS_SexRobotController.
I get an error, saying that it could not connect on COMx
Please check if your device is connected and the correct port is selected. Only USB connection is supported, the default Port set is COM1. In Windows, the default is usually COM3 and in Linux COM33.
My device is connected, but it does not move at all…
First, please check for any errors in the Console or in the Log file.
If you have a non-English version, you will need to add the animations yourself (see the section Adding animations/positions to be read from file).
If there are no other errors printed to the Console or present in the Log file, then via the Plugin Settings, enable the Option BepinEx Debug Console. This will print the current information to Console and write it to the Log.
Then, if not already done, start the sex animation, and see what numbers are produced for _autoMin and _autoMax. Do these numbers look like this: _autoMin: 1 and _autoMax: 0?
If so, it could be that the character model, a Mod or another Plugin is causing problems. Please try with one of the default characters in the game, to rule out the current character model as the cause of the problem (I had an issue in HS2, where the Outfit (boots) was causing the issue for a recently downloaded character).
My device moves for some characters, but not all of them…
Do you have any errors in the Console/Log after loading the given character(s)? Via the Plugin Settings, enable the Option BepinEx Debug Console and check if the values are constantly _autoMin: 1 and _autoMax: 0 after the sex animation is started. If so, either the character model or the outfit they are wearing could be causing the issue.
My device works in normal mode (in-game, Free-H), but not in VR…
The Plugin works for both normal and VR. If the Plugin works for the given characters and the given animations in normal mode, but not in VR, please check the Console/Log for errors. It could be that another Plugin is failing in VR, which then ends up causing this Plugin to not get the relevant coordinate/axis data.
Known Plugin issues
BetterPenetrationin HS2 can throw aNullReferenceException. One user reported the removal of this made their device move. The following is the error I got:
[Error : Unity Log] NullReferenceException
Stack trace:
UnityEngine.Transform.get_position () (at <a43c47796b1b4dc78509dc74aec2356b>:0)
Core_BetterPenetration.DanAgent.AdjustDanToTargetKokan (Core_BetterPenetration.CollisionAgent targetAgent, System.Boolean twoDans) (at <6f1a7deaa57e48e089553fcfd376c373>:0)
Core_BetterPenetration.DanAgent.SetDanTarget (Core_BetterPenetration.CollisionAgent targetAgent, System.Boolean twoDans) (at <6f1a7deaa57e48e089553fcfd376c373>:0)
Core_BetterPenetration.CoreGame.LookAtDanUpdate (UnityEngine.Transform lookAtTransform, System.String currentMotion, System.Boolean topStick, System.Boolean changingAnimation, System.Int32 maleNum, System.Int32 femaleNum, System.Boolean twoDans, System.
Boolean isInScene) (at <6f1a7deaa57e48e089553fcfd376c373>:0)
HS2_BetterPenetration.HS2_BetterPenetration.H_Lookat_dan_PostLateUpdate (H_Lookat_dan __instance, AIChara.ChaControl ___male) (at <6f1a7deaa57e48e089553fcfd376c373>:0)
(wrapper dynamic-method) H_Lookat_dan.DMD<H_Lookat_dan::LateUpdate>(H_Lookat_dan)
Why are you blaming my character/outfit/plugin when it is your Plugin that is not working?
Good question. First of all, I’m not claiming that the problem is definitely caused by something on your end - and it is definitely not my intention to claim my Plugin works flawlessly. However, I cannot look over your shoulder and see where the problem lies.
I myself had the somewhat unexpected problem of my device not moving for a new character that I downloaded for HS2. I had the scene going with an older character, loaded the new one - and my device didn’t move. Switching to another character - my device moved again. In my case, the plugin BetterPenetration threw a NullReferenceException, which might have impacted the coordinates/axes in the game itself. Noteworthy is here, that the animation played normally.
The SexRobotController Plugin reads the given axes from the game and uses it to then calculate how the device should move. If the device gets invalid data, it will lead to it not moving or barely moving. I honestly didn’t bother investing any time in figuring out why BetterPenetration caused my Plugin to fail. After a lot of try and fail (in terms of editing the character), it turned out, the error didn’t lie in the BoneMod or Body for the character, but the Outfit (specifically, the boots).
This is the reason why I am suggesting to check with vanilla characters, since this excludes the character and the outfit as a cause for the issue. Unfortunately, if I cannot reproduce the problem on my end, there is not really that much else that I can do, other than to suggest checking if another Plugin could be the cause of the lack of movement.
Checking if the Plugin works with clean HF_Patch Installation
Warning
Do not attempt the following without first making a backup of your entire folder.
This method is destructive and will remove all plugins, their configurations and your installed mods.
For my installations, I did a “clean” install of the HF_Patch, by choosing at the end for it to remove and delete existing mods and plugins. After the HF-Patch was installed, I added the Plugin and verified that it worked. Therefore, at the time of writing, with a “clean” install of the below HF_Patch, the plugin should work.
- Honey Select 2: HS2-HF_Patch v3.1
- Koikatsu Sunshine: KKS-HF_Patch v2.2
If my plugin then works in the “clean” version, it means that either one of your Plugins or Mods is causing the conflict. I don’t have a solution for how to fix this, my only suggestion would be to copy over each plugin separately and see which one causes the error. Before you do, create a copy of the plugins folder, in case you decide to copy over all your old, non-existent plugins into the “clean install” HF_Patch folder.
Please note that this is a really time-consuming process, since you need to download the relevant HF_Patch (2-4Gb), along with needing enough disk space to create a backup of your existing game folder to avoid data loss.
Reporting an error
Reporting an error
This section covers reporting an error with the plugin. If the error you want to report relates to your device not moving when using the Plugin, please check out the “Troubleshooting” and “I need help with making the Plugin work” section.
If, when using the Plugin, errors are shown in the Console or Log, I ask that you please submit the following information:
- How was the error produced/What caused the error to happen?
- Error message from the Console/Log.
Example
In KKS, when starting Free-H and later exiting, I loaded my main game save and started a sex scene. During the sex scene, I opened Settings, clicked “Return to Title” and went back to Free-H. The Plugin now shows the following error:
[Debug :KKS_SexRobotController] Error in Update(): System.NullReferenceException
at (wrapper managed-to-native) UnityEngine.Component.get_gameObject(UnityEngine.Component)
at UnityEngine.Component.GetComponentsInChildren[T] (System.Boolean includeInactive) [0x00001] in <548b4fa0e7e04f27a1b7580930bfb7dc>:0
at UnityEngine.Component.GetComponentsInChildren[T] () [0x00001] in <548b4fa0e7e04f27a1b7580930bfb7dc>:0
at KKS_SexRobotController.RobotController.RobotMovement.UpdateFemaleTransforms (System.Int32 girlIndex) [0x00007] in <2a910a4c54ad4c9b9691591f5c93957e>:0
at KKS_SexRobotController.RobotController.RobotMovement.GetBonePositionData () [0x000d9] in <2a910a4c54ad4c9b9691591f5c93957e>:0
at KKS_SexRobotController.RobotController.RobotMovement.UpdateAnimationStatus () [0x0002e] in <2a910a4c54ad4c9b9691591f5c93957e>:0
at KKS_SexRobotController.Plugin.KKS_SexRobotControllerPlugin.Update () [0x000ad] in <2a910a4c54ad4c9b9691591f5c93957e>:0
I need help with making the Plugin work
I need help with making the Plugin work
This section is for those seeking help with making the plugin work, e.g. be it because the Plugin does not show up or because it is not working (e.g. your device is not moving, not moving in VR, etc.). I ask that you please check the “Troubleshooting” section first, to see if any of those suggestions can help solve the problem. If you looked and still are not sure what could be wrong, please copy and answer the following questions:
- Which OS are you running (Windows, Linux, macOS; I do not need to know the version, answering “Windows” will suffice)?
- Is your game version English or non-English?
- Have you tried using “vanilla” characters to exclude BoneMods from being an issue?
- What type of problem are you having? (please describe your problem, pending on which of the question below matches your problem)
- Does the Plugin not show up in the BepinEx menu?
- Is your device not connecting to the Plugin?
- Is your device connected, but not moving?
- Is your device connected and working in normal mode, but not in VR?
The current version for HS2 is v2.3.1 and for KKS it is v2.0.2. Rename the files by removing the *.txtfrom the filename.
HS2_SexRobotController.dll.txt (59.5 KB)
KKS_SexRobotController.dll.txt (67 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.




