@Phlegethon5778 Thank you for the criticism!
I had no idea I still had 'removeFirstLetter', I thought I had removed it. I don't know why I left it, besides that another function happens to use it (I did rush it afterall and I didn't consider fixing up and getting rid of old, redundant or useless functions).
Oh, 'randomPercentage' is poorly named, but essentially, provided a number from 1-100, it'll randomly make a number from 1-100 and if it's lower or equal to your specified number, it returns true, and false otherwise (If I remember correctly). Although it doesn't really have much of a use except that. Now that you've mentioned that, I'll think of somethin' better, both in name & functionality.
I did find later that 'local' at the beginning of scripts (variables in no scopes) was unnecessary. I just haven't updated CVExtra's format accordingly. I will get that hopefully fixed by V3 which I will hope will not have any intentions of rushing.
Although, yes, there is really no point of a "wait()" at the beginning (it even adds a delay to scripts that require() it, which can cause issues), I added it there in-case the Roblox environment tried anything sneaky, however I will consider gettin' rid of it.
I will be honest, I was never taught advanced mathematics (I hate my lack of knowledge in the field), so I legit had no idea it was known as "additive inverse". I didn't really have an idea of what to call the function besides 'inverse' and thus why I added it as such. If you could provide one (not trying to be rude, honestly curious), please do so, I did think of 'negate' if that's even proper?
True, I will reformat "tiny()" appropriately.
I have heard of the 'modulus' when I was learning Java in a computer science class of mine. I astray from 'modulus' however due to my lack of knowledge in the mathematical field.
I do plan to make a better "warn()" and "return nil" system, it is quite crud. I use "warn()" as a substitute for "error()". I would use "error()" if it didn't end the program flow, I've tried to bind it into a pcall() and it did not like that, as it wants an error to occur first before it can error().
True it is aesthetically better with 'var = 2' rather than 'var=2'. I actually do prefer it myself. I just however preferred to shorten it to 'var=2' rather than the other. However, since it probably would look easier for new developers with 'var = 2', I'll consider it.
I'd recommend asking people for what should be in your module before writing it.
However I didn't happen to get as much recommendations/criticism as I had hoped for. Whenever I did come across an idea I couldn't figure out, I did ask others how to script it. E.g. in the scriptinghelpers discord, I asked how to make a colour mixer and two people came up with their own functions that colour mixed, and the function I chose has an extra bit that could be interesting for future functions (There was a 'magnitude' variable or somethin' that could change how much effect the first or second colour had on the second or first colour).
On a scripting-side, a lot of the functions are useless. For example, I don't think a Roblox scripter will probably be using any of the conversions functions or most of the math functions. And, true, most of the functions have simplistic presets to them. For example, the whole basis of the coloured visions is legitimately a ColorCorrectionEffect, with only 2 variables changed and a RGB code changed accordingly to the RGB provided.
And true it isn't proper to have a 'result' when it can be contained within one math operation. For me, it feels a little more stable and something you can hold onto. E.g. I can't edit or check over the results of 'return varvar2' but I can if I do 'result=varvar2' and check if anything has gone wrong. Although some functions don't have any necessary need to have a checker.
Although a lot are simple, there is some things I do consider more on the complex side. For example, I have much pride in my accomplishment of the 'playAudio()' function. As it can play audio according to a set start and end time and accordingly to the playbackSpeed. The reason why I do gloat about it so much is its potential usage. For example, no longer shall a person need to upload individual notes for different instruments or different pitches as their own, individual sounds when they can have it all in one piece of audio. As they'd just have to find where the note starts and when it ends in the select audio. This would work well for a collection of 'sound effects' in one piece of audio. The function also stops appropriately when :Stop() is called on the sound itself.
And another I do like to gloat about, is the "WaitForChildOfClass" function. The reason to why I love it so much, is that I can just wait for a certain class to exist in a container instead of having to rename it accordingly. For example, this would do well if a GUI is only supposed to have 1 textbox instance, but doesn't at start (although this would be a very rare thing to occur in all honesty). And if said 'textbox instance' gets a different name everytime it's put into this GUI. E.g. if 'textbox1' gets added and then removed, then WaitForChildOfClass("TextBox") for another textbox that could be of any other name like 'textbox2'. Although its usage would probably be very limited, I still think it is an interesting concept.
In the future, I plan for functions that can, be theory, revamp the pre-existing instance classes with a new set of functions accordingly, set with such functions as the one mentioned above. Through the userdata() function potentially. I still have to educate myself about the userdata() function and its limits and why I haven't started anything on it. But I'd think it'd be interesting!