Aight so I decided to take a swing at this. Bear in mind that I have just a tiny smidge of programming "skill" and the fact that it's a paid plugin means I can't copy and paste code snippets here.
Rant follows, jump to TL;DR for important findings:
First step is figuring out what the problem is. To this end I started commenting out sections of code.
The first section I ran into (the stuff under "Sprite_Battler (new blank line, new line) The superclass of Sprite_Actor and Sprite_Enemy") turned out to make things run smooth again (mind I'm about 90% certain that it basically stops all of the functionality of the plug-in, but I digress).
Since this "worked" I started commenting out some of the section. Most of the sections I tried with this just outright broke everything (error code at start), so I decided a different tact.
I added console.log([x]); where x = number of appearance to the end of all the functions. What this does is make me able to see when each function is called in the console, and since the frame tanks even when nothing is happening in battle, I figured the problem functions are constantly being called.
TL;DR:
I found which functions were being called constantly: the 7th, 8th, 9th, and 11th functions quickly flooded the console letting me know that they're the problem.
These functions begin as follows (The TOU doesn't say you can't post function names, just to not redistribute the plugin or use the code in different plugins, but if it's against forum rules, I'll edit in line numbers instead):
Code:
Sprite_Battler.prototype.update = function()
Sprite_Battler.prototype.updateHealAfterglowFilter = function() {
Sprite_Battler.prototype.updateMotionBlurImpact = function() {
Sprite_Battler.prototype.updateStateBuffApplyRemoveIconSprite = function() {
That first function seems to be the one that calls the other three. Each of these functions seem to be constantly checking a conditional on whether or not there's any duration left on motionblur effects on every sprite.
Which may be the root of the problem, because this is happening so often that just adding in the console log makes the framerate drop to 2 in a blank new project, not just on my somewhat low-end laptop but even on my super high end rtx 2080 ryzen desktop.
So, basically the solution seems to be to have "Sprite_Battler.prototype.update = function()" update less often and I'm not quite sure how given that I can't use a sleep function.
EDIT SEMI-WORK AROUND THAT IMPROVES THINGS:
Aight, got a patch job that will
help (need to test this more thoroughly, but it doesn't
seem to break anything, anyway?). Can't copy and paste the code (or can I? TOS are so vague):
Anyway, go to:
Sprite_Battler.prototype.updateHealAfterglowFilter = function()
Sprite_Battler.prototype.updateMotionBlurImpact = function()
Sprite_Battler.prototype.updateStateBuffApplyRemoveIconSprite = function()
Each of these have conditional "if" statements in them, yeah? Cut the statements (not the logic inside them) out and put them (make sure you move the bottom } bracket as well) in
Olivia.BattleImpact.___Sprite_Battler_update___ = Sprite_Battler.prototype.update;
By put them in I'm gonna fake code this to give a quick example (this is not the actual code, it's just semi-similar sounding to get the formatting right):
Code:
if (Afterglow duration > 0) {
this.HealAfterglow updating function mentioned above;
}
if (motion blur duration > 0) {
this.motion blur updating function above();
}
Finally you have to deal with the icon state whatever function which is formatted differently than the other two and requires a different "solution" (I make no claim to real programming knowledge, just some minimal code literacy that has lead me wrong before, full disclaimer).
I didn't mess with that function itself, instead I combined the various if statements into one to enclose the function call as follows (if this goes too far, I apologize, but there's literally no useful info to copy the plugin in this code):
Code:
if (this._iconsToBeApplied.length > 0 || this._iconsToBeRemoved.length > 0 && !this._stateBuffApplyRemoveIconSprite.isBusy())
{
[Insert function call here]
}
Now, these conditionals are still getting called 8 bajillion times a second, so the problem isn't solved. But it cuts out three function calls unless they're necessary and a variable change 8 bajillion times.
In case mods are curious about TOS:
1. These plugins may be used in free or commercial games.
2. 'Fallen Angel Olivia' must be given credit in your games.
3. You are allowed to edit the code.
4. Do NOT change the filename, parameters, and information of the plugin.
5. You are NOT allowed to redistribute these Plugins.
6. You may NOT take code for your own released Plugins.
So it doesn't explicity bar code snippets from being shared and the snippets I put out are meaningless on their own (the real logic of the plugin is in a giant block of unbroken text that's all latin to me, which, fortunately, doesn't seem to cause the performance problem).
Putting that aside, I am still stumped on the windows 7 issue (also stumped on a non-duct tape solution).
Edit 2:
For the first bit, you can get a few extra FPS by encasing the Olivia.battleimpact.__ etc in
setInterval([INSERT CALL HERE], 60);
Which will just make that part only run every 60 miliseconds. Might be able to get away with more. Either way, tested it all out and the plug-in still functions as intended, just with decently better performance (but still much worse than without it).