Note that I’m asking this the day after releasing the public beta of Fresh Bulls Wanted. fml. lol.
So I originally designed FBW for The Handy, I’m basically making a simple edger wrapped by a VR experience. I’m keeping it simple by using HAMP. My main variables I’m controlling for are the stroke start, stroke end, and stroke speed. This should keep things easy for a Reinforcement Learning Algorithm I want to implement. Piece of cake. I released a teaser and folks over on eroscript suggest I support Intiface Central. Seems easy enough except that I keep calling it Central Interface for 6 months, but I think I get sorted out. I feel confident saying I’m supporting strokers and vibrators as I’ve gotten it to work in IC with The Handy and an emulated Lovense Hush. I’m now finding out I didn’t, as someone attempted to use the Lovense Solace Pro and it’s not working for them. I suspect they’re being routed to the Vibe config menu rather than my stroker config menu (see below.)
//This is Unity/C# btw
public DeviceWrapper(ButtplugClientDevice device)
{
Index = device.Index;
Device = device ?? throw new ArgumentNullException(nameof(device));
IsEnabled = true;
SupportedCommands = new List();
var attributes = device.MessageAttributes;
if (attributes == null)
{
throw new InvalidOperationException("Device MessageAttributes cannot be null.");
}
// Check for Vibrate support
if (attributes.ScalarCmd != null && attributes.ScalarCmd.Length > 0)
{
SupportedCommands.Add("Vibrate");
Debug.Log($"[DeviceWrapper: Vibrate command found for {Device.Name}]");
}
// Check for Linear motion support
if (attributes.LinearCmd != null && attributes.LinearCmd.Length > 0)
{
SupportedCommands.Add("Linear");
Debug.Log($"[DeviceWrapper: Linear command found for {Device.Name}]");
}
// Check for Rotation support
if (attributes.RotateCmd != null && attributes.RotateCmd.Length > 0)
{
SupportedCommands.Add("Rotate");
Debug.Log($"[DeviceWrapper: Rotate command found for {Device.Name}]");
}
// Check for Stop command
if (attributes.StopDeviceCmd != null)
{
SupportedCommands.Add("Stop");
Debug.Log($"[DeviceWrapper: Stop command found for {Device.Name}]");
}
}
It’s been almost a year since I implemented this code so I don’t remember where I got the idea that scalarcmd = vibrate, but I’m now realizing that’s not always the case. Can someone point me in the direction of a better way to do this? Originally I was just trying to sort toys into
if (myDevice.SupportsCommand("Linear"))
{
filename += "_Linear";
devicefunction = "Linear";
}
else if (myDevice.SupportsCommand("Vibrate"))
{
filename += "_Vibrate";
devicefunction = "Vibrate";
}
“It’s a linear Stroker”
or It’s a Vibrator"
as that fits best with what I’m going for and because of my RL Algo I really don’t want to overcomplicate my variables. But I’m not quite sure how the heck to do that.
Thanks for reading this far. Any insight would be much appreciated.
-Comrade OohAah



