Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Various QoL Features #358

Open
AudemusN7 opened this issue Feb 4, 2023 · 6 comments
Open

Feature Request: Various QoL Features #358

AudemusN7 opened this issue Feb 4, 2023 · 6 comments

Comments

@AudemusN7
Copy link

AudemusN7 commented Feb 4, 2023

This is a list of quality-of-life features that I think would be highly beneficial to mod developers. These features are primarily aimed to cut down the time sinks that exist within LEX's UI.

QoL Request 1 - Trashing Exports / Objects / Dialogue Nodes & Array Entry Removal

It would be a huge timesaver if there was a way to quickly trash exports, remove array entries, or objects from a level by pressing the Delete key. This could also include nodes in dialogue as well. Shift + Delete could also trash without a reference check.

While this would be a fantastic general time-saver, a specific example where this would be useful is when you need to port things between packages, but first need to clear out all references that you don't want. Say you have hundreds of exports referenced in a sequence but only you want to keep 15 for porting. You'd need to either right-click/remove from sequence for each of these, or click the Array minus button and very carefully ensure you don't accidentally remove the ones you want to keep. Instead with this feature you could just go the sequence editor and click/delete each one quickly (or even better, alt-click to drag a selection box over multiple kismet nodes to batch remove them from the sequence).

QoL Request 2 - Redirect All References

The idea here is that you can right click an export and repoint all references to another export. For example when a material import goes slightly wrong and an existing import is also ported into the package as an export, and you need to correct the reference in the binary of dozens of exports, which can be very time-consuming to do manually.

QoL Request 3 - Shift Multiple Objects

Sometimes you want to move an object, but there are other things in the level that rely on the relative positions staying the same (for example a pawn, their action station, lights and the convo stage). This QoL feature would allow you to select multiple objects in the Pathfinding Editor and shift their position as a group. (This would also potentially be great to have in LLE as well)

QoL Request 4 - Larger Colour Wheel

Often when experimenting with vector params, you need to dial in a very specific value. But because the colour wheel is quite small, this can be challenging. It would be great if the wheel was at least 2x bigger by default.

QoL Request 5 - Copy / Paste Values

Package Editor currently has the ability to copy parsed values, but it would be a great time saver if there was also the ability to paste parsed values to valid targets. This would be most useful for values that have multiple int properties such as coordinates and vectors.

QoL Request 6 - Porting Preview

When porting between packages, it would be useful to have a preview (perhaps a list? Though a visual representation in tree view would be the most idealised version of this) of all the exports/imports that will be added to the package if you proceed to clone all references. This would allow you to spot anything that's referenced that you don't want before porting into a package (especially since there's no Ctrl+Z in LEX).

QoL Request 7 - Open Highest Mounted File

This would be added under Tools in package editor. Put simply, this would open the highest mounted file with the same name (would likely require an asset database scan).

QoL Request 8 - Drag / Drop Relinking in Tree View

Instead of having to relink exports via the Metadata tab in Package Editor, you could simply click/drag an export/import within the same package to relink its instanced path. It would also be enormous bonus if you could shift+click to select multiple exports and move them all at once.

QoL Request 9 - Restore Trashed Object

While this wouldn't work on non-vanilla objects, it would be great if when restoring the export data of a vanilla trashed object, it was fully restored to where it was originally (same properties, metadata, binary, instanced path etc).

QoL Request 10 - Autosave

This feature would allow you to set an interval (for example 15 mins) in which the currently opened package is saved to an Autosaves directory, which would be highly useful if you need to revert to an earlier iteration of a file, or recover your work after a crash.

QoL Request 11 - Automatically Fix Yaw on Mesh Import

This feature would simply automatically handle correcting the yaw position on imported meshes, rather than having to manually edit the hex to reset it to 0.

@Mgamerz
Copy link
Member

Mgamerz commented Feb 4, 2023

My thoughts:

  1. This has been discussed internally before but just hasn't had time dedicated it for implementation - delete key functionality.
  2. This is somewhat implemented in CrossGen-V. I don't know how much work it would take to bring over. It's tricky cause you essentially hack the relinker.
  3. Don't know a bunch but the code is all single-object selection right now. A hack could be added for multiple move but it wouldn't be trivial.
  4. The color wheel is provided by a third party library - I don't think we've ever looked at how it actually works. There might be better color wheels than Xceed's.
  5. This has been discussed - might be possible with the script decompiler being able to read properties, even though it's not on a defaults block.
  6. Porting preview would be a great feature but it's pretty unrealisitc because until you actually pull things into the file you don't know what you actually need. The relinker is an unfathomably complicated piece of code. Even when working internally it is difficult to find why something is being brought over.
  7. We have code to open the highest mounted file already, we use it pretty extensively. Probably wouldn't be hard to add this.
  8. You can hold shift and drag to relink entries already.
  9. Seems reasonable. Note: We have code that re-uses trashed exports so you have to be careful with this, if you try to restore, it may point to another export that was re-used from trash.
  10. This could potentially be done. I don't see much that would stand in the way of this beyond some time.
  11. Probably could just be a dialog 'Do you want to correct the yaw?'

@SirCxyrtyx
Copy link
Member

QoL Request 3 - Shift Multiple Objects
This exists already, though you can certainly be forgiven for not having found it. In Pathfinding Editor, select Experiments > Show Experimental Level Tools. This adds two new tabs to the panel on the left, Groups and Level Tools. Right-click on objects and select Add To Group, then use the Level Tools tab to translate and rotate the whole group. Visibility and usability of this tool should definitely be improved.

QoL Request 10 - Autosave
My worry with this is that saving a file necessarily entails changing it if any edits have been made. Not sure it's a good idea for that to happen automatically.

@ElysiumFic
Copy link

Am I allowed to suggest Dark Mode might be a nice feature? (If it's already available, I haven't been able to find it.) I'm a huge night owl and opening Package Editor blows my eyes out.

SirCxyrtyx added a commit that referenced this issue Jun 4, 2023
@AudemusN7
Copy link
Author

QoL Request 11 - Clone to Another Sequence

Sequence Editor has a clone object button, which is super useful. But many times it may be needed to clone that object to a different sequence in the package. Currently, the only way to do this would be to

  • Clone the object
  • Remove it from Sequence A
  • Go to Sequence Band add the new export to the array
  • Go to the new sequence object in package editor and correct the instanced path from Sequence A to B
  • Correct the parent sequence on the object.

So this QoL request is for a new RMB menu option called "Clone to Sequence" where you select the object and it gives you a drop-down list of all the sequences in the package. When you select it, it automatically clones the object to that sequence instead, negating the need to do any of the above.

@SirCxyrtyx
Copy link
Member

There's actually a simpler way to do that currently.

  • Clone the object
  • Remove it from Sequence A
  • Go to new sequence, right-click and select Add Existing Object (or select Tools > Add Object from the menu.)

This isn't ideal of course, as you have to remember the UIndex of the object. Perhaps a Copy RMB option on the object and a Paste RMB option on the canvas (that would work across sequences)?

@AudemusN7
Copy link
Author

AudemusN7 commented Jul 9, 2023

QoL Request 12 - Correct Object Index on Porting

Sometimes when porting objects between packages it can be troublesome when there are existing objects in your destination package that share a class/object index with those in your source package. While sometimes you may want for these matching objects to be ignored, if you don't want them to be ignored then you currently need to go through every object and manually correct the indexes to ensure there are no duplicates before importing. Otherwise, certain objects will not port into the destination package, and will instead reference the existing object in the package.

For the QoL request, I propose a checkbox added to the porting dialogue which changes this behaviour. When checked, any objects being ported will automatically have their object index corrected and will then be ported into the package. This already exists when porting an object directly, but when these objects are referenced externally (such as when porting a sequence) this is not currently taken into account.

This feature would reduce a lot of headaches, repetition, and mistakes when porting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants