Kingleon99's - Lua Script Collection [OFS]

:memo: Notes

This is my Personal Lua Script collection, which I’ve been using for a few months now, and I think it’s useful enough to share it online.

You can inform me, If you find any bugs.
(at best a screenshot of the error message or copy and paste the massage)

Don’t forget to assign Hotkeys if you want to get the most out of the script.

Hotkey Instruction


:notebook_with_decorative_cover: History

I am not a Learned Programmer, I just played around with C# for some years and when I saw that you could make your own scripts I was a bit reluctant at first and only used other people’s stuff, but some were too complicated to understand, others didn’t do what I exactly wanted, so I decided to look into Lua and the OFS Extension API and started making my own Scripts, which were individual scripts at the beginning, but it quickly annoyed my how many tabs I had open, so I put them in one Script.

For me they work(most of the time) and are really useful when combined with other people’s scripts.

And I hope they are useful for you too. :grinning:


First Release

Improved Limit (was made quite hastily should work better now)

Improved Equalize
added version text next to Execute Button

Added count Selected to Switch
Limit now includes first and last Point of the Script
Limit workes now with up and up & down and down movement not just up & down (Doesn’t work with too funky Scripts)
Added Vibrate Function (not as sophisticated as other’s Vibrate Scripts)

Fixed small mistake which made Switch crash when using First
Changed Vibrates Amount Lower Limit from 3 to 1
Added Function AddMovement

BPM got a adjustable EndPoint
AddMovement got a LowerLimit (If Speed in the other Direction is lower than LowerSpeed a Point with LowerSpeed is created)
AddMovement Limited Max Amount of Points Used at once to 1400 otherwise OFS crashes (at least for me)
AddMovement Works now with Points that are not at 0 (both Points still need to have the same value doe)
Limit has now the option to scale from a Start to End

:information_source: Info

Here I will explain what each function does.

[with exception of BPM all Functions will need selected points]



My First and most complicated Function, but also the one I am really proud of.

Smooth Waves Info|387x295,

I hope the name at least hints at what it does. It adds Points between existing Points of a Wave Pattern defined by the Edgesize and the Factor, where Edgesize is the Horizontal direction & Factor the Vertical one, You can also decide on which area a Point should be created. The % decides if the Factor is Absolute (always same) or depends on the difference between the two Points.







Really simple, It multiplies either the Value(pos) or time(at) of the Points

Multiply Info


Simple too, It Scales from the Higher Point to the lower one.

Scale Info






Every Programmer should know what this is. Well it Rounds the Points by the Factor, so if Factor is 5 74 will be 75 , 72 will be 70 and so on, not too complicated.

Math.Round Info


Will Keep Points selected based on Target.
So if one, every other Point will stay selected

Switch Info


Will place Points based on the BPM,
if you script a HMV or PMV and you know the BPM of the song, this will be helpful.
Important it will start from the current time in the script, not the beginning of the video

BeatsPerMinute Info


Will try to limit the speed between Points.

Limit Info






Will select Points between the Top & Bottom value.

Find Info


Like the build in Equalize, with the exception that it groups the Points together that have a similar distance, how similar is decided by the Tolerance.

Equalize Info




Adds Points where every second point gets changed, Timeoffset obviously changes the Time, where FactorStart and FactorEnd changes the value

Vibrate Info




Adds a configurable Point Between 2 Points

AddMovement Info



:open_file_folder: Download

Unzip in C:\Users\YourUsername\AppData\Roaming\OFS\OFS3_data\extensions


nice, can you explain your smooth waves implementation please?

edit: nvm i see you did. im retarded

edit again: Have you noticed any patterns in relation to what an ideal smoothing distance in terms of horizontal and vertical distances would be. With the goal being that when a device transitions from down to up or vice versa, no jolt or jerk is felt?

after using this for a bit. Well fucking done dude.

That depends on which device you plan to script for the Handy which I have and script for has a maximum speed of 600 units/s even though I try not to go over 500, but you should decide for what device you want to script for and keep its max speed in mind.

Most of the time when I use it, I play around (undo and change values) with it until I’m satisfied with the result.

what is this

Not quite sure what you mean, but this is a post about my Lua script for Openfunscripter,
not important if you don’t make funscripts yourself.

1 Like

This is my first exposure to this and it looks very cool. Wanted to say thanks! Does it work with OFS 3.2.0?

3.2.0 is the version that I have, which is the newest version I think, so yeah should work

Installed it and it seems great so far. I’m definitely going to use a few of these. I look forward to looking into the code a bit as I’ve only ever briefly checked out Lua (for OFS) and quickly moved on.

Yeah I have a handy. I was more thinking of a script that would smooth each change in direction on its own. So my idea was to select all points and use a “smooth all” option.

I have run into many issues attempting this when there are points that deviate from direct vertical movement. For example; points at

200ms:0, 400ms:100, 600ms:0, 800ms:100

Would work just fine. But points at

200ms:0, 400ms:40, 600ms:90, 800ms:0.

This less orderly pattern causes various issues with the placement of the new points.

I have had to go down some complex math roads to try to solve it. I think it will require a lengthy algorithm to handle each possible deviation. If youre interested in a challenge let me know I can show you what i’ve been trying.

Well, I am by no means an expert about programming. That bit that I can do is self-taught, so I wouldn’t put your hopes too high, but you can show me what you did so far. It couldn’t hurt, at least.

i wasnt sure what it was thank you for clarifying

Note, the handy normaly actualy doesnt reach 600ups. If it can its only for 0-100 movement, but as far as i know it wont do that even in those cases

The actual limit is just 400ups. And this is reliable. The only reason to script above it is because if you take this limit, you often will not actualy ask for the limit of the device. If a point was slightly adjusted, a 400ups stroke might become just 350ups. So on that i definitely recommend not taking 400 as limit, 450 or 500 is just better (for me it depends on the section which is better. for long strokes i will even go to 600 just in case a device can play it back properly).

By exceeding the 400 slightly, even if the device doesnt playback the positions properly, it does go for the speed. 500ups is on that a fairly safe value. Its even that safe that it can handle vibrations (600 is often not managable, but depending on script and firmware still possible).

If however carefully scripting even 450 is going to be a fine limit. Above that, if you have a CH video, the vertical alignment might be pushed towards a certain point (ie. if you want it to touch the bottom, it might never do that).