Loloppe / Lolighter

C# WPF Program to Read and Modify Beat Saber's map JSON structure
9 stars 0 forks source link

[not a bug - a thankyou] I did a rework of the auto-generation systems and other stuff. Yours if you want it. #2

Open uq1 opened 1 year ago

uq1 commented 1 year ago

I have released my own version (renamed) here: https://github.com/uq1/BSAutoGenerator

I remade most of the auto-gen code to use example dat files users provide to:

  1. Find patterns of single notes.
  2. Find chains of double notes.
  3. Record all known previous notes (hand positions) for the entry to each pattern/chain, so it creates reachable transitions.

It then takes those known patterns from real mappers, and uses those to generate the patterns in the new song. I guess it is similar to what AI/BeatSage attempts to do, but without the guesswork, just logic and known usages.

It also adds ability (command line option) to actually generate on BeatSage, although I don't know why anyone would want to compared to what this new system outputs.

I also added support for drag/drop on the exe, or the window to speed up auto-generation.

Anyway, I am just reaching out to say, if you want to use any or all of it, then feel free. I made it for myself, but it turned out pretty nice compared to any auto-generation I have seen so far, especially for fun and casual difficulties (hard and below), but works fine on any.

Loloppe commented 1 year ago

I looked a bit at the code and the example song output, but your program feels like a step backward to mine or Beat Sage? I'm not even sure why you're using Lolighter to be honest, at least according to what you've said and the output map.

The simplification of the process is great, your program is way easier to use than mine for sure, so much that someone that don't know shit about mapping could use it (pretty much the same advantage as Beat Sage). But the output you have right now seems to be full of issues, maybe even more than Beat Sage (https://bsmg.wiki/mapping/basic-mapping.html#pattern-best-practices).

Also some of the terms that you use are quite confusing, like "chains of double notes". In beat saber, a chain is an official slider object. Did you just mean multiple double notes on same beat in a row?

In the past, 3 year ago, I've made an automapper that use "pattern" placement instead of free flow or whatever other they might use and it was already pretty amazing (a python script, then osu2saber, then https://github.com/Loloppe/LolighterOld), the output was already better than Beat Sage, it could create stream, jump, standard or even tech maps by using manually made "pattern pack" which were applied randomly to the map based on rhythm and speed, but I knew that I could make something better with free flow and then implement it directly in ChroMapper for people that know how to map, to see the transformation of their maps live and adding some extra options on top for configuration (https://github.com/Loloppe/ChroMapper-AutoMapper). Lolighter is pretty much pointless now that the plugin for ChroMapper exist, I've simply updated it because I know a lot of mappers that use it to generate lightshow. The automapper of Lolighter is pretty outdated compared to the plugin.

The point of all the restriction of my code is for the individual hand flow to make sense, based on my own understand of what a good map is. I don't see how using patterns from other maps (that you might like) to apply them to a new maps randomly by trying to make them fit like a puzzle would turn out any good, the program got no idea what's good or not unless you tell him, and leaving that choice to the user will just create monstrosity, unless you start adding the same restriction that I've had on top of all that (which would make the whole pattern thing pointless?). I didn't really read much about your new code you implemented, but it's probably gonna be a lot of work if you want to make this work. The majority of maps out there are pretty bad to begin with (with DD, triangle, vision issue, bad flow in general, etc.).

If you just want to generate simple maps with basic flow that won't require you to break your wrists to play them, Lolighter already do that. Yea it doesn't have stacks, tower, chain, arc, bomb flow, walls, etc. but when it come to basic mapping practice, I don't think anything will ever come close to this. Just finding a way to fix double without breaking proper flow while keeping randomness took me over 1500+ line of code (https://github.com/Loloppe/ChroMapper-AutoMapper/blob/da6eae551c3661997e3492760c8693a9ca0756c0/Items/Helper.cs#L11).

Anyway, feel free to use whatever code I might have if you think you can make it better, but I'm already satisfied with the current result of this plugin. I might make a v3 lightshow generator, or add some Noodle Extension/Chroma functionality to it, but right now I have 0 motivation to do it.

uq1 commented 1 year ago

Thanks for the constructive feedback.

You are right, there are some technical errors in what it has generated in the example map. I chose the example dat files based on what I like, and as you pointed out, they are not technically correct. For me though, they are generating maps very similar to what I liked in the originals, which was the point of this method.

Note that I usually only play casually on normal or hard, so the example data is also those difficulties, so the expert and expert+ examples on the example map should be disregarded.

The good news is the code itself only takes what you give it. It checks that the previous notes exist in the examples before using a pattern. If the original maps provided as a source are technically perfect then so should be the output. The only exception to this may be if there is a lack of data (map.dat's) provided to draw upon, and it is forced to use fallbacks.

Yeah, Lolighter did already create nice maps, this is why I based my method on it rather then the other options I tried, and then contacted you to offer the changes to you, if you want them.

I did not realize that you had started on the ChroMapper version, if I had, I may have not bothered with any of this haha. I havn't tried it yet, but just looking at all the work you have put into the new Helper.cs rewrite may have fixed the few issues I had originally, which was in fact with doubles. It is why I started this new method, which begun with only the maybe poorly named "double chains" code (chains in the english definition, not the beatsaber (tm) one). The single patterns I added after, reusing the same code (as honestly the lolighter singles are great, it just made sense to extend the same system I had done rather than to check transitions between 2 systems manually), and I had planned to do the same for bombs and walls.

I would be interested in an updated lightshow generator, although honestly what you have done is pretty good as is. I can understand lack of motivation to fix what really is not broken. :)

Anyway, I am not sure how much more I will do with my fork. I could easy add bombs and walls but I generally don't use them, in my opinion they break flow more than they add to the map, but everyone is different. The offer still remains though, if you want to use any of the code (even just the drag/drop stuff or beatsage integration), feel free. Just trying to give something back for all your work.

Oh, by the way, my entry-point changes where it branches into my pattern in your code are within an #if, it could easy be made into an optional choice with a checkbox or command line switch like the beatsage integration is.

Also, I apologize for not git forking lolighter and renaming it, I did not plan to release any of this, I did this stuff locally for my own use, and only uploaded and released what I did because I was pretty happy with the results, and wanted to give you (and the community) the option of using any of it.

Cheers, and thanks again for all you have done.