TeamRizu / OutFox

The Bug Reporting Repository for OutFox LTS 0.4, Alpha V and Steam Early Access Builds
https://projectoutfox.com
Apache License 2.0
178 stars 3 forks source link

[FIXED] [PUMP] Misses combo doesn't reset when getting a Bad or Good like it should #690

Closed thedaryen closed 6 months ago

thedaryen commented 11 months ago

Is there an existing issue for this?

Operating System

Windows 11

CPU

i5 12600k

GPU

RTX 3070

Storage

1TB GAMMIX NVME SSD

Game Version

5.0.0-041

Game Mode

pump

Theme

Both Default theme and Infinitesimal

Describe the problem

When you get 4 misses consecutively, the game starts displaying "Misses Combo" like it should. However, if you have an active Misses Combo and hit a "Bad" or "Good" judgement, the Misses Combo doesn't reset to 0, but just keeps going. This happens when playing on Pump Mode, using any of the Pump Style Timings (Easy Judgement, Normal Judgement, Hard Judgement etc)

Describe what should happen

The expected behavior from pump gameplay should be that hitting either a "Good" judgement or "Bad" judgement should interrupt the misses combo, effectively resetting it to zero.

The correct combo behavior for Pump should be as follows:

There are two Types of Combos: Let's call them "RegularCombo" (the combo we all know and love) and "MissesCombo" (counts consecutive misses):

Judgements effects on Combo:

Additional quirks:

Relevant Log output

No response

Scraticus commented 11 months ago

Fixed in upcoming Alpha V 042

thedaryen commented 11 months ago

Fixed in upcoming Alpha V 042

So, I've been testing this on build pre042-a12-SSE3-Win64-date-20230730 and it hasn't really been fixed. In the meantime I got a little bit more familiar with metrics.ini and Gameplay.lua and took a look at the code from the _fallback theme. Let's get more technical with the issue I've described:

From Appearence\Themes_fallback\Scripts\03 Gameplay.lua, line 144

function ComboContinue() local Continue = { dance = GAMESTATE:GetPlayMode() == "PlayMode_Oni" and "TapNoteScore_W2" or "TapNoteScore_W3", pump = "TapNoteScore_W3", ['be-mu'] = "TapNoteScore_W3", kb7 = "TapNoteScore_W3", para = "TapNoteScore_W4" } return Continue[CurGameName()] or "TapNoteScore_W3" end

I supposed that's where we'd define the lowest judgement that should keep adding 1 to the combo count. For Pump, that should be the "Great" judgement.

For Pump, Outfox seems to consider the judgements to be as follows:

Now, this choice of priority for the judgement windows warrants another issue discussion, but that's outside the scope of the current issue. What I'd suggest for the time being is to make it so that W1 (Perfect) and W2 (Great) "continue" combo while all others do not.

Ok, let's head to the next function:

'function ComboMaintain() local Maintain = { dance = "TapNoteScore_W3", pump = "TapNoteScore_W4", ['be-mu'] = "TapNoteScore_W3", kb7 = "TapNoteScore_W3", para = "TapNoteScore_W4" } return Maintain[CurGameName()] or "TapNoteScore_W3" end'

Assuming this function is supposed to define the lowest window that maintains the hit combo (which means, doesn't add to neither breaks the hit combo), that would be pump's Good, or "TapNoteScore_W3", not "TapNoteScore_W4" like the fallback theme defines here.

Then, we have the problem of the metrics.ini setting for MaxScoreToIncrementMissCombo='TapNoteScore_Miss'. This setting makes it so that only a MISS will add to the miss combo. But it does nothing about judgements that currently MAINTAIN miss combos, which is not pump accurate behavior. There's not such a thing as maintaining a miss combo in pump. You either add 1 to it or reset it to zero.

Currently, it seems like the ComboMaintain() function is being applied both to Miss Combos and Hit Combos, what we need is away to separate it, something like HitComboMaintain() and MissComboMaintain()

Last but not least. about the 51 miss combo triggering a fail, this is set in metrics.ini at FailComboAt=51, and seems to work. However, FailType: Miss Combo is not being correctly set as a default mod for profiles' Stats.XML, which ends up reverting to other FailTypes for some reason and some strings strings seem to refer to the new FailType as if it is FailAtEnd. Another detail: for pump, the FailPlayerInstantly flag should be set to true to trigger the 51 misses fail, as there's not a point in enabling MissCombo FailType if the fail isn't gonna be immediate. The whole point of the 51 miss thing is to get an instant game over if the player leaves the pad, so it's either off entirely or set to insta-fail when the ComboThreshold is met.

Jousway commented 11 months ago

am on phone so ill write it short

w1 is marv w2 is perf w3 is great w4 is good w5 is bad

i tested it on soundwaves with the piu timings and it worked fine

thedaryen commented 10 months ago

Just wanted to follow up on this by adding that I didn't realize before that the behavior of certain judgements maintaining the misses combo active without adding to it is not actually a bug, but a feature dating all the way back to ITG1 and probably even before that. So it applies to dance gamemode as well and probably others.

That being said, for Pump behavior to work correctly, we need a way to make the ComboMaintain() function distinguish Hit Combos from Miss Combos so that "Goods" can maintain a Hit Combo but void a Miss Combo.

If I had to guess I'd say it's probably doable just by editing the function in the Gameplay.Lua script, but I'm too coding challenged to figure out exactly how.

thedaryen commented 10 months ago

Tested FIXED for good in alpha V - build a15 (11/08/2023).

Scraticus commented 6 months ago

Fixed in 042