CircuitLord / NotReaper

A mapper for the VR rhythm game Audica
GNU General Public License v3.0
21 stars 14 forks source link

Feature suggestions #86

Closed Zernys closed 4 years ago

Zernys commented 4 years ago

Here's a fairly extensive write-up of features and fixes I would like to see for NotReaper.

Features:

Timing planning tool: Planning out and marking the timing to place notes at for a song is an important first step to mapping. The way I've been doing it is to start by placing placeholder targets in a corner through the entire map to mark timings. This solution is however quite annoying, since these placeholder targets needs to be removed while mapping and, can physically get in the way of the map itself. Particularly due to the editor limitation of not being able to place a second target of the same type at the same timing, requires you to remove placeholder timing targets continuously while mapping. Also means if you want to throw out and redo a section, you lose timings for that section. A more tailored solution of marking timings on the timeline which are not ever removed, with toggleable hitsounds would be a lot more convenient.

Custom grid: The ability to set your own number of vertical and horizontal grid divisions, preferably with an option of forcing 1:1 scale. While the current grid corresponds with the underlying format of the cues file, there is no reason to be limited to this grid. A different grid can handle notes in whatever way off-grid notes are currently handled. The current grid has way too few divisions to rely solely on. It is also not 1:1 scale, but close enough that it's not overly obvious to new users. Inconsistent grid spacing can result in inconsistent note spacing in patterns, which is not ideal.

Radial grid: Radial grid with center that can be moved freely or snapped to notes. Preferably customizable angle and distance divisions. Alternatively a simpler distance snapping mechanic without a fully fledged grid (OSU equivalent).

Numeric target position control: Editable target x and y fields to place/move targets numerically. I often want to place targets perfectly 1/2, 1/3 way, 1/4 etc between grid lines. Having to rely on eye balling it off grid and making repeated corrections is time consuming. Also knowing that it is slightly imperfect and off by a pixel or two stresses me out more than I want to admit. This would be less critical with custom grid options, but still a nice feature to have and I expect should be fairly easy to implement.

Free-form selection scaling and rotation: The ability to rotate and scale a selection around its center, or even more ideally a movable pivot. Think typical rotation and scaling interactions found in applications like Photoshop.

Selection timing flip: A shortcut to flip the timing order of a selected set of notes. Many symmetrical patterns can be made by first making the first half, either manually or through path builder, then copy-pasting, flipping it and overlapping the two ends. However, this currently requires every note to be manually reordered on the timeline.

Unbaked paths for streams: An option for path builder to have every other target opposite color, with the ability to choose between starting on left or starting on right. This would allow for streams without baking the paths.

Path chaining This one might be both a bit technical and a bit specific to my mapping style, but it would hugely improve the modifiability of my maps. Essentially, I often want to follow one path object directly, e.g. to change direction of a stream. Currently this requires me to bake the path and then create a new path from the last note. If I want to make changes earlier on in the stream, I have to redo everything after it, unless I somehow manage to re-connect to the later part of the stream. I would love to see a built-in option to start a new path from the last note of the previous path, where this new path inherits the position and rotation of the previous path. This both allows for chained paths without baking, and allows modifications of earlier parts of a stream or a chain to be edited without having to redo everything that comes after.

Backup system: Regular backups are of course important, both in case something goes wrong and in case of keeping older versions when making changes. A built in automatic backup system taking backup of cues on a regular basis and maintaining a number of previous backups would be nice. At the very least a way of exporting and importing cues for manual backups, rather than either having to make backups of the entire .audica file or having to manually pull cues in and out of .audicas.

Fixes and general polish:

Path builder interface click-through: Path builder selection mode (activated by pressing H), currently remains active after choosing a target and detects clicks through anything. Inadvertently clicking a different target hidden behind either the path duration change buttons or the path builder interface itself, starts a new path from that object.

Escape menu closing: Escape should be consistently usable to exit out of pop-up menus, but currently behaves very inconsistently. It works as expected for the count-in and the audio track padding/trimming menus, It does not close the BPM detection interface and opens the escape menu in the background. It closes the timing point pop-up, but also opens the pause menu and applies the timing point.

Path builder wider parameter ranges: The max value of the path builder parameter sliders are currently to restrictive. I've several times needed path lengths or angle increment increment larger values larger than what the sliders currently allow. You can currently set these parameters manually by editing the parameter text field, but pressing number keys while in this field changes your target type and closes the menu unless you use numpad keys.

jukibom commented 4 years ago

Some of these are outstanding ideas! It's pretty hard to facilitate discussion with all in one ticket though.

I'll close this and make a ticket for each one so keep an eye / get involved in discussion on those instead :)