Tomin’s Playable Fap Hero Game [1.0] | アリアサキュズム | RJ01212921

If I were to script this game (manually), do you think it’d be more helpful to start with the gallery or the stages?

Any chance of uncensor patch? :slight_smile:

I’ve dropped a couple of vids with recorded funscript to to TominMod ~ pixeldrain . And a version of MFP plugin that record them as well. Please review and say how bad it is. I literally can see it now.


Does OFS support SLR multi-axis format? (the {axes:[{id, actions}]} script)

If you have an AI artist friend who can depixelate assets with img-to-img on whatever the modern Pony model is, then yes, press Alt+F11, decen, drop to BepInEx\plugins\ModImages and it’ll show in game. And send here.

At a glance this is horrible. Though I need to load it onto an OSR to see how well it fares in action. I also got the feeling that your game’s frame rate might have impacted the result (the “gaps” where there’s no nodes seems to be caused by the game stuttering).

Can you tell me how to record script? I can’t seem to find the option in MFP (v0.10.0_multidays1-5)

Not as I’m aware.

Check pixeldrain album theres cs file where you may need to set _dev_saveScripts or whatever


MFW I notices I use 145hz monitor and update is not 16.6ms
MFW I compared the times I use with Unity Time. time and found Time. deltaTime is always 16.6

Just tried the mod and jeez this is terrific. @Dimava is truly the mad scientist here.

If you weren’t aware yet, this mod plays no script. It generates motions on the fly based on the live2d meshes. It is essentially the VaM controller plugins (e.g. TCodeSerialController, ToySerialController) but for Live2d Unity games.

This is such a revolutionary step. If you find another Unity game with Live2d in it, this mod may work. Worst case it serves as a way to output scripts which can be later integrated using EDI.


The issue I’ve noticed is that perhaps the scripts are too faithful to the Live2D that they don’t feel comfortable on a device.

  • There often are drastic, fast movements which makes the OSR2 moves like it went rabid (the speed limiter in MFP also doesn’t work here too so it becomes quite scary). I wonder if this can be addressed by implementing some kind of smoothing algorithm. I remember @Yoooi’s ToySerialController had something like this.

  • Some penetration scenes have rather short stroke length due to her movements covering only half of the penis. Instead of tracking the vertex on the actual tip of the penis, might wanna use one that is a little down there on the shaft.

For MFP I had to turn off the sync feature for this mod to work. I also noticed that in PolledUpdate mode things becomes extra smooth however the strokes are very short. If I adjust the offset or scale while the mod is active, MFP is bond to crash.

2 Likes

Speed limit should still work fine, I dont see why it wouldn’t.

Any exceptions in the logs when it crashes?

This is intentional
Values are scaled on the MFP plugin side
“Legacy” levels 6-20 currently use MinMaxClamp-ers set to the min/max value reachable in the level and scale that to 0-100 L0, you may try them for that
(and they update their min/max if the value goes out of bounds)
Currently they are in Inactive state where they don’t modify the value, but you may try setting them to Active if you wish
But that doesn’t solves the problem of type2 movements being boring - that’s why I heavily lean for R0(twist) there. L2/L3 could work as well but I don’t have those
I think I will add settings for what scale to use later, please propose some if you want them to be implemented faster


Actually you can just assign the scale on MFP? Or maybe not, as it’ll become -50-50 rather then 0-100 idk ¯_(ツ)_/¯

A slight problem is that is has it keep peaks
A single-frame +50 peak over a straight line will have to span 10 frames up and 10 frames down

1 Like

Afaik it’s a deadlock when UI thread emits a message while ChangeScript(Dictionary<Axis, Script>) has started but not finished processing
Then UI becomes unresponsive
I do already async-lock my message handlers so Seek and Pause work fine but not other UI

Should I try to switch from PblishMessage to InvokeAction?

I did not manage to lock anything while spamming script changes and changing scale/offset values like @Falafel said.

The only thing I managed to lock was on your plugin connect:
image

You are starting the RunInterval task that calls SetScript and immediately after calling SetScript from UI thread. The first thread that calls SetScript will want to update the UI thread and so the dead lock happens.

image

The TryRunLocked part should be run in a separate task or ideally in the RunServer or RunInterval task.

The whole semaphore is not needed as far as I can tell.
You are only in UI thread in OnConnect, OnDispose and in HandleMessage.

Did you run it with the game on or without the game?

If you’ve tried without the game then it’ll obviously work (because MFP doesn’t update script on every tick, that happens only when the game(or testing html) is running)
Try this one in that case

Open http://localhost:1367/static/~/TominFapHeroMFPPlugin2/index.html it’ll have “watch” and “sine” ticks, tick them, try to change script offset (5-10 times if it’s still fine), it’ll freeze


Now reading on how to try to fix


I guess I still have the problem
I spam SetScript calls and UI-caused HandleMessage can happen inside it for whatever reason

Without the game but I modified your plugin to spam it anyways.
I think the demo does not work.

Why would it not, the whole execution is on your task thread when you call SetScript, you can see it on the right block in first screenshot. During your thread executing the UI can do other things.

The problem is probably that you are using PublishMessage in the properties setter that gets called from multiple threads and from the UI thread. And same thing will happen as I described in previous comment. One thread will change one of the properties that requires synchronization to UI thread, and at the same time UI thread also attempts to change a property in your plugin, but you added the TryRunLocked which will cause the UI thread to wait for the other thread causing a deadlock.

If you want to do some sort of synchronization of those messages, check how the abstract source handles the events, it uses a Channel<> to push the events to a queue, that then each source implementation handles on some other thread. Internal source for example uses the same thread for publishing and handling events, while others have a separate tasks for both.
So you could consume those events in OnInterval and update your properties from single thread only.

It didn’t work as I’m aware. I’ve set the threshold to 100 unit/s but my device is still going real fast as mentioned above.

My OSR2 doesn’t come with twist I guess that’s why I yearned for stroke lengths. Do I need to modify TominFapHero2.cs to activate the clampers?

Amazing technology, good fun. Game is much more difficult when you are also struggling IRL :rofl: I really feel bad for protagnist now.

I tried it with the Solace Pro, but MFP never recieved the full range of motion from Tomin mod. L0 always ranged from about 0% to 50%, so SolacePro would only use half of its modest range. None of the motion / smart limit settings seemed to help.

Eventually this aggresive AutoHome setting saved it:
image
It will give the SolacePro more ‘room to move’ between Tomin signals and feel more reactive to the anim/gameplay.

Also set scale to 200%.

Have you tried disabling the sync feature?

When I used it with my OSR2 I had to at least disable “Script resource changed” to make it work.

Well, if I am more familiar with Japanese than English, what should I do if I don’t want to replace the translated text?

Delete XUnity.AutoTranslator and Texture_Replacer_BE5.dll from plugins

1 Like

My new PeakDelayer (WIP)
Edit: I’m gonna rename it to PeakDestroyer
(it’s like a speed limiter but it keeps peaks)


And here’s PeakSine I’ve tested it with

(peaks are 1-frame jumps)

1 Like

Yep all sync disabled

@here updated to 1.0, better everything, check the OP

I’m out for a week or two, if you’d like to help with dev ping me on how to
(mostly looking for correct points and playing Hero/Gallery to record funscripts for better Extended L0 bounds)

2 Likes