STROOP: Difference between revisions

Jump to navigation Jump to search
5,493 bytes added ,  4 May 2019
Not a stub, although it is incomplete
(Not a stub, although it is incomplete)
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{stub}}
'''S'''uperMario64 '''T'''echnical '''R'''untime '''O'''bserver and '''O'''bject '''P'''rocessor, or '''STROOP''' for short, is a '''diagnostic tool''' for Super Mario 64 which displays and allows for simple editing of various game values and information. It can connect to a running emulator and update values in real time. Some core features include views of loaded/unloaded objects, Mario structure variables, camera + HUD values, an overhead map display, and many more. An up-to-date version of STROOP can be downloaded from [https://github.com/SM64-TAS-ABC/STROOP/releases/download/vDev/STROOP.zip here].
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]]  
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]]  
[[File:ObjectSlotHack.png|350px|thumb|Tyler's ROM hack that displayed the object slots in text form]]  
[[File:ObjectSlotHack.png|350px|thumb|Tyler's ROM hack that displayed the object slots in text form]]  
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]]  
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]]  
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]]  
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]]  
'''S'''uperMario64 '''T'''echnical '''R'''untime '''O'''bserver and '''O'''bject '''P'''rocessor, or '''STROOP''' for short, is a diagnostic tool for Super Mario 64 which displays and allows for simple editing of various game values and information. It can connect to a running emulator and update values in real time. Some core features include views of loaded/unloaded objects, Mario structure variables, camera + HUD values, an overhead map display, and many more. An up-to-date version of STROOP can be downloaded from [https://github.com/SM64-TAS-ABC/STROOP/releases/download/vDev/STROOP.zip here].


== History ==
== History ==
After Pannenkoek2012 discussed object slots in his [https://youtu.be/9xE2otZ-9os Science of Cloning] video, there had been a desire to view the object slots of the game in real time. Pannenkoek2012 discussed this desire with Tyler Kehne. Tyler then proceeded to make a ROM hack that could display the object slot behaviors in text form, overlaid onto the screen. Pannenkoek2012 was not pleased with this implementation, as he wanted a separate program that would show the slots visually with images of the objects. Thus, Tyler then proceeded to make a program that would do just that, which he named the SM64 Diagnostic. Tyler wrote the code for it, and Pannenkoek2012 provided the object images and names. The SM64 Diagnostic was a major breakthrough, as it showed the object slots, the process groups, the held object, object variables, and Mario variables. However, it also had some annoyances, such as it couldn't connect to an already open Mupen (it had to open Mupen itself), it would occasionally crash Mupen, the angle variables (yaw/pitch/roll) had confusing names, the variables couldn't be edited, and the checkbox variables used a confusing system.
After Pannenkoek2012 discussed object slots in his [https://youtu.be/9xE2otZ-9os Science of Cloning] video, there had been a desire to view the object slots of the game in real time. Pannenkoek2012 discussed this desire with Tyler Kehne. Tyler then proceeded to make a ROM hack that could display the object slot behaviors in text form, overlaid onto the screen. Pannenkoek2012 was not pleased with this implementation, as he wanted a separate program that would show the slots visually with images of the objects. Thus, Tyler then proceeded to make a program that would do just that, which he named the SM64 Diagnostic. Tyler wrote the code for it, and Pannenkoek2012 provided the object images and names. The SM64 Diagnostic was a major breakthrough, as it showed the object slots, the process groups, the held object, object variables, and Mario variables. However, it also had some annoyances, such as it couldn't connect to an already open Mupen (it had to open Mupen itself), it would occasionally crash Mupen, the angle variables (yaw/pitch/roll) had confusing names, the variables couldn't be edited, and the checkbox variables used a confusing system.


Line 18: Line 15:


== Connection Screen ==
== Connection Screen ==
 
[[File:Connection Screen.jpg|475px|thumb|STROOP Connection Screen]]
After STROOP finishes loading, you'll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:
After STROOP finishes loading, you'll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:
* '''Refresh''': Refreshes the list of processes to choose from.
* '''Refresh''': Refreshes the list of processes to choose from.
Line 47: Line 44:


STROOP has several tabs, each of which manages one specific domain. For example, there's a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it's recommended that you customize which tabs are shown and their order, for your own convenience. To reorder tabs, use the left/right arrow buttons on the top right of STROOP, which will move the current tab one space over in the arrow's direction. To hide a tab, click on the tab while holding control. Using these 2 techniques, you should be able to reduce the number of tabs to a reasonable amount as well as put the tabs in the order most convenient to you. If you ever need to use a tab that you've hidden, then simply add it back using the Add Tab button on the top right of STROOP. Note that the order of tabs and which tabs are hidden are saved, so you only need to do this once, as these settings will stay the same on subsequent STROOP opens. However, if you ever download a new version of STROOP, the settings will be back to their original state. Nevertheless, you can always copy the saved settings file (STROOP\Config\SavedSettings.xml) from the older version of STROOP and replace that corresponding file in the newer version of STROOP.
STROOP has several tabs, each of which manages one specific domain. For example, there's a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it's recommended that you customize which tabs are shown and their order, for your own convenience. To reorder tabs, use the left/right arrow buttons on the top right of STROOP, which will move the current tab one space over in the arrow's direction. To hide a tab, click on the tab while holding control. Using these 2 techniques, you should be able to reduce the number of tabs to a reasonable amount as well as put the tabs in the order most convenient to you. If you ever need to use a tab that you've hidden, then simply add it back using the Add Tab button on the top right of STROOP. Note that the order of tabs and which tabs are hidden are saved, so you only need to do this once, as these settings will stay the same on subsequent STROOP opens. However, if you ever download a new version of STROOP, the settings will be back to their original state. Nevertheless, you can always copy the saved settings file (STROOP\Config\SavedSettings.xml) from the older version of STROOP and replace that corresponding file in the newer version of STROOP.
{{STROOP_Tabs}}


== Object Slot Panel ==
== Object Slot Panel ==
Line 180: Line 178:


Address variables come with the following additional options when right clicked:
Address variables come with the following additional options when right clicked:
* '''View Address''':  
* '''View Address''': Views the variable's value as an address in the Memory Tab.


Object variables come with the following additional options when right clicked:
Object variables come with the following additional options when right clicked:
* '''Display as Object''':  
* '''Display as Object''': Displays the variable's value as an Object. Values include:
* '''Select Object''':  
** '''Slot n''': The nth loaded slot.
** '''Slot VSn''': The nth vacant slot.
** '''PG n''': Process Group n's node.
** '''(none)''': The value 0.
** '''(unused object)''': The unused object slot.
** '''(unknown object)''': A value that's not recognized as a valid object reference.
* '''Select Object''': Selects the object slot whose object's address equals the variable's value.


Triangle variables come with the following additional options when right clicked:
Triangle variables come with the following additional options when right clicked:
* '''Select Triangle''':  
* '''Select Triangle''': Selects a custom triangle in the Triangle Tab whose address equals the variable's value.


Boolean variables come with the following additional options when right clicked:
Boolean variables are unique in that instead of having a text value, they have a checkbox value. The checkbox is checked if the underlying number value (after possibly masking) is non-zero. In the case that the variable represents multiple values with different checked states, the checkbox will be indeterminant. Boolean variables come with the following additional options when right clicked:
* '''Display as Checkbox''':  
* '''Display as Checkbox''': Toggles whether the variable is displayed as a checkbox.
* '''Display as Inverted''':
* '''Display as Inverted''': Toggles whether the checkbox's checked state is inverted.


Variables can be selected by clicking on them. You can hold shift and click on a variable to select the range of variables from the previously selected variable to the currently selected variable. To toggle whether a variable is selected or not without unselecting all variable, click on the variable while holding control. To unselect all variables, click on the variable panel. If you right click on a variable that's selected, then you'll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with "Angle:" only affect angles. Many of these options have just been covered, but the ones which haven't been are:
Variables can be selected by clicking on them. You can hold shift and click on a variable to select the range of variables from the previously selected variable to the currently selected variable. To toggle whether a variable is selected or not without unselecting all variable, click on the variable while holding control. To unselect all variables, click on the variable panel. If you right click on a variable that's selected, then you'll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with "Angle:" only affect angles. Choosing the "Default" value for an option (e.g. Display as Hex) will set that option to how the variable was originally (e.g. its original status of whether it was displaying as hex). Here are these options:
* '''Show Variable XML''':  
* '''Highlight...''': Highlights the variables with a red or custom-colored outline.
* '''Show Variable Info''':  
* '''Lock...''': Locks the variables' values.
* '''Show Background Color...''':  
* '''Fix Address...''': Fixes the addresses of the variables.
* '''Move...''':  
* '''Copy...''': Copies the variable's value (with no rounding) to the clipboard. This can be done with commas, tabs, or line breaks separating the variable values. Separately, you can copy the variable values for code, which will copy instantiation statements for each of the variables, e.g. "float X = 100f". For more control over what the variables are named, hold control while clicking this option. This will open up a dialog where you can enter text, where the $ represents the variables' original names. For example, entering "my$Value" will result in "float myXValue = 100f" being copied to the clipboard.
* '''Remove''':  
* '''Paste''': Pastes the clipboard value to the variables. The values for the variables will be parsed from the clipboard value, which will work so long as the values are separated by whitespace (e.g. spaces, tabs, line breaks) or commas.
* '''Rename''':  
* '''Round to...''': Sets how many digits to round the variables to.
* '''Open Controller''':  
* '''Display as Hex...''': Sets whether the variables are displayed as hex or decimal.
* '''Open Triplet Controller''':  
* '''Angle: Signed...''': Sets whether the variables are displayed as signed or not.
* '''Open Pop Out''':  
* '''Angle: Units...''': Sets the units for the angle variables. See above for more information on the unit options.
* '''Add to Tab...''':  
* '''Angle: Truncate to Multiple of 16...''': Sets whether the angles' values are truncated to a multiple of 16.
* '''Add to Custom Tab''':  
* '''Angle: Constrain to One Revolution...''': Sets whether the angles' values are constrained to one revolution.
* '''Angle: Reverse...''': Sets whether the angles are displayed as the reverse of what it actually is.
* '''Angle: Display as Hex...''': Sets whether the angle variables are displayed as hex or decimal.
* '''Show Variable XML''': Shows the XML that represents the variables.
* '''Show Variable Info''': Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.
* '''Background Color...''': Changes the variables background color.
* '''Move...''': Options for moving variables.
** '''Start Move''': Adds the selected variables to the moving-variables-clipboard.
** '''End Move''': Moves the variables on the moving-variables-clipboard to the location of the selected variables.
** '''Clear Move''': Clears the selected-variables-clipboard.
* '''Remove''': Removes the variables from the Variable Panel.
* '''Rename''': Allows you to rename the variables. This will open up a dialog where you can enter text, where the $ represents the variables' original names. For example, entering "my$Value" will result in renaming "X" to "myXValue".
* '''Open Controller''': Opens up an Advanced Controller for the variables.
* '''Open Triplet Controller''': Opens up a Triplet Controller for the variables.
* '''Open Pop Out''': Opens up a Pop Out for the variables.
* '''Add to Tab...''': Adds the variables to a tab of your choosing.
* '''Add to Custom Tab''': Adds the variables to the Custom Tab.


There are also many keyboard shortcuts that can be performed on variables, namely by clicking on a variable when holding one or more keys. These are:
There are also many keyboard shortcuts that can be performed on variables, namely by clicking on a variable when holding one or more keys. These are:
* '''Double Click''':
* '''Double Click''': Opens up the Variable Viewer form for the variable, which shows the variable's Name, Type, Base + Offset, N64 Address, and Emulator Address.
* '''Click + Shift + Number''':  
* '''Click + Shift + Number''': Sets the variable's background color to different colors, depending on the number.
* '''Click + Number''':  
* '''Click + Number''': Sets the variable's highlight color to different colors, depending on the number.
* '''Click + S''':  
* '''Click + S''': Adds the variable to the Custom Tab.
* '''Click + T''':  
* '''Click + T''': Adds the variable to the TAS Tab.
* '''Click + M''':  
* '''Click + M''': Adds the variable to the Memory Tab.
* '''Click + P''':  
* '''Click + P''': Adds the variable to a tab of your choosing.
* '''Click + N''':  
* '''Click + N''': Views the variable's value as an address in the Memory Tab.
* '''Click + F''':  
* '''Click + F''': Fixes the address of the variable.
* '''Click + H''':  
* '''Click + H''': Highlights the variable with a red outline.
* '''Click + L''':  
* '''Click + L''': Locks the variable's value.
* '''Click + D''':  
* '''Click + D''': Toggles whether the variable is displayed as hex or decimal.
* '''Click + R''':  
* '''Click + R''': Allows you to rename the variable.
* '''Click + C''':  
* '''Click + C''': Opens up an Advanced Controller for the variable.
* '''Click + B''':  
* '''Click + B''': Opens up an Bit Controller for the variable.
* '''Click + Escape''':  
* '''Click + Escape''': Removes the variable from the Variable Panel.
* '''Click + Backspace''':  
* '''Click + Backspace''': Removes the variable from the Variable Panel.
* '''Click + Delete''':  
* '''Click + Delete''': Removes the variable from the Variable Panel.
* '''Click + X''':  
* '''Click + X''': Does an action related to moving a variable. Specifically: If the moving-variables-clipboard is empty, then adds the variable to the moving-variables-clipboard. If the moving-variables-clipboard is non-empty, then moves the variables of the moving-variables-clipboard to the clicked variable's current location.
* '''Click + Backtick''':  
* '''Click + Backtick''': Adds the variable to the Var Hack tab.
* '''Click + Z''':  
* '''Click + Z''': Sets the variable value to zero.
* '''Click + Minus''':  
* '''Click + Minus''': Decrements the variable value.
* '''Click + Plus''':  
* '''Click + Plus''': Increments the variable value.
* '''Click + Q''':  
* '''Click + Q''': Sets the variable's background color to a custom color.
* '''Click + O''':
* '''Click + O''': Sets the variable's background color to the last custom color.


== Controllers ==
== Controllers ==

Navigation menu