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).

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 named SexRobotController.txt will be generated. Requires the plugin to be within a folder called HS2_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 file SexRobotController.txt. Please note that enabling this option doesn’t add the animation to this file, but instead creates a new file called SRC_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:

  1. I have not unlocked all scenes/animations (or I may have missed some)
  2. 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:

  1. Open Plugin settings and search for “robot”
  2. Within the settings for the SexRobotController, disable and then re-enable the Read positions from file option.
  3. 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

  • BetterPenetration in HS2 can throw a NullReferenceException. 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.

25 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…

LoveMachine supports both Illusion and IllGames, but only as a single-axis.
Support for Multi-axis was added in v4 (DevLog from Saucekes Patreon: https://www.patreon.com/posts/lovemachine-4-125249177), but afaik, it still relies on ButtPlug/Intiface Central (which currently is Stroker/Single-Axis only).

Here are two screenshots I took just now.

KKS:

HS2:

Aicomi:

As can be seen, the T-Code is listed as single-axis only, and in my settings, there is no “Serial connection” or “Alternate Connection” option.

1 Like

Ah I see, gotcha, thanks for the clarification
Well that works out well in a sense lol
I’ll be getting an sr6 (hopefully) soon, so I’ll be checking this out shortly!

OSR2+,
im not sure if im missing something to using lovemachine but a few games ive tried it with, it doesnt move much and should i change any if the config values and stuff at all, and if so what numbers are usually reccomended

Hi,

as I don’t have an OSR (I only have a SR6), I can only give a limited answer. I’m not quite sure if you’re asking about LoveMachine or my Plugin (given that you say “…but a few games ive tried it with”), but I’ll try to cover both bases.

I’m not the developer of LoveMachine, just a user. For LoveMachine, I didn’t change any of the settings, so can’t really give any helpful suggestions there.

As for my Plugin, my assumption would be that LoveMachine moves better/differently along the Stroke Axis because of how it tracks movement. The baseline for the tracking in my Plugin (which, as mentioned in main post, is based on the work from hs2robotics), is tracking the body parts and the distance between them (penis, vagina, mouth, hand, etc.). This in turn has both its up and downsides (one of the reason why I added the second multiplier). The upside is you get more movement (which, I must add, is way more visible in Aicomi than in KKS/HS2). The downside is - what you see is also what you get in terms of movement. If the penis (in the animation) is completely inserted, the movement will be more like a light tug or vibration. If it goes “all the way, in and out” repeatedly (HS2: Anal piledriver) - you’re looking at what could be a slamming experience.

As for the setting to change, I’m assuming the lack of movement is mainly the L0-Axis (up/down). If so, try to increase the value for Sex Robot (L0) Stroke multiplier. I recommend increasing gradually and not going straight to the max, as the speed increases for some animations when reaching the “Finish”/“Near Orgasm” part. If you have HS2, try the “Anal Piledriver” to see if that one moves fast or not (or at least “faster” compared to the others). I think some of the Doggy positions in KKS should have a noticeable speed feel, along with Cowgirl when increasing the in-game speed to max.

For HS2 I’m using is 2.0 and for the limiter 1.25 (ref. Screenshots).
For KKS I’m using is 1.75 and for the limiter 1.25 (ref. Screenshots).

Short explanation follows to what the different settings do (I’ll add these to the main post later):

  • Sex Robot (L0) Stroke multiplier: Controls how much it moves going up/down
  • Sex Robot (L0) Step Value: Using keyboard shortcuts, this sets how much the multiplier is changed
  • Sex Robot (*) * min/max: These can be left as-is imo. These just tells the device what the min and max is for how much it could move (* = L0,L1,R0,R1; Stroke, Twist, …). e.g. if Max was set to 0.5, it would mean that instead of going the whole way up and down, it would only go halfway (50%).
  • Sex Robot Limiter: This is a second multiplier for L0/Stroker (up/down). I added this to account for animations which has too little (or too much) movement. Functionality-wise it does the same as the Stroke multiplier.
1 Like

Hello dev, I’m running Honey Select 2 with BepInEx 5.4.4.0. When loading the plugin, I get the prompt: 《Plugin [HS2_SexRobotController 2.2] targets a wrong version of BepInEx (5.4.22.0) and might not work until you update.》
The serial port has successfully connected to the robot, yet the robot does not move at all when entering interactive animation scenes.
I cannot upgrade BepInEx to 5.4.22.0, as many of my older mods only support version 5.4.4.0, and an upgrade would break most of them.
Is there any workaround, an older compatible build of the plugin, or hidden settings to make it work with BepInEx 5.4.4.0? Thank you very much.

Hi aadd,
that’s an interesting issue. First of all, I don’t think you should upgrade just for this and risk losing all your other plugins. If all else fails, I can try later to see if it’s possible to build a version targeting that BepinEx. I’d rather check if its possible to make it run first, due to me currently needing to setup my dev environment again and also due to what time I have for Plugin development is currently focusing on Aicomi. Furthermore, there’s no guarantee that I can build a Plugin for this version, since I can’t say for sure if those are still available via the Visual Studio Package manager (NuGet).

Based on what you’ve written, it seems to me that the Plugin is at least detected and unless BepinEx has some sort of built-in blocker for versioning, the BepinEx version shouldn’t matter (assumption from me, since the BepinEx calls are targeting Plugin Config menu and Logging, could be that HarmonyX plays a role here).

As I cannot see what happens on your end, I’ve here the following questions for you. Some of them might seem redundant, but this is just so that we can try narrowing down where the issue stems from.

  • What OS are you using - Windows, Linux, MacOS (I don’t need the full version, simply “Windows”, “Linux”, “macOS” will suffice)?
  • The prompt you mentioned, is this shown in the game window or in the console/terminal?
  • After HS2 is started, if you open the Plugin Settings (F1) and search for “robot”, is the plugin shown - and does the content you see match the screenshot above in the plugin description?
  • In Plugin Settings, when clicking “Connect via Serial Port”, does it say “Connected to Serial Port COM*” (where * is a number between 1-33, like COM1)? And if so, does your device move/shake (mine does a tiny “shake”, indicating it’s connected to something).
  • If it says it’s connected, but your device doesn’t do a short shake/make some sound, are you certain that the correct port is selected (I’ve had false positives in Windows, where my device wasn’t connected, and in the Aicomi Plugin something was connected to COM1).

Plugin Log
If you haven’t already, can you please enable the BepinEx to write logs to file: Plugin settings → BepInEx → Logging.Disk → Enabled. This writes the log from all Plugins into a single file (located in: <GameDir>\BepInEx. Then, in the Plugin Settings for HS2_SexRobotController, enable the option “BepinEx Debug: Console output”. This ensures that the available log entries from the Plugin will be written to file. After enabling these two options, start a scene, and try playing at least 2 different animations (e.g. one service, one insert). Then exit the game.

In your file explorer, go to <GameDir>\BepInEx and open the Logfile (think it was called Logoutput.log). In this file, search for the following HS2_SexRobotController and copy out every line where this entry occurs into a new file. After copying these into a new file (this just to ensure the content is limited to this plugin), check if any of the lines contains Error or Exception, this is the line indicating what might be failing. Please include that error message here, so that I can see what’s failing.

Hi, I will answer all your questions one by one and report all my test results:

My operating system is Windows.
When launching the game, the warning about the mismatched BepInEx version appears in both the game window and the BepInEx console.
I press F1 to open the plugin settings and search for “robot”.
The HS2_SexRobotController plugin can be found normally, and its description matches the screenshot completely.
After clicking “Connect via Serial Port”, the interface shows that COM3 is connected successfully,
but the device does not vibrate at all.
It stays totally unresponsive when animations play in the game scene.
If I press the shortcut key for serial port connection, the serial port will disconnect immediately, and the corresponding disconnect record will be printed in the log.
COM3 is confirmed to be the correct port. Other control software can connect to this port and drive the device to vibrate normally.

I followed your instructions to enable BepInEx disk logging and the plugin’s debug output. I tested two different animations in the scene before exiting the game, and I have attached all logs related to this plugin.
There are no error or exception messages in the logs, only repeated records of the serial port connecting and disconnecting.
I backed up the game files first, then upgraded BepInEx to version 5.4.22. The version mismatch warning is gone, but the serial port issue still persists.
When I click to connect COM3 in the plugin settings, the device still does not vibrate. It remains completely unresponsive while animations are playing in the game scene.
Pressing the serial port shortcut key disconnects the port directly, and a disconnect entry is generated in the log. Even if the plugin automatically reconnects to COM3 afterward, the device still has no reaction.
No errors or exceptions can be found in the logs, only a large number of repeated connect and disconnect logs for COM3. Therefore, I believe the problem is caused by other factors.
Logs of version 5.4.22.txt (697 Bytes)
Logs of original version.txt (1.4 KB)

Hi,

first of all, thank you for taking the time to checking all you did and answering my questions. It really helps with trying to figure what could be wrong, so thank you for that. Today I got my Windows Dev environment up and running. As it turns out, my device also doesn’t do a vibrate/shake when connected in Windows (apparently, this only happens in Linux). However, my device did work (it was also connected to COM3).

That being said, thanks to your logs, I have potentially good news. After checking in Windows and comparing your logs to mine, my current assumption is that this is not a serial port issue. In the Logs of original version.txt the following lines were present:

[Info   :HS2_SexRobotController] Current Animation: 洋式トイレ対面座位
[Info   :HS2_SexRobotController] Current Animation: 背面騎乗位
[Info   :HS2_SexRobotController] Current Animation: チングリピストン

This section here is only printed for animations which are unknown to the plugin (if the option BepinEx Debug: Print position (console) is enabled). To avoid saying something incorrect, I double checked the animation names in the Plugin (they are all in English) and also did a quick check by removing one of them and restarting HS2. Only for the removed anaimation was the line Current Animation: printed to console (for those still included, nothing was printed and my SR6 moved).

Question: Do you happen to have a non-English version?

If you have a non-English version, you need to add these yourself for the Plugin to use them. First, ensure that the Plugin is located within a folder named HS2_SexRobotController under the <GameDir>\BepInEx\plugins.
Example: C:\Illusion\HoneySelect2\BepInEx\plugins\HS2_SexRobotController.

Then, after HS2 is started, open the Plugin Settings, search for “robot” and enable the option
Read positions from file. This will create a file called sexRobotController.txt, which is located in the Plugin folder HS2_SexRobotController. The file contains all the animation names which the plugin includes, albeit only the English ones. However, this gives you an impression of how to add your animations to the file, for example: Handjob, LEFTHAND (for more details, see the section “Adding animations/positions to be read from file”).

This means you will have to add all animations to the file yourself, but before adding everything, my suggestion would be to add those already present in your log, and see if your device then moves for those. If if does, you could also try using an online translator to see if it perhaps can translate some of the animation names to reduce the manual work.

Hi, the problem has been completely fixed.
My game is installed with Japanese language, so all animation names recorded in the logs are in Japanese, which cannot be matched against the plugin’s default English animation list.

I imported all Japanese animation names extracted from the logs into the config file in the proper format. The device functions flawlessly now, and all matching animations trigger smoothly with no issues at all.

Thank you so much for your thorough and patient support earlier!

1 Like

Hi, thanks for letting me know. Glad we could work it out. Have fun!

1 Like

When I connect my SR6 for KKS, it connects successfully but the arms shift to the right for some reason, regardless of the h-position selected in game.

The device moves when the animations play, though very minimally to the point of no movement at all even if I turn the multiplier to 5.

This looks really promising, and I’d love to get it working. Would appreciate any help with this!

–

Log snippet
[Info :KKS_SexRobotController] malePenisBase: -75.67078, 0.170213, -79.44678
[Info :KKS_SexRobotController] malePenisTip: -75.67478, 0.3155938, -79.43063
[Info :KKS_SexRobotController] malePenisLeftBall: -75.68956, 0.1492511, -79.4743
[Info :KKS_SexRobotController] malePenisRightBall: -75.7049, 0.1507434, -79.44434
[Info :KKS_SexRobotController] malePenisBallsCenterPoint: -75.69724, 0.1499972, -79.45932
[Info :KKS_SexRobotController] malePenisLength: 0.146329
[Info :KKS_SexRobotController] malePenisXAxis: -0.003997803, 0.1453808, 0.0161438
[Info :KKS_SexRobotController] malePenisZAxis: -0.05180142, -0.01651033, 0.1358536
[Info :KKS_SexRobotController] malePenisYAxis: 0.1367948, -0.002003401, 0.05191682
[Info :KKS_SexRobotController] Robot L0 Multiplier: 5
[Info :KKS_SexRobotController] Robot L0 Multiplier (actual): 5
[Info :KKS_SexRobotController] animationName: 片手フェラ
[Info :KKS_SexRobotController] nowAnimStateName: SLoop
[Info :KKS_SexRobotController] Robot L0: 0.5545084
[Info :KKS_SexRobotController] Robot L1: 0.5740336
[Info :KKS_SexRobotController] Robot L2: 0.5264003
[Info :KKS_SexRobotController] Robot R0: 0.6181616
[Info :KKS_SexRobotController] Robot R1: 0.5357562
[Info :KKS_SexRobotController] Robot R2: 0.6481085
[Info :KKS_SexRobotController] Robot R0 Angle: 21.26908
[Info :KKS_SexRobotController] Robot R1 Angle: 6.436119
[Info :KKS_SexRobotController] Robot R2 Angle: 26.65954
[Info :KKS_SexRobotController] T-Code Command:
L0555
L1574
L2526
R0618
R1536
R2648
[Info :KKS_SexRobotController] autoRangeMin: 0.922565
[Info :KKS_SexRobotController] autoRangeMid: 0.9607968
[Info :KKS_SexRobotController] autoRangeMax: 0.9990286
[Info :KKS_SexRobotController] robotL0 percent: -481.3488
[Info :KKS_SexRobotController] Command value sent: L0555
L1574
L2526
R0618
R1536
R2648

Hello, I have the same problem. Please help—could you send me the ready-made configuration files?

Here are the files. They are AI-translated and partly untested.
sexRobotController.txt (12.2 KB)

1 Like

Hi,

thanks for adding the log, it’s really helpful, since this shows the animation is known.
I can also see why the device isn’t moving - the min/max has too little difference:

[Info :KKS_SexRobotController] autoRangeMin: 0.922565
[Info :KKS_SexRobotController] autoRangeMid: 0.9607968
[Info :KKS_SexRobotController] autoRangeMax: 0.9990286

This results in a min/max diff of 0.07 (=7%, since the full range is 0.0 (0%) to 1.0 (100%), where 0.5 = 50%). It’s been a while since I developed these, but I seem to recall that when the difference between min and max was less than 0.1 it mostly lead to “vibration” or it not moving at all. This I’d only expect for animations where there’s no L0 (X-Axis) movement.

Since it’s been a while since I last used it, I checked if the KKS Plugin still works in Linux and Windows (my Windows 11 is a VM). In both cases it moved the way I expected it to move with Sex Robot (L0) Stroke multiplier set to 1.75.

Based on your log output (again, thank you for that addition), I assume it was the “1 Hand Blowjob”? Just a small remark, if the output is in Japanese, it would be helpful if you add the English name for it (if you have the English version). The reason being that for HS2 everything is in English (both the displayed names and the in-game animation names). For KKS it’s mixed, with the displayed animations name being in English, but the in-game names (read via BepinEx) has both English and Japanese games.

I checked the “1 Hand Blowjob” animation (Free-H mode via main game, not VR). Below are two snippets of the Log (both snippets were generated in Windows).

Snippet 1: Sex Robot (L0) Stroke multiplier: 1.75 (I think the in-game speed (mousewheel adjustment for speed gauge) was 0)

[Info   :KKS_SexRobotController] malePenisBase: 9.496215, 0.1985026, -113.7635
[Info   :KKS_SexRobotController] malePenisTip: 9.490683, 0.3614741, -113.7941
[Info   :KKS_SexRobotController] malePenisLeftBall: 9.52637, 0.1947355, -113.789
[Info   :KKS_SexRobotController] malePenisRightBall: 9.495373, 0.191157, -113.8025
[Info   :KKS_SexRobotController] malePenisBallsCenterPoint: 9.510872, 0.1929462, -113.7958
[Info   :KKS_SexRobotController] malePenisLength: 0.1659077
[Info   :KKS_SexRobotController] malePenisXAxis: -0.005532265, 0.1629715, -0.03057861
[Info   :KKS_SexRobotController] malePenisZAxis: -0.1513304, -0.01746855, -0.06572165
[Info   :KKS_SexRobotController] malePenisYAxis: -0.06777817, 0.02570033, 0.1492347
[Info   :KKS_SexRobotController] Robot L0 Multiplier: 1.75
[Info   :KKS_SexRobotController] Robot L0 Multiplier (actual): 1.75
[Info   :KKS_SexRobotController] animationName: 片手フェラ
[Info   :KKS_SexRobotController] nowAnimStateName: SLoop
[Info   :KKS_SexRobotController] Robot L0: 0.5164526
[Info   :KKS_SexRobotController] Robot L1: 0.5485442
[Info   :KKS_SexRobotController] Robot L2: 0.5095416
[Info   :KKS_SexRobotController] Robot R0: 0.5615915
[Info   :KKS_SexRobotController] Robot R1: 0.5218737
[Info   :KKS_SexRobotController] Robot R2: 0.6632823
[Info   :KKS_SexRobotController] Robot R0 Angle: 11.08647
[Info   :KKS_SexRobotController] Robot R1 Angle: 3.937256
[Info   :KKS_SexRobotController] Robot R2 Angle: 29.39082
...T-Code section removed...
[Info   :KKS_SexRobotController] autoRangeMin: 0.627496
[Info   :KKS_SexRobotController] autoRangeMid: 0.7354473
[Info   :KKS_SexRobotController] autoRangeMax: 0.8433986

Snippet 2: Sex Robot (L0) Stroke multiplier: 5 (in-game speed at max):

[Info   :KKS_SexRobotController] malePenisBase: 9.49379, 0.2094539, -113.7575
[Info   :KKS_SexRobotController] malePenisTip: 9.475487, 0.3564346, -113.7878
[Info   :KKS_SexRobotController] malePenisLeftBall: 9.523812, 0.2078442, -113.7834
[Info   :KKS_SexRobotController] malePenisRightBall: 9.493066, 0.2013458, -113.7963
[Info   :KKS_SexRobotController] malePenisBallsCenterPoint: 9.508439, 0.204595, -113.7898
[Info   :KKS_SexRobotController] malePenisLength: 0.1511903
[Info   :KKS_SexRobotController] malePenisXAxis: -0.01830292, 0.1469807, -0.03033447
[Info   :KKS_SexRobotController] malePenisZAxis: -0.1367925, -0.02890908, -0.05753769
[Info   :KKS_SexRobotController] malePenisYAxis: -0.06173592, 0.02048029, 0.1364835
[Info   :KKS_SexRobotController] Robot L0 Multiplier: 5
[Info   :KKS_SexRobotController] Robot L0 Multiplier (actual): 5
[Info   :KKS_SexRobotController] animationName: 片手フェラ
[Info   :KKS_SexRobotController] nowAnimStateName: SLoop
[Info   :KKS_SexRobotController] Robot L0: 0.1645969
[Info   :KKS_SexRobotController] Robot L1: 0.546635
[Info   :KKS_SexRobotController] Robot L2: 0.5237952
[Info   :KKS_SexRobotController] Robot R0: 0.6485364
[Info   :KKS_SexRobotController] Robot R1: 0.5784289
[Info   :KKS_SexRobotController] Robot R2: 0.6729621
[Info   :KKS_SexRobotController] Robot R0 Angle: 26.73656
[Info   :KKS_SexRobotController] Robot R1 Angle: 14.1172
[Info   :KKS_SexRobotController] Robot R2 Angle: 31.13317
...T-Code section removed...
[Info   :KKS_SexRobotController] autoRangeMin: 0.5972764
[Info   :KKS_SexRobotController] autoRangeMid: 0.7285008
[Info   :KKS_SexRobotController] autoRangeMax: 0.8597253

For both of the above, the pleasure gauge was locked before starting the animation (to ensure I could compare both 1.75 and 5 with the same basis).

When doing a quick comparison of my numbers above for the malePenis*, the overall difference is minimal. However, when comparing my numbers against yours, there is a huge difference between the X- and Z-Axis.

For me, malePenisBase: 9.49379, 0.2094539, -113.7575 (X, Y, Z), but for you, it is malePenisBase: -75.67078, 0.170213, -79.44678. However, the in-game penis length is more or less the same (I searched my logs and also had entries where it was 0.14). However, none of my log entries showed a negative value for the malePenisBase on the X-Axis.

Unfortunately, I cannot say what causes this. What I can say is that the reason your SR6 isn’t moving is due to the overall movement range being too low. I’m not sure if this is caused by KKS or the Plugin. The movement multiplier used for generating the T-Code sent to the device/robot is done by the plugin, but the plugin uses the in-game values to calculate these. If the in-game values are invalid or incorrect, then the plugin will also output a generated T-Code that leads to little or no movement.

The values malePenisBase, malePenisTip, malePenisLeftBall, malePenisRightBall are taken from KKS (position coordinates) and used to calculate these values: malePenisBallsCenterPoint, malePenisLength, malePenisXAxis, malePenisYAxis, malePenisZAxis.

It could be that KKS has invalid position/coordinate data or it could be that the Plugin somehow calculates the wrong numbers or ends up with a number being too low/high and therefore “locking itself” (the autoRangeMin and autoRangeMax adjusts itself based on the current lowest and highest point reached). I do recall having the problem of these two not being “reset” and thus not moving as expected when changing animations, switching LoopTypes or increasing/decreasing speed, which is why I added checks to make it reset the autoRangeMin and autoRangeMax if those events occurred.
I’m not saying that the numbers I have in my log snippet are “correct” and yours are “wrong”. All I’m saying is that this only thing that really sticks out to me right now. I have some questions and suggestions below, I’m not guaranteeing this solves anything, but it might give me some new ideas for what to check.

Questions

  • Have you modified any of the other sliders - like the min/max?
  • Are your characters which are used “normal” (default in-game creation) or modified (values altered using the Advanced Bonemod or similar)?
  • Are you using one of the default/in-game scenes/maps or a mod one?
  • Which OS are you using - Window, Linux or macOS (I don’t need to know the version, if Windows, just answer “Windows”)?
  • Is your game in English or a non-English version (if you have a non-English version, it could be some of the animations aren’t included, due to the mixed language for the animation names. Check the log for Current animation: entries)?

Suggestions

  • Can you go into the following folder: <gamedir>/BepinEx/Config, delete the file called KKSrobotics.KKSSexRobotController.cfg, start the game and retry with default values?
    • This file will automatically be generated once the game starts, but with the default values. It should be said, that I doubt this may have any effect. But this way, we can exclude the multipliers as the cause.
    • You should enable the BepinEx debug and set the correct COM Port, but don’t change any of the multiplier sliders.
  • Have you tried with “vanilla” characters (the default preset characters, that KKS comes with)?
    • If not, can you please try with a preset male and female?
    • If you’re using one of the mod maps/scenes, can you try with one of the standard maps/scenes?
  • Can you check the terminal/console (or the log afterwards) to see if the autoRangeMin and autoRangeMax changes?
    • Select an animation, increase and decrease the speed. Do a right click, as this changes the LoopType (nowAnimStateName). Does the values change?
    • If you change to a different animation, does the values reset or at least change?

Thank you very much for your help

It is much better than Lovemachine. It would be wonderful if more movements featured rotation via the R0 axis

1 Like