Skip to content

Normalize Scoring #65

Description

@lulusuki

Scoring should be capped at 1 million, a perfect combo will achieve the max points.

Should account for the combo as a factor as well.

Activity

  1. moved this to Next Release in Project Goalson May 6, 2026
  2. added theissue type on May 6, 2026
  3. moved this from Next Release to Approved in Project Goalson Jun 5, 2026
  4. itronite commented on Aug 25, 2026

    @itronite

    returning to this issue, i may have figured out how to normalize scores properly

    with regular normalization, the scoring would look something like this
    base_score = max_score / num_notes
    where the score is evenly distributed across all the notes

    however the combo factor weights the notes differently every 8 consecutive hits, so the countermeasure i found is to weigh the number of notes in the map accordingly (first 8 notes are x1, the next are x2 and so on, up to x8).

    assuming perfect play, the combo ramp up (excluding x8 combo) should last for 56 notes and be weighted for 224 notes. even if the map has less notes, this shouldnt affect the algorithm.

    therefore, a map with 176 notes (120 + 56) should be considered as if it had 1184 notes (120 * 8 + 224). this gives a normalized base score of 844.59, which would be rounded off to 845 per note. the multipliers would be then applied as usual.

    heres a small python script that does the calculation. i'm 100% sure there's a quicker and better way to do this with maths but i'm not smart enough to figure it out

    num_notes = int(input())
    max_combo = 8
    max_score = 1000000
    hits_to_combo = 8
    
    # ramping up combo
    w_notes = 0
    combo = 1
    while num_notes > 0:
        w_notes += min(hits_to_combo, num_notes) * combo
        num_notes -= hits_to_combo
        combo += 1
    
        # reached max_combo
        if combo == max_combo:
            w_notes += num_notes * combo
            break
    
    print(f"n.º of actual notes: {w_notes}")
    print(f"score per note = {max_score / w_notes}" if w_notes > 0 else "0")
  5. oldcrate commented on Sep 2, 2026

    @oldcrate
    Contributor

    Should the speed and mode multiplier be applied to the total score too?
    So a mode multiplier that grants 1.1x score means a total score of 1,100,000 instead of the base 1,000,000.

  6. itronite commented on Sep 3, 2026

    @itronite

    i'd say the most reasonable answer is yes, because otherwise a play on, say, S-- (0.7x) could potentially yield the same score as S++ (1.25x)
    which isn't too bad but can easily prompt players to only get low speed/high acc scores to farm leaderboard spots

    also this has been applied in Sound Space and every single clone of the game

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions