"Oh, let's just rework the menus to be a little nicer to use". Two months and an entire project overhaul later, it's time to share the progress!
Accessing the beta
New features are available in the beta branch of Keysight. These can be accessed by right clicking on Keysight in your Steam library, heading into Properties, then the Betas tab, and selecting "beta -" from the drop-down list. If Keysight does not automatically update, uninstalling and reinstalling will force Steam into giving you the right files immediately.
PLEASE NOTE that while your old save files will not be touched (other than Stats.sav), neither will they be used. You will need to set up all your configuration within the beta from the ground up. The public, main release will include a translation layer between old and new presets. Any settings created in the beta version of 1.2.0 will carry into the main release of 1.2.0, and old presets will be imported into 1.2.0 when it is released even if you have used the beta.
New features and changes overview
I'll try to keep the overview as brief as possible: as part of reworking menus, I ended up touching on and reworking almost every aspect of Keysight. The following are the most exciting changes:
- Sleeker and more intuitive menu
- Infinite preset slots
- Reworked Ring objects, these are now modular "pulses" and are highly configurable
- Seed-based randomization
- An undo-redo system
- An experimental "masking" mode for achieving perfect semi-transparency without use of a chroma-key
And now for a more detailed breakdown per section. A full changelog will be provided in the main release. Why not now? Because the prospect of writing such a document fills me with dread, and this post is going to be long enough without one!
Architectural stuff
- The entire menu system has been rebuilt from the ground up. This menu supports different styling, which is even user-configurable, because the idea of having several hundred options to customize how your several hundred other options look was just too funny to pass up. Some pertinent information: holding E still temporarily hides the menu while inside the menu; clicking to the right of the menu in the blank area will spawn a note; holding alt while interacting with a slider will allow finer adjustments to its value.
- Keysight now has an undo/redo system! Hooray! Ctrl+Z and Ctrl+Y ought to do useful things now. This system has strong potential to cause strange behaviour and bugs. If you find any, please report them in the community hub.
- Preset slots are now infinite! Finally! There is also a "DonorPreset.sav" save file that specific presets can be saved to and loaded from within the new Preset Management tab. This is to allow users to share presets between each other a little easier. Save file is located in /AppData/Local/Keysight/Saved/Savegames
- The randomizer now operates based on seed values. This is actually way cooler than that sentence sounds, if you're a websocket-y kinda person.
Core settings
- 3D camera controls (accessible by pressing F) have been rebuilt to behave more like a proper FPS. You can "flip" Keysight to act as though it's "wall-mounted" by setting Tilt and Local Roll to 0.
Note objects
- Notes can now be forced into having the shape of white or black keys regardless of what key they actually are. So a C note can have the shape of a Db, but centred on C.
- Notes can now be manually stretched in the X and Z axis (which can be... goofy... but hey, you can do it)
- The underlying note-object architecture has been significantly tidied up, Keysight is now no longer switching between two different objects for "top down" and "bottom up" notes (don't even ask).
Note lights
- No significant change
Keypresses
- Keypresses now have alternate modes of fading out after the key has been released. The animation curve can also be controlled for alpha / horizontal / vertical fade-out modes.
Impact lights
- The behaviour of the sustain pedal extending the lifetime of impact lights can now be disabled.
Pulses
What are pulses? Pulses are the replacement to "rings". They can behave exactly the same as rings, or do so much more. They are modular, meaning that you can have as many of these stacked as you like (err, I am not responsible for ensuing lag if you spawn 50). Pulses take a texture as their shape source too, so once user-imported textures are back online these should be enormously powerful objects.
Particles
- Particles slots are now infinite. Well, not infinite, since at some point your computer will explode.
Scene
The new "Scene" tab contains non-dynamic scene element options. So, things like backdrop, piano materials, etc.
- Experimental masking mode. This button can be found under Component Visibilities, and is a very powerful button. It has a strong CPU overhead to it, but it switches Keysight to render two views simultaneously: a "normal" one and a "mask". It does this at an attempted Width x Height*2 resolution, but Unreal Engine will not make a window bigger than your desktop resolution, so some squishing might occur. This mode is intended to be used with the StreamFX plugin for OBS to take advantage of the Dynamic Mask filter, to apply the mask Keysight image to the normal Keysight image to achieve semi-transparency without using a chroma-key, ensuring perfect edges and no loss of colour range.
- Backdrop can now behave like a "canvas" if Culling is disabled under Core Settings, and frame visibility is also disabled under Component Visibilities. This stretches the backdrop outwards by 10x, and is useful for non-standard Keysight implementations (such as 3D camera matched semi-transparent stuff so light spill is not contained to the edges of the frame)
Randomizer
- Randomizer is now seed-based. This means if you give it a specific input string (alphanumeric characters only), it will always randomize to that exact preset. Please note that if you edit the randomizer settings, the same string may give different results in your own copy of Keysight versus someone else's, as you are changing the thresholds a random number is compared against to give a result (the random number will be the same though, so depending on what you edit, it might not be a huge change).
Hotkeys
- Tons of new actions have been added as hotkey-triggerable events.
Graphics
- No significant change
System
- Lots of new options to control behaviour of the reworked menu!
- Websockets have been reworked. Full guide to follow soon(tm), but websockets can now send a password on connect, have many more actions available to be triggered. They can also send response messages back to the server, helping with chat integration on a stream and debugging.
- Menu styling menu. YEP. You have options for your options now. This isn't really intended to be used, because... why bother. But I needed a modular menu styling back-end for the menu rework, so in classic Keysight fashion it has been exposed to the user for modification if desired.
- Default material calibration. This allows you to set the internal "default" reference values Keysight uses in the randomizer, or when adding new presets.
Missing features in this beta
This is not a complete build. It's going to take a while longer to get the final pieces in place for a public main-branch release, unfortunately. The following are absent:
- Basic menu mode
- Tooltips for most buttons
- Stats menu
- Most randomizer menu tabs
- Preset cycle/random looping modes
- Menu light mode (cue light mode joke)
- Individual preset reloading from file from within the menu
