-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Long Time Coming! How About We Fix Killer Instinct to run better!:) Here is How We Can Do It!:) #1100
Comments
@KMFDManic use the osd menu supports cp scaling find out the value that works for you then simply call this ( mame2003-plus-libretro/src/cpuexec.c Lines 794 to 804 in c676840
press crt do do +1 increments in the menu pressing |
@grant2258 I am familiar with the OSD method. Problem is, doing it that way, (at least in my tests) it didn't help much with overall performance/speed. And, sound remains "stuttery" and broken (no matter which value I tried). I also attempted value changes of the cpunum, with mixed results (Kinst would sometimes boot, other times not, depending on value). The way I did it above, changing the clock via the driver file, it not only helped performance/speed. But, the sound was no longer stuttery, and nice and smooth. And, the game always booted, no matter what value I had it at, within the realms of the normal ones. Not sure which platform you are currently running on, again? And, thanks, as always...for helping look into this matter!:) |
Looking at this I'm reminded of our unimplemented core option to change clock speeds. Maybe this would be a solution that could be used more dynamically throughout any game or platform? mame2003-plus-libretro/src/mame2003/mame2003.c Lines 519 to 548 in 91b5068
|
@grant2258 @mahoneyt944 I did a test with "overclock" earlier, and was able to have S.T.U.N Runner, which normally runs about 40 FPS for us on the lower spec, run at 60 FPS steady (0 Frame Skip)! So, yeah, this may work out as a potential solution for global overclock. How do you best feel this should be added? I can do some preliminary tests on games I know, for sure, need the additional boost! I still need to determine how effective this can be for Killer Instinct, with the above method code. I had nice results with the driver change. Who knows, maybe both, used in conjunction can fine tune things to a very nice degree. But, hell, I even was able to play Hard Drivin' with overclock bumped up, earlier. That game had zero chance of working for us before, in the current state. |
Overclock and underclock can cause issues yoru millage will vary. The concernt of the cpu being the wrong speed can in the driver can cause issues as well with sound ect I think its a tinker till you get something working. I dont thing the driver change can be changed on the fly unfortunately would require a restart. @mahoneyt944 the unimplemented code is just code that was moved from the osd if you want to enable it make sure the emulation is running when doing it. @kmdfmanic could get the user interface to save the last value that way you can include the cfg file might not be ideal for you though but would be transparent to the user. Plus would need to figure out a way through the frontend though since the osd code was ripped out. |
@grant2258 do you think the overclock code would be worth adding to core options? I suspect someone thought so at some point to leave that in there commented out. Not sure any miracles would come of it but experimental gain can be fun. |
@mahoneyt944 I think mark left it there after removing it from the gui he is probably teh best person to ask. It certainly can be done. |
@markwkidd ^^^^^ thoughts? |
I have had fun testing this over the last few days. And, while experimental, it can certainly benefit fix-ups of some games that previously were inaccessible. I never thought I would be able to run Hard Drivin/Race Drivin, at all on the Mini Classics! And, even Off Road Challenge was more playable! Having "variable" control without recompiling will be the clincher to truly make this a winner addition. |
@mahoneyt944 @markwkidd I see that mark actually pinged my name around the time he made that original issue:) In any case, I thank you both, as well as @grant2258, @arcadez2003, for your input into this. Now then, despite there being multiple values for CPU, such as CPU0, CPU1, CPU2, CPU3, CPU4, CPU5, ONLY worry about CPU0! The other perimeters are useless for most intents and purposes. SO, I would strongly suggest at least implementing CPU0 as a Core Option. I've been working with overclock for nearly 20 years, as far as emulation. It is mostly a misnomer. To truly overclock, you tend to usually kill performance/speed. It works in reverse, where you have to underclock to fix a majority of problem games. Case in point, Taito F3 games. ALL of them run awful on lower spec platforms, such as the Mini Classics, Retropie (earlier number models). BUT, through some bash script magic and timing changes, I have them running near flawlessly for our platforms. They had awful, stuttery sound, choppy game play. But, now, smooth and seamless (for the next Update I post!). So, for starters, Taito F3 games will immensely benefit from the CPU0 perimeter changes! Another game that will be helped along further would be Virtua Fighter, which I also got running better. Any of you reading this "issue", be sure to try the Taito F3 game, Dungeon Magic AKA Light Bringer. This is a great test candidate for this entire implementation, as it stands...it runs like crap on a ton of platforms! (But, Mini Classics, now running great!) BUT, like when we had the "audio issues - non boot) with Midway Games/Robocop (incorrect speed), etc, a few years back! I initially "temp duct tape fixed" these with overrides, til Grant2258 and the rest of the team at that time joined in and we all tested, and got things aligned...And, Grant2258 hard coded it in, and then helped me get it into MAME 2003 Xtreme...SO Much Nicer Now! I played with the CPU0-5 via MAME, as long as the OSD menu has existed. And, no matter what computer I was on, I was able to gain momentum in poorly running games. But, CPU0, again, is the ONLY value we should be concerned with. It can slide between 0-200. BUT, if you go at value 5 or lower, it will just freeze the game, til you change it to a higher value. So, essentially, the primary values that will help will be between 25-125. But, to cover the whole gamut, might as well allow all values between 0-200 to be allowed. Increments of 5 at a time works out fine. And, the shocking thing is I actually was able to run Cruis'n USA/World, Off Road Challenge, Hard Drivin', Race Drivin', all of which games were previously pretty much impossible to play. So, yeah, we need this option:) Minor bug report related to OSD. I have been through dozens of RetroArchs over the last half decade on the Mini Classics. I have noticed that depending on which RetroArch you use, OSD may not behave properly. So, some may have "attempted" to use OSD before, and instead of it actually working, as it should...it inserts coins instead, on certain functions! Again, this was just something I noticed in testing multiple RetroArchs. Could just be on "our" end. But, I suspect that some "retroarch" builds affected other platforms, too. And, those who begrudgingly do not want to update, may be on one of the "broken OSD" versions. Note, I see others HAVE had this issue...So, confirmed:) Thanks for pulling up the previous, related issues, Mahoneyt944! #458 So, then, as a Core Option, this should theoretically solve the broken "service" button for those who cannot use it, on whichever RetroArchs! Might be worth analyzing any other "useful" perimeter "service" mode changes, in the future, too. I will be doing a few videos showcasing improvements. But, I would certainly love a hard code method of doing this, rather than relying on "duct tape" overrides! Thanks!!! And, upon testing of the code, I can help with some notes, to go along with the commit/s, so others who do view them will have a rough idea of what to expect! |
Just to give an example of what I mean...this particular game, Dungeon Magic AKA Light Bringer, runs abysmally, under normal circumstances. I run it with 0 FrameSkip, on the crappiest Mini Classic of them all, with default specs 1.008 Ghz. This is far worse than a RetroPie. But, you can see the game is running smooth and seamless. I am almost afraid to watch my older videos, where the game was slow, choppy, crappy music, and mostly a gimmick, not really playable. Taito F3 games, in general, are fun ones to play...when they work well! |
@KMFDManic there are two thinks going on that are interchangeable in conversation. Changing it at driver level and the osd menu not sure which one referring too. Im doing nigh shift at the moment. This fix might have desirable effects for lower end hardware it will not necessarily be good on higher end but that isint the target audience anyway. |
@grant2258 I think we should focus on the core option overclock imo. This would allow us adjustability while also not being too invasive to the core. Also easier to update in the future if it's external to the game drivers. Not sure how effective it would be or not without testing such a core option lol. |
side note, we never ported the fixup for frame skip in this core. Not sure how well it works or not now since I've never used it. |
Osd and frameskip is done on my port already user the wip branch |
Osd and frameskip are areas I have no experience with. Osd was gone before I ever worked in the core and never used frameskip. Though as far as the osd goes for now, I think we are just concerned with the overclock portions and translating that into a core option. I've looked at your repo and xtreme's and there are many commits for frameskip and later touch up commits that I'm getting myself mixed up following it. |
@mahoneyt944 The frameskip that @grant2258 helped get into Xtreme and his fork, are the result of 2 things. One, "newer" retroarch has ability to "smart frame skip", as in only frame skip when latency drops below the notated threshold. Two, current frameskip implementation, as it stands...for both MAME 2003 AND Plus, is broken. If you change values, you will find some of them "black screen" games, with out of bounds perimeters. But, on Xtreme and Barcade Builds, you can use values from 0-10 fine, as well as the "smart frame skip" values for auto, aggressive, etc. @markwkidd @grant2258 As a reaffirming note, after more testing, the exact CPU option we need to be a Core Option is the drivers that use CPU0. Just ignore 1-5. No matter what you change 1-5 to, it is non-negligible. But, CPU0, has immediate impactful results, without needing to "restart" Core/Game. Here is where things get tricky. The math changes, depending on which stage you are in, on Killer Instinct..."low spec wise". So, Sabrewulf stage may work fine with one adjustment, Thunder Stage with another, Orchid or Cinder with yet another. This is quite common with a lot of fighting games, where the dynamics of overall calculations push necessary additional permutations. But, the Core Option for CPU0 (however we name the Core Option, in the end. maybe just (OSD CPU Clock). I definitely determined that some platforms/retroarch builds are unable to use OSD menu properly. So, Service, Test buttons may "insert coins" instead of functioning, as they should. SO, that pretty much makes this a more crucial addition. As a final note, for now. @grant2258, I was mostly talking about the OSD method. I tried a few other ones, such as KI driver clock, etc. Yes, it would be beautiful to have variable control to the actual "case by case scenario drivers", such as KI (which are the absolute worst games to run on low spec), but also the OSD control. But, only if feasible! So, something like a Core Option for OSD CPU Clock (doesn't require restart) and possibly KI CPU Clock (likely requires restart). If we can get BOTH of these as Core Options, Killer Instinct will be far more accessible to many more people. And, it actually might benefit to have a third option, CPU Core Clock...from cpuexec (likely restart, too). So, to reiterate, OSD CPU Clock (with JUST CPU0, as 1-5 are pretty useless), KI CPU Clock, and CPU Core Clock. Using 1 or all 3 of these in conjunction, you can really make a drastic impact with a ton of games! I did several hours of testing, and got even Hard Drivin', STUN Runner working well, messing with these! Thanks in advance for any response, input, developments:) I will get some more KI videos up over the weekend. But, as it stands, I have a majority of the stages running decent to good to well to pretty fast, now:) I hit 50+ FPS at times! This is in contrast to my earlier 4-11 FPS in earlier tests and demonstrations! I feel this addition will be a game changer, in its overall effectiveness. It would be the equivalent of an equalizer on a stereo and being able to "finetune" cars in your various Racing Games, rather than be stuck at crap spec defaults. One friend of mine was a master at finetuning the gear shifting in one of the Need for Speed Games, and damned, if he didn't do it so well that any Automatic Transmission Car had zero chance of outshifting him. He destroyed in races! So, crossing my fingers, this all works out:) Thanks again! |
Well cpu0 is usually the main cpu and the other is |
@grant2258 think we could do both cpu0 as well as cpuexec? I'm willing to test things out once we have solid code for core options. And, I can get some test videos posted. I'm already having great success on my end. I know this will work out. Not sure how easily u could call on the master ki clock, either. I'm happy with whichever variants we can code in. Low spec:) I also noticed you did some changes with daphne. I never got badlands to work, and will see if your build changes help with that, possibly. Attract mode runs, but wasnt able to insert coins! |
@KMFDManic sorry i just started nightshift have only been browsing this if you mean make the mame osd overclock feature work in ra menus as cpu0 that probably easily doable. Im not sure when you mean by cpuexec though. Also unrelated done a few mame2000 fixes if you guys are using that core needed some lovin. Will need to grab the pull request yourself though. libretro/mame2000-libretro#90 |
@grant2258 thanks for the heads up on MAME 2000. I will work that stuff in, too. And, congrats on not being cooped up in the house like during the Covid BS. I also work night shift, mostly, with early ams at my other job. To keep things simple, and on point...let's just worry about the core option for cpu0, for now. That should be sufficient for a powerful start to get things moving forward. Just give me a heads up when u do get a chance to look at it. And, thanks, as always for continuing to rock on! This change will definitely help keep things more optimal. And, thanks again for the fixes to 2000, as well:) And, feel free to suggest any movies/tv you've watched recently. I personally caught up on Loki, which was pretty fun, if into Marvel stuff. Again, thanks:) I look forward to testing this stuff out further. |
@KMFDManic pull request for you core is in KMFDManic/mame2003-xtreme@8446235 . @mahoneyt944 you and @markwkidd can decide what to do with it on this core |
@grant2258 did a quick swap in, how's this look https://github.com/libretro/mame2003-plus-libretro/compare/Overclock |
@mahoneyt944 is up to you guys what you want to do with it to be honest @KMFDManic was specific he wanted cpu0 only obviously nothings set in stone you just need to be sure the emulation is up and running when you change it or expand it. |
Oh and your default values were goofed up after 80. I noticed when I copied over. |
fixed tah. Its pretty soul destroying having to add all them values in the first place would be nice to have a slider. |
@grant2258 @mahoneyt944 Awesome, grant2258:) I did MORE testing with the other CPUs, as far as 1, etc. So, we established 0 is main cpu. 1 and on are sound. I was able to do an equalizer combination of 0 AND 1 to get War Gods to run better. These values are completely negligible on most games. But, a game that is really finicky, such as War Gods, you can notice differentials a great deal faster! I will test the code tomorrow am when I wake up! Let me know if I need to change anything! Based on the 1 (finally showing me a difference), would the other values be problematic to add, or pretty much already structured and easily called upon with the pattern of 0 to 1? And, thanks again for this awesomeness:) I was surprised at how well I was able to get War Gods going...It's nice seeing the actual Arcade Version, rather than what are considered terrible N64/PS1 Ports! |
Was thinking the same thing, not sure Ra has anything like that or not. But would be much easier. |
@grant2258 , "soul destroying", haha:) It felt that way when working in the LudicrousN64 stuff! I was doing the entire N64 game library on an individual basis! "overclock this game, underclock this game, you get the idea:)" Now you know why "data entry" is not the most fun job in the world! Hey, I wanna make video games..."ok, data entry these 4000 pages of code:)..." |
@KMFDManic you can add as many decimal values as you like we just divide the vale by 100 to a double. 100 is the default |
What's the full range .1 to 2? |
mame limits it to 200% nothing stoping you going beyond that dont see any reason too 0.01 - whatever your want |
@grant2258 I meant if we extended beyond cpu0, to also add cpu1 (War Gods confirmed that cpu1 DOES come in handy, as it was fixed using cpu0 in conjunction with cpu1. Not sure how effective 2 and on are. But, with War Gods, definitely was a game changer with 0+1. @mahoneyt944 anything under .05 will pretty much lock the game frame rate to nothing, til you change to higher value. It won't crash the game. It will just lock the ability for FPS to occur. But, still nice to cover all values. As I do more tests, I will suggest a few "base point games" to best see results with. So far, Killer Instinct and War Gods are the higher tier ones to try. But, Dungeon Magic or Elevator Action Returns are great testers, too, especially if on retropie equivalent specs. |
@KMFDManic well its easy enough to add other cpu options. In your case once you have the values you could to a romname compare and set the add auto option that injects your values from a data structure you create. Feel free to implements it anyway you like though you have the bare bones to work with |
@grant2258 Since some of the things I plan or hope on implementing (non-OSD) will lead to system freezes/crashes, I won't recommend them for the Plus/Main 2003. But, with Xtreme, I wouldn't mind having them there, with "warnings". I will notate these on the Xtreme Fork, when I next ping you, so you have an idea of what I am going for. I will play around with the latest pull request when I wake up in the am, and go from there. Thanks, again!!! |
@KMFDManic so .05 works, less than that does not? So we should include values 5 - 200 divisible by 100 |
No problems at all I do agree this is very specific to low end hardware your targeting. You will see different results on more capable hardware |
@mahoneyt944 25-125 are most optimal values. Anything below 25 will be problematic, as will anything over 125 (rare exceptions will work with slightly higher values, thus far). And, some games will obviously behave differently, because of their varied original hardwares. As I further cement things on the Xtreme end, I will touch base with you guys, test result wise, for the Plus end. |
In conjunction with the stuff I already added Mini Classic side, to better handle KI, the latest CPU addition helped "boost" KI to be quite optimal. Note, with the CPU Core Option, that is the ONLY way you can change the values...The OSD Menu will be unchangeable for THAT particular "pulled from" value. Not a big deal, as I much prefer the Core Option Method! It is beautiful:) So, here we go, finally...better KI with great (well, much better!) performance/speed/sound:) Thanks, both of you:) I will close this issue, for now. But, we can continue to communicate on it, to better finetune things in the future! |
Here's a bounty I saw linked in mame2003 |
And tests done with overclock vs scale?
|
@mahoneyt944 it's just the cpu0 from the OSD menu. I believe that would be overclock. You can change value in Core options, then open OSD with the normal shortcut you map. You will see the value is identical to the core option. Any specific games you've been testing so far? |
With the new core option. I've tested kinst and blitz. Both of which I can squeeze another 15fps out of by lowering the CPU clock scale between 40 - 60. Blitz seems a bit more demanding though than kinst. I also tested umk3+ which already plays great and I can reduce the scale in the 40s and still yield a playable game. There's probably many games that could be tweaked with this when need be. I wouldn't call it a solution, but I great way to squeeze the lemon a bit harder. Definitely an interesting option to experiment with. |
src/cpuexec.h:182:#define timer_set_overclock(cpunum, overclock) cpunum_set_clockscale(cpunum, overclock) |
Lol that makes more sense. Was wondering why there seemed to be 2 calls but didn't look into it |
I did my homework before jumping in the fire lol |
It's definitely a neat option to tinker with I was able to play kinst almost at normal speed. Blitz was playable but still slow. With "default" set I get 20 to 30 fps if I'm lucky and with "40" set I was getting 30 to 40 something fps. Not quite there but improvement none the less. |
Well to be honest this is an option that always has been in mame via the osd. It simple less workload for the emulated cpu means less processing power needed. It helps the bottle neck |
I'm really use to the mame menu at this point so I'm biased for liking it, but I can see why the layers of menus are not desirable in the grand scheme of retroarch. Any features like this that could be swapped to a core option is probably a good thing. |
Well cant agree i prefer the ra way but it is what it is. If they had a basic menu system you could implement within a core i could live with that. Again I dont use this core per say so i dont really mind what you do. If you stick to this way its what everything will be. No real back and forth input from core to the menu its one way only isint ideal. |
It seems like the core option menu just needs more features then it probably wouldn't be so bad. But I'm not looking to go that route. So consider this all hypothetical lol. For example is there away to have a sub category? Such as this. For say vector settings or artwork etc
|
Havent looked into the menu menu system you would need to ask in discord. |
Just did. That would be pretty useful though because we could organize vector settings, artwork, or even include a proper dip switch menu with some work without it cluttering everything. I'm guessing they don't want to have sub categories in this instance though but we'll see. |
@KMFDManic i missed the boat here just catching up now, so from what i understand you guys have added Can this be done for games on the fly or is it one size fits all settings that can be flipped on and off rather be I could sure do with a boost up for the Taito F3 games on the xbox they're playable at around 20-25 depending on Unless i've picked you up wrong you mentioned you'd previously improved the Taito-F3 games before @grant2258 |
@arcadez2003 For the Taito F3 games, on YOUR end, using the latest coding commits, you can go into the Core Options, and drop down the CPU Scale Clock Option just added, try it downward in increments of 5, til you find a nice ratio of performance. But, in conjunction with that, you can ALSO use the newer, fixed frame skip, and try it on 2 or "auto", if on "latest RetroArch". 2 will work fine on any RetroArch. The top most perimeters will only function on newer RetroArch. You can also "desynch" games to gain more FPS. Not really ideal to do it that way. But, in some circumstances, if your platform is not that great, it may be helpful. RetroArch Video Synch/Audio Synch Toggled Off, temporarily, JUST for that particular game. When I was updating N64, I worked in the changes so that games could run Synched, as well as Desynched. Initially, games like Fighting Force were "choppy frame rates" when Synched. SO, I had to change the timing til the frame rates were smooth Synched...And, it still allowed the additional push while Desynched, for those who wanted to do it. That is what helped me do this: (keep in mind, THIS game ran at 4-8 FPS, previous to the changes; And, flickers in on foot stages:) https://www.youtube.com/watch?v=8pt4NrMi5Y4&t=153s Anyways, @grant2258 @mahoneyt944 I did more testing. There is something else I would like to add to Xtreme. But, unfortunately, it does cause really bad emulation issues, if you mess with the values in a bad way. I am gonna open an issue on Xtreme Fork, and clarify what I refer to! I would consider this a "very unsafe addition". But, me, I would like to add it, personally. |
@arcadez2003 frameskip can now be set to skip a number of frames or automatically when frames drop. The new core option "CPU clock scale" set on default will use the native clock speed or else you can over or under clock from there without restarting. If you find a setting that improves a particular game, save it as game opt file. Most games should be set at default. |
EDIT: Grant2258 and Mahoneyt944 clarified we can do this another way:)
The text was updated successfully, but these errors were encountered: