Magic Symbol Recognizer - Help and Request Thread

Hey thanks for the nice comments. The project is set up so that stroke order does matter, the traces create a series of points and each point is compared to the users input and given a score based on roughly how close they are. You can create multiple variations of one symbol if you want to accept more than one stroke order, hope that helps you understand it a bit more.

OSU! looks like it is a series of custom slider button ui elements which probably check what percentage of the bar has been filled over a period time for the longer notes, but that’s just my guess.

To modify MSR for what you are trying to do you would want to associate a goal time with each stroke, then probably have some wiggle room for how close to that time the player should be. And of course UI indicators and all that. That’s actually kind of tricky now that I think about it.

So first step, associate a goal time with each stroke, probably in the struct but it could be it’s own variable that updates each stroke. Second step would be to track the player’s stroke time (lol) which you can do with an event timer that’s triggered by players input and increment a float each time it loops. Third step is to compare the player’s stroke time to the template’s goal time. For a multi-stroke symbol there will need to be a way to differentiate between the sub-strokes, I believe right now they are all just added together into one new array… which since the sub strokes are re-sampled you will know roughly how many points between each new stroke there are.

Another thing, in your example the first stroke and the triangle connecting stroke could be their own separate single stroke symbols to make things much easier, just fake it by having a hit box that the player has to draw inside so they can’t draw a vertical line (which MSR reads the same as a horizontal line since it’s rotation invariant) instead of a horizontal line. I hope that helps. Also, that is a cool project idea btw.

1 Like