MultiFunPlayer v1.31.3 - Multi axis funscript player - Now with SLR script streaming

Well scripters sometimes put out different scripts for the same flic. Would nice if you could load those just because the name matches partly. The MFP user could quickly switch between them.

Oh what your asking for is similar to my example thing E.g. load video “railing someone clothed” → loads scripts → lock them → load video “railing someone naked” → scripts don’t unload. I said above except an easier way to swap between them except instead of loading a different video you have an list or an easier way to swap from “railing someone.L0.funscript” as it shows you the other versions of that you have to choose from/swap to “railing someone smooth.L0.funscript” , “railing someone hardcore.L0.funscript” , “railing someone half speed.L0.funscript” , “railing someone full speed.L0.funscript”
Correct?

If so then @Yoooi 's answer fits then I think of

So not yet but on the laundry list.

BTW a think the way to implement that you would have to have it so the program looks for any files that start with the full video name except after a prefix like ~ (as then after that you can have the “clothed” and “naked” bits for different video types) and match that to any scripts that start with the same matching name. (Would probably require a way of indexing/storing the stuff though so if it’s looking through a massive folder it doesn’t lag a ton more than once like Handycontrol does) So quite a bit of work yep in my mind.

Love the new update. Thanks!

One feature request:
Can we get an option to show the user-firendly names for each axis in the main UI window (UP/Down, Roll, etc…), instead of just the short codes (L0, R1, etc…)?

I use both a SR6 and a NimbleStroker through MFP at the same time, which means it’s controlling 11 different control axis (axes?) right now, and I often forget which is which.

While I’m asking, where did you get the list of names for each axis? For example, you have V1 as pump, but I’ve never seen any docs explaining what it’s supposed to be pumping, and it’s using a V code, which i though was only for vibration.

@roa @Ratattack15
The idea I have is to support a format like this:
<video name>.<pack name>.<funscript name>.funscript
or
<video name>.<funscript name>.<pack name>.funscript

So you would be able to have

video.pitch.funscript
video.fast.pitch.funscript
video.slow.pitch.funscript

With ability to switch between default, fast and slow pack from UI or shortcuts.

No idea when/if this would be implemented as I think this is rather niche feature.

Its shown on the right side when you select an axis tab.

Why do you need 11 axes?

Go to device tab in the application settings at the top of the window, there you can see/configure the axes. They are also listed in a table in the first post.

V1 was used by the first lube addon for the OSR2, that was before TCode v0.3 which added A axes for such things. So when using TCode v0.2 for multi axis scripts V0 is the vibe (vib.funscript), V1 is lube pump (lube.funscript). In TCode v0.3 the lube pump was moved to A2.

If you are using SR6 you should be using TCode v0.3, or if you have custom device definition in MFP then you can just change precision to 4.

2 Likes

Released v1.30.1, should be fixed.

Which is the only place it’s shown and requires switching to the tab to view. I would much rather the “Axis Values” section display the full names and have fewer columns instead.

Because you support them? Why would anyone want LESS interactivity? Here, you can clearly see what each axis represents:
image
(/sarcasm)

I am admittedly an edge case here, but if you have that many controllable items, I’m going to try and use them all. Here’s my actual tcode mapping:
image

The V and A axis are entirely given over to the nimblestroker, including re-mapping a couple via code. I didn’t report it as a bug because I’m not sure if it’s under your control, but adding additional axes beyond the set shown does not seem to work. I tried repeatedly to add an L4 or A3 axis but it seems like they don’t work.

Understood. I think a more direct question would be, does MFP support additional axes beyond those defined in tcode 0.3? I’ve currently re-mapped the lube axis to control the nimblestroker main motor. Can I add a 12th axis to the existing set of 11 that tcode provides and have MFP send signals to it? The goal would be to have the linear suction of the nimblestroker on it’s own axis independent of the L0 linear axis of the SR6. In a perfect world, I’d just add an L4 axis to my device settings and it would just work, but I’m probably pushing the limits of what tcode supports.

Edit: Just wanted to say thanks for being so quick to respond, and I don’t want my above issues to give off the impression I’m unsatisfied. The new version is pretty great so far.

True, but the reason is that the short names have a constant 2 character width so its easy to layout the UI. It would not be possible to make the axis values compact if it were to display full names. It would probably have to be 12 rows vs current 4.

Dont work how? You have to add the axis, enable it and restart MFP for it to show up.

Yea you can, the TCode v0.2 and v0.3 are just “presets” that adhere to the official documentation.
Anything outside the presets is custom and needs custom firmware to handle if sending raw TCode, but the additional axes can ofc be used for other things like buttplug mapping. So you can add/remove/rename/edit the axes however you want on a custom device.
Technically there is no limit in the axis short name but I would keep it in 2 character [A-Z][0-9] format so the ui doesnt break.

Maybe the “device” naming is not ideal since the axes can be used for multiple devices.

1 Like

Might be a technical issue I’ve created that’s causing the extra axes not to work. To clarify, by “not work” is that the device does not respond at all to changes on that axis.

Now, I did edit and recompile the code running on the nimblestroker module to look for the new axis names that I gave, so if you’re confirming it’s allowed from the MFP side, that means I probably screwed something up or missed something in my code changes.

EDIT: Took a look at the nimblestroker code (which I think is imported from some other library), and it looks like there are limits to the names in that:

Note: TCODE_CHANNEL_COUNT is hard-coded to 5.

template <unsigned TCODE_CHANNEL_COUNT>
ChannelID TCode<TCODE_CHANNEL_COUNT>::getIDFromStr(const String &input)
{
    char type = input.charAt(0);
    int channel = input.charAt(1) - '0';
    bool valid = true;
    if ((channel < 0) || (channel >= TCODE_CHANNEL_COUNT))
        valid = false;
    switch (type)
    {
    case 'L':
    case 'R':
    case 'V':
    case 'A':
        break;
    default:
        valid = false;
    }
    return {type, channel, valid};
}

For the nimblestroker at least, it looks like the name must start with L, R, V, or A and must have a number between 0 and 4. I’ll need to re-try adding more axes after digging into the code more.

Another minor feature request.

Could we have a way to change the labels for connections?
image

I imagine most people don’t have multiples here, but it would be nice if we could have the tab label be something more meaningful.

Those are weird limits tbh, thats not the TCode spec.

I’ll add it to todo and i’ll try to implement it if its not super involved.

1 Like

Exactly, load them all script variants, play the one with exact name and have shortcut key to change between them. Heresphere could use that key so you wont have to leave HS.

I like this idea, some scripters already put out 2 versions of their scripts and being able to add both and switch between them sounds cool.

Heck I currently have a few duplicate videos because two different people scripted the same and I like both.

Still crashing.

2024-06-19 12:49:57.8112|DEBUG|MultiFunPlayer|Bootstrapper Configure
2024-06-19 12:49:57.8757|INFO|MultiFunPlayer.Settings.SettingsHelper|Reading settings from “MultiFunPlayer.config.json”
2024-06-19 12:49:58.0664|INFO|MultiFunPlayer|Environment [OSVersion: Microsoft Windows NT 10.0.22631.0, CLRVersion: 8.0.3]
2024-06-19 12:49:58.0664|INFO|MultiFunPlayer|Assembly [Version: 1.30.1-patreon-master.1+99.Branch.patreon-master.Sha.801b64a87418da785ebaa356f48a5e70c78f1642]
2024-06-19 12:49:58.0664|INFO|MultiFunPlayer|Config [Version: 41]
2024-06-19 12:49:58.0664|INFO|MultiFunPlayer|Timer [IsHighResolution: True, Frequency: 10000000]
2024-06-19 12:49:58.0664|INFO|MultiFunPlayer|Set working directory to “C:\Users\cpazo\OneDrive\Pictures\MultiFunPlayer”
2024-06-19 12:49:58.2037|INFO|MultiFunPlayer.Settings.SettingsHelper|Reading settings from “MultiFunPlayer.config.json”
2024-06-19 12:52:56.9729|FATAL|MultiFunPlayer|System.OverflowException: Negating the minimum value of a twos complement number is invalid.
at MultiFunPlayer.Input.XInput.XInputProcessor.g__CreateAxisGestureShort|9_0(Int16 last, Int16 current, Double deadZone, GamepadAxis axis, <>c__DisplayClass9_0&)
at MultiFunPlayer.Input.XInput.XInputProcessor.ParseStateGestures(Int32 userIndex, Gamepad& last, Gamepad& current, Double elapsed)
at MultiFunPlayer.Input.XInput.XInputProcessor.Update(CancellationToken token)
at MultiFunPlayer.Input.XInput.XInputProcessor.<.ctor>b__6_0()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
— End of stack trace from previous location —
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

Version 1.30 and 1.30.1 patreon build don’t work with xbvr , can’t load the script

The 1.29.4 works fine with xbvr 0.4.26
Any idea to fix?
Thanks

@iz0d
Ehh, yea, I never tested thumb sticks at their min/max values, I need to buy actual xbox controller. Fixed in v1.30.2.

@sstark90
I need you to change log level to trace via application settings at the top of the window, then try playing a video from xbvr, then send me the latest log file.

1 Like

Released v1.30.2 with the fix.

Currently running version 1.29.4 Is there an easy way to update to V1.30.2 while keeping all my settings in previous version. Thanks Yoooi

Safest is to extract new version to new folder and copy MultiFunPlayer.config.json from the old version. MFP will migrate the settings when you run it.
Or you can just drag-drop new version files into the old version folder. But maybe also make a backup of the config file to be safe.

1 Like

@Yoooi
Is there a solution for this? I have the same problem. I could send the log file if necessary.

Yes I need trace logs.
There was a change that requires you to name the script files correctly.
So if you have video.mp4 added to the scene, the scripts have to be video.funscript/video.pitch.funscript etc.
Before v1.30.0, MFP would look at all attached files so the naming didnt matter.