-
Notifications
You must be signed in to change notification settings - Fork 406
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
(Experimental Tool) TAStudioMPR - For Local Multiple Player Controllers #4218
Open
ShinobiWannabe
wants to merge
69
commits into
TASEmulators:master
Choose a base branch
from
ShinobiWannabe:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+11,655
−50
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
restart again. cloned and copied tastudiompr folder in
before adding to list
Hooked up more events
they scroll together when playing but tasview2 does not allow click inputs
need to get the settings correct on the dynamically created tasview
They looks similar and the settings should be the same. Input Painting and row selection is working. NOT scrolling down though on second tasview for some reason though.
menu working better Clear() messed up again
needed a foreach tasview in a navigation partial class
Two tasviews are actually working and savable but not loadable third is not visible?
No anchor right, incorrect start location.
load now splits the inputs into the input rolls correctly
slight cleanup
slow though
Had a stray hardcoded TasView1 that was causing some bizarre problems in Insert
multiple does not work though
right context menu setup had some stray hardcoded tasview refs
Works for multiple rows in a single group. However there is are bugs if there are multiple groups selected with CTRL such as not deleting properly. If multiple groups are selected right near frame 0, you can get a negative row index and error too.
Little comment cleanup
There is an issue with how I am checking the focus. Works fine for ContextMenu, but if you select, hover over a different tasview, then use the Menu at the top of the form then it can select the wrong tasview to do an edit. Try MouseUp or a SelectedItem event to set a variable for focused tasview.
This fixes issues of the wrong tasView being selected for functions like Clear()
Seems to only happen when the insert amount is greater than Log.Count()?
Double check the names that they make sense
get rid of clipboard
Issue was that for the final frames at the very end it was simply setting Log[i], when it needed to be empty out the current controller and leave the other ones alone.
still only working on same tasView.The Paste From Selected is the way to go from one to another for now.
go through columns are Mnemonics are set
Bizhawktastudiompr
fingers crossed.
Another Attempt at Merge
…suddenly changes Throw an error early since there is no way to recover from that point while the TAStudioMPR is open. They will need to select the desired Core, Reboot Core, then try it again.
might be able to re-use some of the custom controls too
This was
linked to
issues
Feb 12, 2025
Added padding for scrollbar and 5 digit framecount to tasstudiompr
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a version of TAStudio splitting out the various "controllers" for a controller definition for a system into multiple InputRolls. This is specifically targeting multiple player controller tases (think a local game with multiple controllers). Basically with this you can do the main Insert, Delete, Clone, Copy/Paste within a single controller. You can also copy input from one controller to another.
Youtube Example of TAStudioMPR working with a multiplayer game.
https://www.youtube.com/watch?v=qcw37tiDtzM
How It Works
Upon load it looks at the Emulator.ControllerDefinition with specific attention to the fields ControlsOrdered and the ControlsOrdered.Count. It dynamically creates InputRolls (after the first InputRoll) based on the number, and then creates columns for each based on their inputs. Once the the InputRolls are created they are re-sized and re-located to make it look nicer. While visually the InputRolls are separate per controller the movie file is the same full size. When operations such as Insert, Delete, Clone, Cut, Copy, Paste are performed they go to the TasMovie.Editing.cs with their own functions. The startOffset and the controller Length for the current controller are passed in to most functions. Here character and string manipulations are performed so that operations only effect the intended controller. Here are some brief descriptions of the various important operations.
Clear: Will empty out the inputs for the selected frames of the specified InputRoll.
Insert Frame : First it adds an additional empty frame to the Log file at the end. Then creates a copy of the current frame, but sets the inputs for the current controller to nothing aka ".". Then it shifts all the inputs down only within the relevant controller.
Insert # Frames : Similar to above, but it inserts them in batches so it does not do the entire shifting of inputs X number of times for inputs.
Clone: Like the Insert Frame operation, but instead of making the inserted frames have no input, it uses the selected input to clone.
Clone X Times: This repeats the Clone operation X number of times.
Copy: This operation copies the selected rows and puts it into the clipboard.
Cut: This copies takes the inputs from within a controller and moves them to the clipboard then Deletes them from that controller.
Paste: This operation goes through the copied inputs and overwrites the current InputRoll's controller inputs starting from the selected frame. Note that this Paste only works within the same controller. For controller to controller look at the right click "Paste Selected Rows From".
Paste Insert: This is a combination of Insert and Paste where the inputs are inserted and the other inputs are shifted down. Note that this Paste only works within the same controller. For controller to controller look at the right click "Paste Selected Rows From".
Paste Selected Rows From: A new one that makes sense for multiple controllers. Here if you select rows from a InputRoll you can right click on an InputRoll that you want to paste to, then select a "TasView" from the sub to paste the selected rows. While originally I wanted to use the CurrentTasView (TasView and InputRoll refer to the same pianoroll object) and just freely copy and paste, I am not exactly certain how to do this cleanly. With the copy you can also copy from some other string outside the program, you can also activate the Copy event from the TAStudio menu, and if you move the mouse around the focus can change as well. If there is a cleaner way than using the dropdown menu to paste between InputRolls then I would be for it.
Truncate: This one takes the current frame and starting from there empties the inputs all the way to the end of the load for that controller. Then it goes back to find the first frame where the rest of the inputs across all controllers are empty and will Remove Range from there to the end of the Log.
Please inform me of any thoughts, issues, or possible improvements. This is pretty experimental, but it should be useful for tasers wanting an easier way to tas games with multiple controllers. I had been waiting for years for something like this, but nothing was close to what I wanted for multiplayer games so I decided to give it a shot myself.